免责声明:我继承了Drupal 7.44网站,完全没有使用Drupal的经验。

该企业正在尝试制作一个新的Web表单,他们希望它看起来完全像一个现有的Web表单。环顾四周后,我发现该网络表单具有与之关联的模板。从文档看来,我应该创建更多格式为webform-form-[nid].tpl.php的模板文件,其中[nid]是Webform节点ID。

我们有多种环境,所有变更都必须经历-开发,测试以及最终生产。新创建的Web表单的每个环境中的节点ID都会不同吗?另外,如果我要将同一模板应用于多个Web窗体,是否真的需要制作多个相同的模板文件?

我还发现了现有Webform的一些CSS样式,看起来像.webform-client-form-25 button.webform-submit之类。那25是节点ID。我几乎没有CSS经验,但是感觉真的很糟糕。我不想复制CSS块,一遍又一遍地更改节点ID。将通用的可重用CSS类分配给Webform的正确方法是什么?在编辑表单时,我在“管理显示”下看到了“自定义类”,但是它似乎并没有改变表单的实际HTML。我是否走上了正轨,我是否应该只阅读一些有关此的文档?

最佳答案

您是完全正确的,这些详细的选择器对于可重用的布局没有意义。

每个Web表单HTML表单都有一个默认类.webform-client-form(是通用类)和一个ID,其中包含该Webform的nid #webform-client-form-<nid>

因此,您可以将#webform-client-form-25更改为上述类。请注意,这将影响所有Web表单。

要将布局设置设置为几个(但不是全部)Web表单,则需要为这些Web表单提供一些类,以将其与其他Web表单区分开。可悲的是,Webform模块本身没有提供执行此操作的选项,但是您可以在主题的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可以仅为$affected_forms中列出的一组Webform表单定义CSS。

至于模板文件,Webform本身指出:


  可以将该文件重命名为“ webform-form- [nid] .tpl.php”,以定位您网站上的特定Webform。或者,您可以将其保留为“ webform-form.tpl.php”,以影响网站上的所有Webform。


因此,它仍然没有提供现成的选项,但是您可以通过扩展页面预处理功能中的$vars['theme_hook_suggestions']在template.php中创建主题建议。

07-27 13:34