如何将 Drupal 模板绑定到具有多个环境的 Web 表单?
How do I tie a Drupal template to a webform with multiple environments?
免责声明:我继承了一个 Drupal 7.44 网站,完全没有使用 Drupal 的经验。
该公司正在尝试制作一个新的网络表单,他们希望它看起来与现有表单完全一样。环顾四周后,我发现网络表单绑定了一个模板。从文档看来我应该创建更多格式为 webform-form-[nid].tpl.php
的模板文件,其中 [nid]
是网络表单节点 ID。
我们有多个环境,所有更改都必须经过 - 开发、测试,最后是生产。对于新创建的网络表单,节点 ID 在每个环境中不会不同吗?另外,如果我想将同一个模板应用到多个webforms,我真的需要制作多个相同的模板文件吗?
我还为现有的网络表单找到了一些 CSS 样式,看起来像 .webform-client-form-25 button.webform-submit
等等。那个 25 是节点 ID。我没有什么 CSS 经验,但这感觉真的很糟糕。我不想复制 CSS 的块,一遍又一遍地更改节点 ID。将通用的、可重复使用的 CSS 类 分配给网络表单的正确方法是什么?我在编辑表格的时候看到了"Manage Display"下面的"Custom classes",但是好像并没有改变表格实际的HTML。不过,我是否走在正确的轨道上,我应该阅读一些有关它的文档吗?
您完全正确,这些详细的选择器对于可重用布局没有意义。
每个网络表单 HTML 表单都有一个默认的 class .webform-client-form
(这是通用的)和一个包含网络表单的 nid #webform-client-form-<nid>
.
的 ID
因此,您可以将 #webform-client-form-25
更改为上面提到的 class。请注意,这将影响 所有 网络表单。
要将布局设置设置为几个但不是所有的网络表单,您需要为这些网络表单提供一些 class 以将它们与其他表单区分开来。遗憾的是,Webform 模块本身不提供执行此操作的选项,但您可以在主题的 template.php:
中添加一个 form alter hook
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
,您可以为 $affected_forms
.
中列出的一组网络表单定义 CSS
至于模板文件,Webform 本身声明:
This file may be renamed "webform-form-[nid].tpl.php" to target a specific webform on your site. Or you can leave it "webform-form.tpl.php" to affect all webforms on your site.
因此,同样,它不提供开箱即用的选项,但您可以通过在页面预处理函数中扩展 $vars['theme_hook_suggestions']
,在 template.php 中创建主题建议。
免责声明:我继承了一个 Drupal 7.44 网站,完全没有使用 Drupal 的经验。
该公司正在尝试制作一个新的网络表单,他们希望它看起来与现有表单完全一样。环顾四周后,我发现网络表单绑定了一个模板。从文档看来我应该创建更多格式为 webform-form-[nid].tpl.php
的模板文件,其中 [nid]
是网络表单节点 ID。
我们有多个环境,所有更改都必须经过 - 开发、测试,最后是生产。对于新创建的网络表单,节点 ID 在每个环境中不会不同吗?另外,如果我想将同一个模板应用到多个webforms,我真的需要制作多个相同的模板文件吗?
我还为现有的网络表单找到了一些 CSS 样式,看起来像 .webform-client-form-25 button.webform-submit
等等。那个 25 是节点 ID。我没有什么 CSS 经验,但这感觉真的很糟糕。我不想复制 CSS 的块,一遍又一遍地更改节点 ID。将通用的、可重复使用的 CSS 类 分配给网络表单的正确方法是什么?我在编辑表格的时候看到了"Manage Display"下面的"Custom classes",但是好像并没有改变表格实际的HTML。不过,我是否走在正确的轨道上,我应该阅读一些有关它的文档吗?
您完全正确,这些详细的选择器对于可重用布局没有意义。
每个网络表单 HTML 表单都有一个默认的 class .webform-client-form
(这是通用的)和一个包含网络表单的 nid #webform-client-form-<nid>
.
因此,您可以将 #webform-client-form-25
更改为上面提到的 class。请注意,这将影响 所有 网络表单。
要将布局设置设置为几个但不是所有的网络表单,您需要为这些网络表单提供一些 class 以将它们与其他表单区分开来。遗憾的是,Webform 模块本身不提供执行此操作的选项,但您可以在主题的 template.php:
中添加一个 form alter hookfunction 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
,您可以为 $affected_forms
.
至于模板文件,Webform 本身声明:
This file may be renamed "webform-form-[nid].tpl.php" to target a specific webform on your site. Or you can leave it "webform-form.tpl.php" to affect all webforms on your site.
因此,同样,它不提供开箱即用的选项,但您可以通过在页面预处理函数中扩展 $vars['theme_hook_suggestions']
,在 template.php 中创建主题建议。