0

必要な特定のカテゴリごとにカスタム ドロップダウン メニューを正常に作成しましたが、そのうちの 1 つがサブカテゴリ内のサブカテゴリをロードする必要があり、動作させることができません。

「サブカテゴリ内のサブカテゴリ」のない作業コードは次のとおりですが、このコードに第 3 レベルを追加する方法を見つける必要があります。

 <!-- Vending -->
 <?php $main = Mage::getModel('catalog/category')->load(355) ?>
 <li class="eight"><a href="<?php echo $main->getUrl() ?>"><?php echo $main->getName(); ?></a>
 <?php $children = Mage::getModel('catalog/category')->getCategories(355); ?>
 <ul class="nav_static">
 <?php foreach ($children as $category): ?>
 <li>
 <a href="<?php echo $category->getRequestPath(); ?>">
 <?php echo $category->getName(); ?>
 </a>
 </li>
 <?php endforeach; ?>
 </ul>
 </li>
 <!-- END - Vending -->
4

1 に答える 1

1

https://stackoverflow.com/a/14586422/653867で提案したように、第 2 レベルのカテゴリのカテゴリ オブジェクトをロードする必要があります。

$cat = Mage::getModel('catalog/category')->load($category->getEntityId());

次に、実行してその子にアクセスできます

$children = $cat->getChildrenCategories();

$children変数は type のコレクションでありMage_Catalog_Model_Resource_Category_Collection、それを繰り返し処理して次のレベルのカテゴリを出力できます

最初に $main で getChildrenCategories() を呼び出すと、コードを少し改善できると思います。ループ内のすべての子をロードする必要はありませんが、パフォーマンスが低下する可能性があります。代わりにこれを使用してください (実際には再帰呼び出しでさらに改善できますが、そのような設定には追加のブロックの作成が含まれ、この特定のケースでは面倒になる可能性があります):

 <?php $main = Mage::getModel('catalog/category')->load(355) ?>
 <li class="eight"><a href="<?php echo $main->getUrl() ?>"><?php echo $main->getName(); ?></a>
 <?php $children = $main->getChildrenCategories(); ?>
 <ul class="nav_static">
 <?php foreach ($children as $category): ?>
 <li>
 <a href="<?php echo $category->getUrl(); ?>">
 <?php echo $category->getName();

 $subCategories = $category->getChildrenCategories();
 foreach ($subCategories as $subCat) {
 /**
  *your code to output the next level categories
  */
 }
 ?>
 </a>
 </li>
 <?php endforeach; ?>
 </ul>
 </li>
于 2013-01-29T17:33:45.283 に答える