web-dev-qa-db-ja.com

すべてのカテゴリとサブカテゴリを取得するにはどうすればよいですか?

カテゴリがアクティブで、[ナビゲーションメニューに含める]が[いいえ]に設定されている場合、すべてのカテゴリとサブカテゴリを取得するにはどうすればよいですか?

私はこれを使用しようとします:

<?php 
$_categories = Mage::getBlockSingleton('catalog/navigation'); 
foreach ($_categories->getStoreCategories() as $_category) { 
$category = Mage::getModel('catalog/category'); 
$category->load($_category->getId()); 
$subcategories = explode(',', $category->getChildren()); 
?> 
<dl> 
<dt><?php echo $this->htmlEscape($_category->getName()); ?></dt> 
<dd> 
<ol> 
<?php 
foreach ($subcategories as $subcategoryId) { 
$category->load($subcategoryId); 
echo '<li><a href="' . $category->getURL() . '">' . $category->getName() . '</a></li>'; 
} 
?> 
</ol> 
</dd> 
</dl> 
<?php

} 
?> 

ただし、カテゴリの「ナビゲーションメニューに含める」が「いいえ」の場合、フロントページには表示されません。

12
Donnie

変更する必要があるのは1つだけです。 $_categories = Mage::getBlockSingleton('catalog/navigation')を呼び出すと、実際には具体的に_catalog/navigation_モデルからカテゴリを取得しています。「非ナビゲーション」カテゴリのフィルタリングはすでに完了しています。代わりに、_catalog/category_モデルからコレクションを取得して、サイトですべてのカテゴリを利用できるようにします。

_$categories = Mage::getModel('catalog/category')
        ->getCollection()
        ->addAttributeToSelect('*')
        ->addIsActiveFilter();
_

addIsActiveFilter()を使用して、現在アクティブ/有効になっているカテゴリのみを取得していることに注意してください。

30
1000Nettles

カタログ/カテゴリヘルパーを使用したい

$helper = Mage::helper('catalog/category');
$categories = $helper->getStoreCategories();
3
Matthias Kleine