覆盖Silverstripe自定义表单字段模板层次结构

时间:2017-08-01 12:09:22

标签: php forms templates silverstripe

我正在尝试在Silverstripe v3.6中创建自己的FormFieldFieldHolder模板。

我创建了一个名为FieldList的{​​{1}},然后我遍历其字段以在每个字段上设置自定义模板:

$Fields

我已将模板放在mysite / templates / Includes中,例如。 CustomCheckboxField.ss删除了普通类,转而使用 foreach($Fields->dataFields() as $field) { $type = $field->Type(); // Field holder if ($type == "checkbox") { $field->setFieldHolderTemplate('CustomCheckboxField_holder'); } else { $field->setFieldHolderTemplate('CustomFormField_holder'); } // Field if ($type == "dropdown") { $field->setTemplate('CustomSelectField'); } else if ($type == "optionset") { $field->setTemplate('CustomRadioField'); } else if ($type == "checkbox") { $field->setTemplate('CustomCheckboxField'); } else { $field->addExtraClass('custom-form-control'); } }

custom-control-input

这是有效的,但前提是我在同一文件夹中包含默认的FormField.ss和FormField_holder.ss模板(从framework / templates / forms复制)。

为什么他们需要被包括在内,当我超越它们时?如果需要,Silverstripe不应该回退到框架文件夹中的原始文件吗?我的自定义表单中的每个字段都有一个自定义模板(<input $getAttributesHTML("class") class="custom-control-input<% if extraClass %> $extraClass<% end_if %>" /> 除外),因此不需要它们。

我想知道我是否正确地这样做了。谢谢!

1 个答案:

答案 0 :(得分:1)

原来我的问题是由于在整个过程中拾取的v3.4文档中的错误。表单字段模板的目录应该是mysite / templates / forms(NOT Includes)。

答案在这里找到:SilverStripe custom FormField_Holder