使用Silverstripe的“ChildrenOf”语法,我已经成功地列出了页面父级的所有子级。它被用在页面上的“see also”样式列表中。
我想从列表中排除当前页面,但不确定如何确定哪个页面与当前页面相同,就像我在父级范围内的控制循环中一样。有任何想法吗?这是我正在做的伪代码:
<% control ChildrenOf(page-url) %>
<!-- Output some stuff, like the page's $Link and $Title -->
<% end_control %>
答案 0 :(得分: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 %>
<强>更新强>
正如您在下面的评论中提到的,您希望使用$ 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
答案 1 :(得分: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/