创建一个类别数组,但不包括“包含在导航中”= OFF类别

时间:2012-05-30 11:44:27

标签: php magento

以下代码创建一个类别数组。我怎样才能获得设置为“包含在导航中”= ON

的类别
public function toOptionArray()
{
    if (! isset($this->_options))
    {
        $options = array(
            array(
                'label' => Mage::helper('vertnav')->__('Store base'),
                'value' => 'root',
            ),
            array(
                'label' => Mage::helper('vertnav')->__('Current category children'),
                'value' => 'current',
            ),
            array(
                'label' => Mage::helper('vertnav')->__('Same level as current category'),
                'value' => 'siblings',
            ),
        );
        $resource = Mage::getModel('catalog/category')->getResource();
        $select = $resource->getReadConnection()->select()->reset()
            ->from($resource->getTable('catalog/category'), new Zend_Db_Expr('MAX(`level`)'));
        $maxDepth = $resource->getReadConnection()->fetchOne($select);
        for ($i = 2; $i < $maxDepth; $i++)
        {
            $options[] = array(
                'label' => Mage::helper('vertnav')->__('Category Level %d', $i),
                'value' => $i,
            );
        }
        $this->_options = $options;
    }
    return $this->_options;
}

public function getAllOptions()
{
    return $this->toOptionArray();
}

此代码是导航扩展的一部分,可为其创建垂直导航 magento中的类别。但不幸的是,它显示所有类别,无论它们是否设置为“包含在导航中”= ON或OFF。

希望有人能给我一个提示

1 个答案:

答案 0 :(得分:3)

这是应该有用的东西

$categoryCollection = Mage::getModel('catalog/category')
->getCollection()
->addAttributeToFilter('include_in_menu' , 1)
->addAttributeToSort('level' , 'DESC');

$maxDepth = $categoryCollection->getFirstItem()->getLevel();

此处的关键是属性include_in_menu上的过滤器,该过滤器仅搜索“包含在菜单中”选项设置为“是”的类别。 然后按级别从大到小排序,并使用getFirstItem()方法获得第一个。

由于magento轻松加载机制,没有性能问题。

相关问题