2016-11-17 76 views
0

免責聲明:我繼承了Drupal 7.44站點,根本沒有Drupal的經驗。如何將Drupal模板綁定到具有多個環境的Web窗體?

該企業正在嘗試製作新的網絡表單,並且希望它看起來完全像現有的網絡表單。環顧四周後,我發現webform有一個與之相關的模板。從文檔看來,我應該創建更多模板文件,格式爲webform-form-[nid].tpl.php,其中[nid]是網絡表單節點ID。

我們擁有的所有的改變都要經過多重環境 - 開發,測試,最後督促。在新創建的webforms的每個環境中,節點id是否不同?另外,如果我想將相同的模板應用於多個Web表單,我是否真的需要製作多個相同的模板文件?

我還發現了一些現有的webform的CSS樣式,它看起來像.webform-client-form-25 button.webform-submit等等。那25是節點ID。我沒有什麼CSS經驗,但這感覺非常糟糕。我不想複製CSS塊,反覆更改節點標識。什麼是正確的方式來分配通用的,可重用的CSS類到webforms?在編輯表單時,我在「管理顯示」下看到了「自定義類」,但它似乎沒有更改表單的實際HTML。我是否在正確的軌道上,我是否應該閱讀一些關於它的文檔?

回答

1

你是絕對正確的,這些詳細的選擇不爲可重用的佈局意義。

每個網頁表單的HTML表單獲得一個默認類.webform-client-form(這是一般的),幷包括Web窗體的NID #webform-client-form-<nid>的ID。

因此,您可以將#webform-client-form-25更改爲上面提到的類。請注意,這將影響全部網頁表單。

要將佈局設置設置爲幾個但不是所有的網絡表單,您需要給這些網絡表單一些類來區分它們。可悲的是,在網絡表單模塊本身並不提供一個選項,要做到這一點,但你可以添加一個形式,你的主題的template.php改變鉤:

function mytheme_form_alter(&$form, &$form_state, $form_id) { 
    $affected_forms = array('webform_client_form_25', 'webform_client_form_37', [...]); 
    if (in_array($form_id, $affected_forms)) { 
    $form['#attributes']['class'][] = 'my-custom-class'; 
    } 
} 

隨着.my-custom-class然後你可以定義CSS僅用於該組的在$affected_forms中列出的網絡表單表單。

至於模板文件,網絡表單本身規定:

可以將該文件改名爲「網絡表格,形式 - [NID] .tpl.php」,以針對特定網站上的網頁表單。或者,您可以將其保留爲「webform-form.tpl.php」以影響您網站上的所有網頁表單。

所以,再次,它不提供一個選項出的現成的,但你可以在你的template.php通過在頁面預處理功能擴展$vars['theme_hook_suggestions']創建主題的建議。

+0

謝謝,這有助於!看起來,我仍然需要提前知道表單的空白處。那是對的嗎?因此,無法提供可供業務用戶重新用於未來Web表單的模板。這看起來有點違反直覺,通常你會將模板看作是一個新特定實例可以基於的通用事物。 – Egor

+0

對不起,我想我的意思是CSS類不能提前指定。它看起來像模板可以使用主題建議通用,如果我忽略CSS或找到一些其他的方式來做除了形式改變鉤子。 – Egor

+0

那麼,有辦法繞過需要提前知道nid,但它不是由Webform自己提供的。通過Drupal用戶界面,您可以將選擇字段添加到您選擇webform的「類型」的webform內容類型中。然後,您可以根據該字段的值創建主題建議。這樣,您可以創建屬於特定類型的各種網絡表單,並通過主題建議讓他們使用像「webform-form- [type] .tpl.php」這樣的模板。因此,不是檢查表單ID,而是檢查webform類型字段。 – Paul

相關問題