0

Silverstripe の「ChildrenOf」構文を使用して、ページの親のすべての子を一覧表示することに成功しました。ページの「関連項目」スタイル リストで使用されています。

現在のページをリストから除外したいのですが、制御ループ内で親のスコープにいるため、現在のページと同じものを特定する方法がわかりません。何か案は?これが私がやっていることの疑似コードです:

<% control ChildrenOf(page-url) %>
    <!-- Output some stuff, like the page's $Link and $Title -->
<% end_control %>
4

2 に答える 2

3

このための組み込みのページコントロールがあるため、現在のページをリストから除外するには、次のようにします。

<% control ChildrenOf(page-url) %>
    <% if LinkOrCurrent = current %>
        <!-- exclude me -->
    <% else %>
       <!-- Output some stuff, like the page's $Link and $Title -->
    <% end_if %>
<% end_control %>

http://doc.silverstripe.org/sapphire/en/reference/built-in-page-controls#linkingmode-linkorcurrent-and-linkorsectionを参照してください

アップデート

以下のコメントで$Posコントロールを使用したいと述べたように、データオブジェクトセットを反復処理する前にフィルター処理する必要があります。Page_Controllerクラスに以下を追加します。

function FilteredChildrenOf($pageUrl) {
    $children = $this->ChildrenOf($pageUrl);
    if($children) {
        $filteredChildren = new DataObjectSet();
        foreach($children as $child) {
            if(!$child->isCurrent()) $filteredChildren->push($child);
        }
        return $filteredChildren;
    }
}

次に、テンプレートの「ChildrenOf」を「FilteredChildrenOf」に置き換えます。

<% control FilteredChildrenOf(page-url) %>
//use $Pos here
<% end_control
于 2011-09-29T14:35:44.067 に答える