Magento在管理员订单中加载类别

时间:2013-02-20 13:29:29

标签: php magento plugins

我正在尝试加载标记为包含在Magento导航中的所有类别,其顺序与它们在“管理”面板中的顺序相同,以便构建自定义分层菜单(我们将输出与另一个菜单组合在一起)存储在DB中的其他页面)。

这是我在目前为止生成菜单的函数中使用的:

private function generateCategories() {

    $_root_category_id = Mage::app()->getWebsite(true)->getDefaultStore()->getRootCategoryId();

    $_current_children = Mage::getModel('catalog/category')
        ->getCollection()
        ->addAttributeToSelect('*')
        ->addIsActiveFilter()
        ->addLevelFilter(2)
        ->addOrderField('position', 'asc');

    $i = 0;

    $html = '';

    foreach( $_current_children as $l0 ) {
        if ($l0->getID() != $_root_category_id && $l0->getName() != '' && $l0->getIncludeInMenu())  {

            $i++;

            if (Mage::helper('core/url')->getCurrentUrl() == $l0->getURL())
                $active = ' active';
            else
                $active = '';

            if ($l0->hasChildren())
                $parent = ' parent';
            else
                $parent = '';

            $html .= '<li class=" level0' . $active . $parent . '"><a href="' . $l0->getURL() . '" class="top">' . $l0->getName() . '</a>';

            if ($l0->hasChildren()) {
                $multiplier = 1;
                $iteration = 0;

                $level1 = '';
                $level1[] = '';

                foreach ( explode(',', $l0->getChildren()) as $l1 ) {

                    $l1 = Mage::getModel('catalog/category')->load($l1);

                    if ( $l1->getIncludeInMenu() ) {

                        if (Mage::helper('core/url')->getCurrentUrl() == $l1->getURL())
                            $active = ' active';
                        else
                            $active = '';

                        if ($iteration == $this->perColumn) {
                            $iteration = 0;
                            $multiplier++;
                        }

                        $iteration++;

                        $level1[] = '<span class="level1' . $active . '"><a href="' . $l1->getURL() . '" title="' . $l1->getName() . '">' . $l1->getName() . '</a></span>';
                    }
                }

                unset($level1[0]);

                $numLinks = count($level1);
                $columns = $numLinks / $this->perColumn;

                $html .= '<div class="border-cover"></div><div class="dropdown" style="width: ' . $this->colWidth * $multiplier . 'em;">';

                $used = 0;
                $iteration = 0;

                foreach( $level1 as $link ) {
                    $used++;
                    $iteration++;

                    if ($used == 1)
                        $html .= '<div class="col" style="float: left; width: ' . $this->colWidth . 'em;">';

                    $html .= $link;

                    if ($used == 4 || $iteration == $numLinks) {
                        $html .= '</div>';
                        $used = 0;
                    }
                }

                $html .= '</div>';
            }

            $html .= '</li>';
        }
    }

    return $html;

}

我的印象是->addOrderField('position', 'asc')应该按照与管理员面板相同的顺序过滤类别,但这仅适用于第一级($l0)类别,而不是子类别好。

有人可以建议如何修改此功能吗?

2 个答案:

答案 0 :(得分:3)

尝试使用函数getChildrenCategories()而不是getChildren,这将返回一个对象而不是类别的id,因此您不需要加载信息。

可在Change sort order of Magento subcategories

找到更多信息

答案 1 :(得分:0)

$ subcategories = Mage :: getModel('catalog / category') - &gt; getCollection()
- &GT; addAttributeToSelect( '姓名')
- &gt; addFieldToFilter('parent_id',$ categoryId)
- &gt; addAttributeToSort('name',ASC);
?&GT;