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 に答える