Отображение всех категорий детей и их детей в magento
Поэтому я хочу, чтобы этот код отображал категории children и их дети на моем представлении.страница phtml в приложении / frontend / default / default / catalog / category /
Таким образом, когда вы видите страницу категории, вы видите всех детей из всех подкатегорийВот что я получил, он показывает подкатегории, но не их детей.
<?php
$_category = $this->getCurrentCategory();
$collection = Mage::getModel('catalog/category')->getCategories($_category- >entity_id);
$helper = Mage::helper('catalog/category');
?>
<ul>
<?foreach ($collection as $cat):?>
<?php if($_category->getIsActive()):?>
<?php
$cur_category = Mage::getModel('catalog/category')->load($cat->getId());
$_img = $cur_category->getImageUrl();
?>
<li>
<a href="<?php echo $helper->getCategoryUrl($cat);?>">
<img src="<?php echo $_img?>" title="$cat->getName()"/>
<cite><?php echo $cat->getName();?></cite>
</a>
</li>
<?php endif?>
<?php endforeach;?>
3 ответа:
Пожалуйста, попробуйте использовать следующий код. Основная идея-получить категорию основного уровня. Для каждой категории получаем детские категории.
<?php /* Get the categories that are active for the store */ $_main_categories=$this->getStoreCategories(); /* Get the current category the user is in */ $_current_category=$this->getCurrentCategory(); /* Get the current category path */ $_categorypath = $this->getCurrentCategoryPath(); ?> <?php if ($_main_categories): ?> <div class="box normal-nav"> <div class="box-top"> </div> <div class="box-content"> <ul> <?php /* This bit cycles through the categories - setting the next one to current */ foreach ($_main_categories as $_main_category): if($_main_category->getIsActive()): $cur_category=Mage::getModel('catalog/category')->load($_main_category->getId()); $layer = Mage::getSingleton('catalog/layer'); $layer->setCurrentCategory($cur_category); ?> <li><a href="<?php echo $this->getCurrentCategory()->getUrl()?>"><?php echo $this->getCurrentCategory()->getName();?></a> <?php $_maincategorylisting=$this->getCurrentCategory()?> <?php $_categories=$this->getCurrentChildCategories()?> <?php if($_categories->count()): ?> <ul class="subcategory"> <? foreach ($_categories as $_category):?> <? if($_category->getIsActive()): $cur_subcategory=Mage::getModel('catalog/category')->load($_category->getId()); $layer = Mage::getSingleton('catalog/layer'); $layer->setCurrentCategory($cur_subcategory); ?> <li><a href="<?php echo $this->getCategoryUrl($_category)?>"> <?php echo $_category->getName()?></a></li> <? endif;?> <?endforeach?> </ul> <?php $layer->setCurrentCategory($_current_category); ?> <? endif; ?> </li> <?php endif; ?> <?php endforeach; ?> </ul> </div> <div class="box-bottom"> </div> </div> <?php endif; ?>
Добавлено позже:
Если применить исправление для вашего кода выглядит следующим образом:
<?php $_category = $this->getCurrentCategory(); $collection = Mage::getModel('catalog/category')->getCategories($_category->entity_id); $helper = Mage::helper('catalog/category'); ?> <ul> <?php foreach ($collection as $cat):?> <li> <a href="<?php echo $helper->getCategoryUrl($cat);?>"> <cite><?php echo $cat->getName();?></cite> </a> <?php $childLevel2Category = Mage::getModel('catalog/category')->getCategories($cat->entity_id); ?> <ul> <?php foreach ($childLevel2Category as $catLevel2) { ?> <li> <a href="<?php echo $helper->getCategoryUrl($catLevel2);?>"> <cite><?php echo $catLevel2->getName();?></cite> </a> </li> <?php } ?> </ul> </li> <?php endforeach;?> </ul>
Если вам нужно больше уровня (больше суб-dir) перепишите эту конструкцию с помощью рекурсивной функции.
Попробуйте изменить параметр " is Anchor "для этих родительских категорий на"Yes". Это должно позволить им показывать продукты своих дочерних категорий без какого-либо пользовательского кодирования.
Я знаю, что это старый вопрос, но я наткнулся на него в поисках, пытаясь сделать то же самое.
В интересах будущих посетителей один из ответов выше говорит об изменении якоря для родительских категорий на Да, чтобы показать детям. Оперативники сказали, что у него ничего не вышло.
Важно, что после этого вам нужно переиндексировать свои ассоциации категорий / продуктов (System->Index Management). Это может занять некоторое время, если у вас есть много товары.
Но после этого... вуаля! Продукты потомков перечислены.
И размещение этого кода из http://www.creare.co.uk/magento-subcategories-category-pages в шаблоне / каталоге / категории / списке.phtml позаботился о отображении sub cats:
<?php $category = Mage::getSingleton('catalog/layer')->getCurrentCategory(); $categories = $category->getCollection() ->addAttributeToSelect(array('name', 'thumbnail')) ->addAttributeToFilter('is_active', 1) ->addIdFilter($category->getChildren()) ?> <ul class="subcategories"> <?php foreach ($categories as $category): ?> <li> <a href="<?php echo $category->getUrl() ?>"><img src="<?php echo Mage::getBaseUrl('media') . 'catalog' . DS . 'category' . DS . $category->getThumbnail() ?>" alt="<?php echo $this->htmlEscape($category->getName()) ?>" /> <span><?php echo $category->getName() ?></span></a> </li> <?php endforeach; ?> </ul>
Надеюсь, это кому-то поможет.