1

以下代码创建一个类别数组。我怎样才能只获取设置为“包含在导航中”= 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,它都会显示所有类别。

希望有人能给我一个提示

4

1 回答 1

3

这是应该起作用的东西

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

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

这里的关键是属性过滤器include_in_menu,它将仅搜索包含在菜单中选项设置为是的类别。然后按级别从大到小排序,用getFirstItem()方法得到第一个。

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

于 2012-05-30T15:28:01.817 回答