3

Silverstripe テンプレートを使用しており、現在のページの子ページをループして、その子のページ タイプに応じて「include」コントロールにテンプレート名を動的に入力したいと考えています。

これが私がこれまでに持っているコードです:

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

(templates/Includes ディレクトリに $ClassName 変数に関連する ss ファイルがあります)

エラーは次のとおりです。

エラー: 不明なオープン ブロック「ループ」が発生しました。おそらく、終了タグを見逃したか、スペルを間違えましたか?

Silverstripe フォーラムからこの記事を見つけたので、うまくいくと思います: http://www.silverstripe.org/archive/show/1023

インクルードコントロールに変数を含めることは実際に可能ですか?

4

3 に答える 3

7

現在のクラス名に基づいて ss テンプレートをロードする関数を Page クラスに記述できます。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 に答える