我主要是目前在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;
}
}
}
答案 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>';
}