3

我正在使用 silverstripe 模板,我想遍历当前页面的子页面,并根据该子页面的类型在“包含”控件中动态输入模板名称。

这是我到目前为止的代码:

    <div id="tertiary-content">                   
        <% if $Children %>
            <% loop $Children %>
                <% include $ClassName %>
            <% end_loop %>
        <% end_if %>
    </div>

(我的模板/包含目录中有与 $ClassName 变量相关的 ss 文件)

这是我得到的错误:

错误是:遇到未知的开放块“循环”。也许您错过了结束标签或拼写错误?

我从一个 silverstripe 论坛上找到了这篇文章,这让我觉得它应该可以工作: http ://www.silverstripe.org/archive/show/1023

实际上是否可以在包含控件中包含变量?

4

3 回答 3

7

您可以在 Page 类中编写一个函数,该函数根据当前类名加载 ss 模板。在您的 Page.php 文件中。

class Page extends SiteTree {

/**
 * Returns a template based on the current ClassName
 * @return {mixed} template to be rendered
 **/
public function getIncludeTemplate(){
    return $this->renderWith($this->ClassName);
}

}

然后在您的模板中

<div id="tertiary-content">                   
    <% if $Children %>
        <% loop $Children %>
            $IncludeTemplate
        <% end_loop %>
    <% end_if %>
</div>
于 2013-08-22T12:48:57.113 回答
5

您可以renderWith直接从模板调用,例如:

<div id="tertiary-content">                   
    <% if $Children %>
        <% loop $Children %>
            $renderWith($ClassName)
        <% end_loop %>
    <% end_if %>
</div>
于 2016-06-29T08:25:11.743 回答
1

做了一些测试,无法开始<% include $ClassName %>工作。但是您可以通过以下方式解决它:

<% if $ClassName = 'SomeClass' %>
    <% include SomeClass %> 
<% else_if $ClassName = 'SomeOtherClass' %>
    <% include SomeOtherClass %>
<% else %>
    <% include DefaultClass %>
<% end_if %>

不那么漂亮,但可以完成工作。

于 2013-08-22T11:11:57.187 回答