Magento - 仅列出导航菜单中的所有子类别是

时间:2014-05-15 19:32:00

标签: list magento

在我的magento商店中,我有以下代码列出所有子类别作为链接。我只想在类别管理员设置中显示Include in Navigation Menu - Yes的类别。

<?php $_subcategories = $_category->getChildrenCategories() ?>
<?php if (count($_subcategories) > 0): ?>
    <ul>
    <?php foreach($_subcategories as $_subcategory): ?>
        <li>
            <a href="<?php echo $_helper->getCategoryUrl($_subcategory) ?>">
            <?php echo $_subcategory->getName() ?>
            </a>
        </li>
    <?php endforeach; ?>
    </ul>
<?php endif; ?>

我知道getIncludeInMenu()可用于获取此设置,但是当我尝试将其添加到上面时它没有显示任何类别?

<?php $_subcategories = $_category->getChildrenCategories() ?>
<?php if (count($_subcategories) > 0): ?>
    <ul>
    <?php foreach($_subcategories as $_subcategory): ?>

    <!-- this makes no categories show -->
    <?php if (!$_subcategory->getIncludeInMenu()){} else { ?>

        <li>
            <a href="<?php echo $_helper->getCategoryUrl($_subcategory) ?>">
            <?php echo $_subcategory->getName() ?>
            </a>
        </li>

    <?php } ?>  

    <?php endforeach; ?>
    </ul>
<?php endif; ?>

更新

使用上面的代码看起来推荐的getIncludeMenu()功能似乎不适用于$_subcategory,但如果我在$_category

上使用它,它就能正常工作

我是否在这一行上遗漏了一些内容,或许会引入子类别/子类别?

$_subcategories = $_category->getChildrenCategories()

3 个答案:

答案 0 :(得分:0)

您可以尝试:

<?php if ($_subcategory->getIncludeInMenu()) { ?>

        <li>
            <a href="<?php echo $_helper->getCategoryUrl($_subcategory) ?>">
            <?php echo $_subcategory->getName() ?>
            </a>
        </li>

    <?php } ?> 

答案 1 :(得分:0)

所以我在这个解决方案中,在你的子类别的foreach循环重新加载变量中的子类别后,希望这是有道理的:

<?php foreach($_subcategories as $_subcategory): ?>
   <?php $subcat = Mage::getModel('catalog/category')->load($_subcategory->getId()); ?>
   <?php if($subcat->getIncludeInMenu()): ?>
      <li>
         <a href="<?php echo $_helper->getCategoryUrl($_subcategory) ?>"><?php echo $_subcategory->getName() ?></a>
      </li>
   <?php endif; ?>
<?php endforeach; ?>

答案 2 :(得分:0)

<?php
    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    $categoryCollection = $objectManager->get('\Magento\Catalog\Model\ResourceModel\Category\CollectionFactory');
    $categories = $categoryCollection->create();
    $categories->addAttributeToSelect('*');
    $categories->addAttributeToFilter('level', array('eq'=>2));
    $categories->load();
?>
  <?php
    foreach($categories as $category):
        $catId = $category->getId();
        $subcategory = $objectManager->create('Magento\Catalog\Model\Category')->load($catId);
        $subcats = $subcategory->getChildrenCategories();
        $_helper = $this->helper('Magento\Catalog\Helper\Output');
        foreach ($subcats as $subcat) {
            $_category = $objectManager->create('Magento\Catalog\Model\Category')->load($subcat->getId());
            $_outputhelper = $this->helper('Magento\Catalog\Helper\Output');
            $storeManager = $objectManager->get('\Magento\Store\Model\StoreManagerInterface');
            $sitebaseurl = $storeManager->getStore()->getBaseUrl();
            $subcaturl = $subcat->getUrl();
            if (!$_category->getData('include_in_menu')) {

                continue;

            }
            ?>
            <a href="<?php echo $subcat->getUrl(); ?>" id="sub_<?php echo $subcat->getId();?>" class="<?php if($subcat->getChildrenCategories()->count()):?>child_sub<?php else:?> no-child<?php endif;?>">    
            <?php echo $subcat->getName(); ?>
            </a>
        <?php } ?>
    <?php endforeach; ?>