2011-09-28 36 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