SilverStripe 3-扩展注释表单
我想扩展AddCommentForm,以便可以输出带有自定义类的字段标签。我想删除“左”类从标签,因为它与基础冲突,但理想的是,我想完全控制输出HTML。 我试图在mysite/code中扩展CommentingController,但没有成功 我可以设置它使每个字段类型都有自己的.ss模板吗SilverStripe 3-扩展注释表单,silverstripe,Silverstripe,我想扩展AddCommentForm,以便可以输出带有自定义类的字段标签。我想删除“左”类从标签,因为它与基础冲突,但理想的是,我想完全控制输出HTML。 我试图在mysite/code中扩展CommentingController,但没有成功 我可以设置它使每个字段类型都有自己的.ss模板吗 如何做到这一点?在SilverStripe中,您只需在您的mysite或主题文件夹中创建一个同名文件,即可覆盖模板 因此,假设您有一个类SomeForm的表单,您需要做的就是创建一个名为SomeForm.
如何做到这一点?在SilverStripe中,您只需在您的
mysite
或主题文件夹中创建一个同名文件,即可覆盖模板
因此,假设您有一个类SomeForm
的表单,您需要做的就是创建一个名为SomeForm.ss的文件,SilverStripe将使用该文件而不是默认的Form.ss
但是,css类“left”没有添加到Form.ss
中,在该模板中只有表单html,字段添加在循环中。
(此外,comment模块没有为表单使用类,因此在这里无论如何也不起作用。)
每个字段都有自己的模板(实际上是两个模板)MyField.ss
和MyField\u holder.ss
如果两个模板中的一个不存在,它将返回默认文件FormField.ss
和FormField\u holder.ss
以类TextField
为例,它将使用:
FormField\u holder.ss
因为没有TextField\u holder.ss
TextField.ss
您查找的
位于表单字段\u holder.ss中
当然,您可以创建一个FormField\u holder.ss
并复制,但这也会影响CMS。所以你需要一些方法来只影响前端
不幸的是,对于这个问题,我并没有一个好的、干净的解决方案。
通常我会建议对表单进行子分类,并覆盖循环中字段的模板。
但我认为您在这里使用的是这个模块:它没有为该表单使用类,所以我们必须使用一个变通方法并将其挂接到该控制器中
文件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:
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');
}
}
}
}
CommentingController:
extensions:
- 'MyCommentControllerExntesion'
<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>
文件MyFrontEndField\u holder.ss:
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');
}
}
}
}
CommentingController:
extensions:
- 'MyCommentControllerExntesion'
<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>
$Title
$Field
$RightTitle
$Message
$Description
@Zauberfish-Man,这真是帮了大忙——正是我要找的!SilverStripe 3是一个很棒的系统,但缺少高级教程。我并不害怕用PHP弄脏我的手,但我很少知道我的子类放在哪里。非常感谢!NP是的,silverstripe有个众所周知的问题,没有足够好的医生。尽管SilverStripe社区可能很小,但你可以在这里或IRC上继续提问,但你得到的帮助通常都很好?难道它不应该扩大紧张吗?和.ss文件转到mytemplate/templates或mytemplate/templates/Includes?我都做了,但没有效果……是的。php文件进入mysite/code
;2) 我想没关系;3) 将文件放入mysite/templates
或themes/myteme/templates
;4) 不要忘记使用/?flush=all
访问您的站点以刷新缓存。模板和扩展都被缓存