【问题标题】:Override Silverstripe custom form field template hierarchy覆盖 Silverstripe 自定义表单域模板层次结构
【发布时间】:2017-08-01 12:09:21
【问题描述】:

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

我创建了一个名为 $FieldsFieldList,然后循环遍历其字段以在每个字段上设置自定义模板:

    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 不应该回退到框架文件夹中的原始文件吗?我的自定义表单中的每个字段都有一个自定义模板(HeadingFields 除外),因此不需要它们。

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

【问题讨论】:

  • 您可以通过SSViewer 上的配置启用源文件注释提示,以查看正在呈现哪些模板以及在哪里呈现。您是正确的,您不使用的模板将回退到默认(框架)版本。
  • 感谢@RobbieAverill,我可以看到一个隐藏字段,并且我的表单中的提交按钮依赖于我复制到 /mysite/templates/Includes 但没有重命名/自定义的框架字段模板 (FormField.ssFormField_holder.ssHeaderField.ss)。如果我删除这三个模板,所有自定义字段都会中断。我还忘了在上面提到,在此文件夹中包含任何自定义模板都会破坏 CMS。 Silverstripe 似乎在同一文件夹中查找所有其他字段模板,如果它们不存在,则会感​​到困惑。

标签: php forms templates silverstripe


【解决方案1】:

原来我的问题是由于在此过程中发现的 v3.4 文档中的一个错误。表单域模板的目录应该是 mysite/templates/forms(不包括)。

在这里找到答案:SilverStripe custom FormField_Holder

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多