2014-02-26 31 views
0

我主要是當前在Magento工作的前端開發人員。和所有Magento一樣,似乎沒有一種簡單的方法來檢索當前頁面中的兄弟姐妹。在PHP中獲取頁面的直接兄弟姐妹

要做到這一點,我首先通過ID確定我在哪個頁面上。

然後,我使用for循環來確定此元素的位置,方法是評估父頁面的子項列表中的ID。

一旦我有了位置,我重新運行循環來獲取當前(i-1)之前或當前位置(i + 1)之前的兄弟姐妹。

這感覺真的很髒,過度設計,我知道有一個更優雅的方法來產生相同的結果,我只需要在正確的方向點。

注意:我擴大與下面http://www.bubbleshop.net/magento-cms-tree.html

守則所列的以下代碼模塊如下:

public function getSiblingsNav($parentID, $currentPageID) { 

    $parentPage = Mage::getModel('cms/page')->load($parentID); 
    $activePages = $parentPage->getChildren()->addActiveFilter(); 
    $html = ''; 
    if ($activePages->count() > 0) { 
     $html .= '<ul class="siblings">'; 
     foreach ($activePages as $page) { 
     $i++; 
     if ($currentPageID == $page->getId()) { 
       $position = $i;  
      } 
     } 
     foreach ($activePages as $page) { 
      $location++; 
      if ($location == $position + 1 || $location == $position - 1) { 
       $html .= '<li class="' . ($location == $position + 1 ? 'next' : 'previous') . '"><a class="button" href="' . $page->getUrl() . '">'; 
       $html .= $page->getTitle(); 
       $html .= '</a></li>';    
      } 
     } 
     $html .= '</ul>'; 
     return $html; 
     } else { 
      return false; 
     } 
    } 
} 
+0

可能是你有收集想嘗試MySQL的限制功能。要獲得前一頁,如'id current-page-id order by id asc limit 1' –

+0

啊,我沒有想過那。會給它一個鏡頭。 – nickspiel

回答

0
$cmsParentId = 13; 

$parentNode = Mage::getModel('enterprise_cms/hierarchy_node') 
    ->getCollection() 
    ->addFieldToFilter('page_id', $cmsParentId) 
    ->getFirstItem(); 

$children = Mage::getModel('enterprise_cms/hierarchy_node') 
    ->getCollection() 
    ->addFieldToFilter('parent_node_id', $parentNode->getId()); 

$children->getSelect()->order('sort_order'); 

$html = ''; 

if ($children->getSize()) { 
    $html = '<ul class="siblings">'; 
    foreach ($children as $child) { 
     $html .= '<li>Node ID: ' . $child->getId() 
      . '<br />Page ID: ' . $child->getPageId() 
      . '<br />Identifier: ' . $child->getIdentifier() 
      . '<br />Position: ' . $child->getSortOrder() 
      . '<br />Path: ' . $child->getRequestUrl() . '</li>'; 
    } 
    $html .= '</ul>'; 
} 
+0

感謝您的回覆!有幾種方法您使用,我沒有意識到。這似乎正在返回所有的孩子。在我的情況下,我只想返回當前頁面的下一個和上一個兄弟。那有意義嗎? – nickspiel