覆盖 Silverstripe 自定义表单字段模板层次结构
Override Silverstripe custom form field template hierarchy
我正在尝试在 Silverstripe v3.6 中创建自己的 FormField
和 FieldHolder
模板。
我创建了一个名为 $Fields
的 FieldList
,然后遍历其字段以在每个字段上设置自定义模板:
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');
}
}
我已将模板放在 mysite/templates/Includes 中,例如。 CustomCheckboxField.ss 放弃正常的 类 以支持 custom-control-input
:
<input $getAttributesHTML("class") class="custom-control-input<% if extraClass %> $extraClass<% end_if %>" />
这有效,但前提是我在同一文件夹中包含默认的 FormField.ss 和 FormField_holder.ss 模板(从 framework/templates/forms 复制)。
当我覆盖它们时,为什么需要包括它们?如果需要,Silverstripe 不应该回退到框架文件夹中的原始文件吗?我的自定义表单中的每个字段都有一个自定义模板(HeadingField
s 除外),因此不需要它们。
我想知道我这样做是否正确。谢谢!
原来我的问题是由于一路上找到的 v3.4 文档中的错误。表单字段模板的目录应为 mysite/templates/forms(不包括)。
答案在这里找到:
我正在尝试在 Silverstripe v3.6 中创建自己的 FormField
和 FieldHolder
模板。
我创建了一个名为 $Fields
的 FieldList
,然后遍历其字段以在每个字段上设置自定义模板:
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');
}
}
我已将模板放在 mysite/templates/Includes 中,例如。 CustomCheckboxField.ss 放弃正常的 类 以支持 custom-control-input
:
<input $getAttributesHTML("class") class="custom-control-input<% if extraClass %> $extraClass<% end_if %>" />
这有效,但前提是我在同一文件夹中包含默认的 FormField.ss 和 FormField_holder.ss 模板(从 framework/templates/forms 复制)。
当我覆盖它们时,为什么需要包括它们?如果需要,Silverstripe 不应该回退到框架文件夹中的原始文件吗?我的自定义表单中的每个字段都有一个自定义模板(HeadingField
s 除外),因此不需要它们。
我想知道我这样做是否正确。谢谢!
原来我的问题是由于一路上找到的 v3.4 文档中的错误。表单字段模板的目录应为 mysite/templates/forms(不包括)。
答案在这里找到: