用PHP获取页面的直接兄弟姐妹

时间:2014-02-26 23:44:59

标签: php html magento foreach

我主要是目前在Magento工作的前端开发人员。与Magento一样,似乎没有一种简单的方法来检索当前页面的直接兄弟姐妹。

要做到这一点,我首先要确定我在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;
       }  
    }
}

1 个答案:

答案 0 :(得分: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>';
}