Получение списка всех доступных категорий, подкатегорий в magento 2


Я хочу заменить следующий код или аналогичный этому коду, чтобы получить все категории и подкатегории в Magento 2.

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

Любая помощь будет признательна

Спасибо.

Author: Manish, 2016-04-12

3 answers

1 – Создайте новое расширение для нашего случая в папке

Приложение/код/Ibnab/Категория

И внутри папки etc объявляйте, что вы и т. Д. объявляете module.xml и di.xml с содержимым : module.xml :

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
    <module name="Ibnab_CategoriesSide" setup_version="1.0.0" schema_version="1.0.0">
        <sequence>
            <module name="Magento_Catalog"/>
        </sequence>
    </module>
</config>

 di.xml :
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
    <type name="Ibnab\CategoriesSide\Block\CategorisCollection">
        <arguments>
            <argument name="deleteorderAction" xsi:type="array">
                <item name="context" xsi:type="string">\Magento\Framework\View\Element\Template\Context</item>
                <item name="helper" xsi:type="string">\Magento\Catalog\Helper\Category</item>
                <item name="flatstate" xsi:type="string">\Magento\Catalog\Model\Indexer\Category\Flat\State</item>
               <item name="menu" xsi:type="string">\Magento\Theme\Block\Html\Topmenu</item>
            </argument>
        </arguments>
    </type>
</config>

Примечание - здесь зависимость для впрыскивает класса \Magento\Catalog\Helper\Category для всех категорий нынешних магазине (или ) сделать верхнем меню HTML-код для завершения коллекции вам нужно ввести \Magento\Theme\Block\Html\Topmenu , 2 - инъекции для наших исходных данных блок Ibnab\Categoriesside\Блок\Коллекция категорий создайте и поместите код:

<?php
namespace Ibnab\CategoriesSide\Block;
class CategorisCollection extends \Magento\Framework\View\Element\Template
{
     protected $_categoryHelper;
     protected $categoryFlatConfig;
     protected $topMenu;
    /**
     * @param \Magento\Framework\View\Element\Template\Context $context
     * @param \Magento\Catalog\Helper\Category $categoryHelper
     * @param array $data
     */
    public function __construct(
        \Magento\Framework\View\Element\Template\Context $context,
        \Magento\Catalog\Helper\Category $categoryHelper,
        \Magento\Catalog\Model\Indexer\Category\Flat\State $categoryFlatState,
        \Magento\Theme\Block\Html\Topmenu $topMenu
    ) {
        $this->_categoryHelper = $categoryHelper;
        $this->categoryFlatConfig = $categoryFlatState;
        $this->topMenu = $topMenu;
        parent::__construct($context);
    }
    /**
     * Return categories helper
     */   
    public function getCategoryHelper()
    {
        return $this->_categoryHelper;
    }
    /**
     * Return top menu html
     * getHtml($outermostClass = '', $childrenWrapClass = '', $limit = 0)
     * example getHtml('level-top', 'submenu', 0)
     */   
    public function getHtml()
    {
        return $this->topMenu->getHtml();
    }
    /**
     * Retrieve current store categories
     *
     * @param bool|string $sorted
     * @param bool $asCollection
     * @param bool $toLoad
     * @return \Magento\Framework\Data\Tree\Node\Collection|\Magento\Catalog\Model\Resource\Category\Collection|array
     */    
   public function getStoreCategories($sorted = false, $asCollection = false, $toLoad = true)
    {
        return $this->_categoryHelper->getStoreCategories($sorted , $asCollection, $toLoad);
    }
    /**
     * Retrieve child store categories
     *
     */ 
    public function getChildCategories($category)
    {
           if ($this->categoryFlatConfig->isFlatEnabled() && $category->getUseFlatResource()) {
                $subcategories = (array)$category->getChildrenNodes();
            } else {
                $subcategories = $category->getChildren();
            }
            return $subcategories;
    }
}

Примечание – Здесь более важны категории getStoreCategories и getChildCategories ($категория) , это даст вам дерево сбора данных от помощника и getHtml() является ли возврат полной коллекции более быстрым для исправления html 3 - хорошо, теперь создайте свой шаблон внутри view/frontend/template/storecategories.phtml с содержимым:

<?php
$categories = $this->getStoreCategories(true,false,true);
$categoryHelper = $this->getCategoryHelper();
?>
<ul>
<?php
foreach($categories as $category):
     if (!$category->getIsActive()) {
        continue;
     }
?>
<li><a href="<?php echo $categoryHelper->getCategoryUrl($category) ?>"><?php echo $category->getName() ?></a></li>
<?php  
if($childrenCategories = $this->getChildCategories($category)):
?>
<ul>
<?php
foreach($childrenCategories as $childrenCategory):
     if (!$childrenCategory->getIsActive()) {
        continue;
     }
?>
<li><a href="<?php echo $categoryHelper->getCategoryUrl($childrenCategory) ?>"><?php echo $childrenCategory->getName() ?></a></li>
<?php
endforeach;
?>
</ul>
<?php
endif;
endforeach;
?>
</ul>
<h1>OR Just</h1>
<?php echo $this->getHtml() ?>

Для более подробной информации смотрите здесь.

Введите предварительно отформатированный текст здесь

 6
Author: Arunendra, 2016-04-12 06:41:51
<?php
 $catId =2;
        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
        $subcategory = $objectManager->create('Magento\Catalog\Model\Category')->load($catId);           
        $subcats = $subcategory->getChildrenCategories();
        ?>
        <ul >
            <li> <span> All Categories </span> </li>
            <?php
            foreach ($subcats as $subcat) {
                if ($subcat->getIsActive()) {

                    $subcat_url = $subcat->getUrl();
                    $subcat_img = "";
                    $placeholder_img = "/media/placeholder.png";
                    ?>
                    <li>
                        <a href="<?php echo $subcat_url; ?>">
                            <?php echo $subcat->getName(); ?>
                        </a>
                    </li>

                    <?php
                }
            }
            ?>
        </ul>
 3
Author: Harsha, 2016-10-06 08:19:33

Магенто 2.2.3

Получите все подкатегории на основе текущей категории.

    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    $category = $objectManager->get('Magento\Framework\Registry')->registry('current_category');//get current category    


    $catId =$category->getId();        
    $subcategory = $objectManager->create('Magento\Catalog\Model\Category')->load($catId);           
    $subcats = $subcategory->getChildrenCategories();
    ?>
    <ul >
        <?php
        foreach ($subcats as $subcat) {
            if ($subcat->getIsActive()) {

                $subcat_url = $subcat->getUrl();
                $subcat_img = "";
                $placeholder_img = "/media/placeholder.png";
                ?>
                <li>
                    <a href="<?php echo $subcat_url; ?>">
                        <?php echo $subcat->getName(); ?>
                    </a>
                </li>

                <?php
            }
        }
        ?>
    </ul>
 3
Author: Flex Flexsin, 2018-04-09 11:57:31