我想扩展AddCommentForm,以便我可以使用自定义类输出字段标签。我想从标签中删除'left'类,因为它与Foundation冲突,但理想情况下我希望完全控制输出的HTML。
我试图在mysite / code中扩展CommentingController,但没有运气......
我可以进行设置,以便每个字段类型都有自己的.ss模板吗?
我该怎么做?
答案 0 :(得分:5)
在SilverStripe中,您只需在mysite
或主题文件夹中创建同名文件即可覆盖模板。
所以,假设您有一个类SomeForm
的表单,您只需要创建一个名为SomeForm.ss
的文件,SilverStripe将使用该文件而不是默认的Form.ss
。< / p>
但是,Form.ss
中没有添加css类'left',在该模板中只有html格式,字段会循环添加。
(此外,注释模块不使用表单的类,因此无论如何这将不起作用。)
每个字段都有自己的模板(实际上是2个模板)。 MyField.ss
和MyField_holder.ss
。
如果两个模板中的一个不存在,它将回退到默认文件FormField.ss
和FormField_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>