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;
    }
}

然后用“FilteredChildrenOf”替换模板中的“ChildrenOf”:

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

在 Silverstripe 3.1 中,您可以使用这样的方法 -

<% loop $Parent.Children %>
    <% if $LinkingMode != current %>
        <!-- Output some stuff, like the page's $Link and $Title , $Pos etc -->
    <% end_if %>
<% end_loop %>

这样您就可以列出所有父母的子页面。

请参阅https://docs.silverstripe.org/en/3.1/developer_guides/templates/common_variables/

于 2015-08-19T11:38:28.050 回答