【问题标题】:SilverStripe 3 - Extending Comments FormSilverStripe 3 - 扩展评论表格
【发布时间】:2014-03-15 23:24:08
【问题描述】:

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

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

我可以将其设置为每个字段类型都有自己的 .ss 模板吗?

我该怎么做?

【问题讨论】:

    标签: silverstripe


    【解决方案1】:

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

    所以,假设你有一个 SomeForm 类的表单,你需要做的就是创建一个名为 SomeForm.ss 的文件,SilverStripe 将使用它而不是默认的 Form.ss

    但是,Form.ss 中没有添加 css 类“left”,在该模板中只有 html 表单,字段是循环添加的。
    (另外,评论模块不使用表单的类,所以无论如何这里都行不通。)

    每个字段都有自己的模板(实际上是 2 个模板)。 MyField.ssMyField_holder.ss.
    如果 2 个模板之一不存在,它将回退到默认文件 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。所以你需要一些方法来只影响前端。

    不幸的是,对于这个问题,我真的没有很好的解决方案。 通常我会建议对该表单进行子分类并在循环中覆盖字段的模板。
    但我认为您在这里使用了这个模块: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>
    

    【讨论】:

    • @Zauberfish 伙计,这对我很有帮助——正是我想要的! SilverStripe 3 是一个很棒的系统,但缺少高级教程。我不怕弄脏 PHP,但是将我的子类放在哪里并不明显。非常感谢!
    • np。是的,它是银条的一个已知问题,没有足够好的文档。请随时在此处或 IRC 上继续提问,SilverStripe 社区可能很小,但获得的帮助通常非常好。
    • 确定:我将 MyCommentControllerExtension 添加到 mysite/code?它不应该扩展 CommentsExtension 吗? .ss 文件会转到 mytemplate/templates 还是 mytemplate/templates/Includes?我都做了,但没有效果......
    • 1) 是的。 php 文件进入mysite/code; 2)我认为没关系; 3) 将 ss 文件放入mysite/templatesthemes/mytheme/templates; 4) 不要忘记使用/?flush=all 访问您的站点以刷新缓存。模板和扩展都被缓存
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    相关资源
    最近更新 更多