以下代码创建一个类别数组。我怎样才能获得设置为“包含在导航中”= 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。
希望有人能给我一个提示
答案 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轻松加载机制,没有性能问题。