2011-09-28 43 views
0

使用银条纹的“ChildrenOf”语法,我已成功列出父母的所有子女。它被用在页面上的“另请参阅”样式列表中。银条纹:从父母的子女列表中排除当前页面

我想从列表中排除当前页面,但不确定如何确定哪一个与当前页面相同,因为在控制循环内我处于父级范围内。有任何想法吗?下面是我在做什么伪代码:

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

回答

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

UPDATE

正如您在您的评论中提到的那样,您希望使用$ Pos控件,您需要过滤dataobj迭代它之前。 以下内容添加到您的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 
+0

谢谢你的回答。我实际上发现了这一点,但是当我试图以3个集合显示结果时卡住了。$ Pos变量不再有用,因为我不能依赖它的位置。有没有一种方法可以动态计算物品,以便每隔三个物品放置一个关闭/开启LI? –

+0

更新了我的答案,允许使用$ Pos控件 – schellmax