SilverStripe 3 - 扩展评论表

时间:2014-03-15 23:24:08

标签: silverstripe

我想扩展AddCommentForm,以便我可以使用自定义类输出字段标签。我想从标签中删除'left'类,因为它与Foundation冲突,但理想情况下我希望完全控制输出的HTML。

我试图在mysite / code中扩展CommentingController,但没有运气......

我可以进行设置,以便每个字段类型都有自己的.ss模板吗?

我该怎么做?

1 个答案:

答案 0 :(得分:5)

在SilverStripe中,您只需在mysite或主题文件夹中创建同名文件即可覆盖模板。

所以,假设您有一个类SomeForm的表单,您只需要创建一个名为SomeForm.ss的文件,SilverStripe将使用该文件而不是默认的Form.ss。< / p>

但是,Form.ss中没有添加css类'left',在该模板中只有html格式,字段会循环添加。
(此外,注释模块不使用表单的类,因此无论如何这将不起作用。)

每个字段都有自己的模板(实际上是2个模板)。 MyField.ssMyField_holder.ss
如果两个模板中的一个不存在,它将回退到默认文件FormField.ssFormField_holder.ss

所以我们以类TextField为例,它将使用:

  • FormField_holder.ss因为没有TextField_holder.ss
  • TextField.ss

您寻找的<label>位于FormField_holder.ss内 您当然可以创建FormField_holder.ss并复制Content from the original file,但这也会影响CMS。所以你需要一些方法才能影响前端。

不幸的是,我对这个问题并没有很好的解决方案。 通常我会建议在循环中形成和覆盖Fields的模板的子类 但我认为你在这里使用这个模块:https://github.com/silverstripe/silverstripe-comments/没有使用该表的类,所以我们必须使用一个解决方法并挂钩到该控制器。


档案 MyCommentControllerExntesion :     

class MyCommentControllerExntesion extends Extension {
    public function alterCommentForm($form) {
        foreach($form->Fields() as $field) {
            if (!$field->is_a('HiddenField') {
                // skip hidden fields
                $field->setFieldHolderTemplate('MyFrontEndField_holder');
            }
        } 
    }
}

档案 config.yml

CommentingController:
  extensions:
    - 'MyCommentControllerExntesion'

档案 MyFrontEndField_holder.ss

<div id="$Name" class="field<% if $extraClass %> $extraClass<% end_if %>">
    <% if $Title %><label class="not-left" for="$ID">$Title</label><% end_if %>
    <div class="middleColumn">
        $Field
    </div>
    <% if $RightTitle %><label class="right" for="$ID">$RightTitle</label><% end_if %>
    <% if $Message %><span class="message $MessageType">$Message</span><% end_if %>
    <% if $Description %><span class="description">$Description</span><% end_if %>
</div>