cancel
Showing results for 
Search instead for 
Did you mean: 

Magento 2 How to get category tree (collection) on footer

Magento 2 How to get category tree (collection) on footer

I need to display magento 2 category tree on footer and on some other places. I think best practice is creating a module and call it on desired block (place). How to do that ? I already created a module but it is not working it returns an error "Object DOMDocument should be created."

 

 

app/code/Muaw/CategoriesList/registration.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Muaw_CategoriesList',
    __DIR__
);
app/code/Muaw/CategoriesList/Block/CategorisCollection.phtml

<?php
namespace Muaw\CategoriesList\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 categories helper
     * 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;
    }
}
app/code/Muaw/CategoriesList/etc/di.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd">
    <type name="Muaw\CategoriesList\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>
app/code/Muaw/CategoriesList/etc/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="Muaw_CategoriesList" setup_version="2.0.1" schema_version="2.0.0">
        <sequence>
            <module name="Magento_Catalog"/>
        </sequence>
    </module>
</config>
app/code/Muaw/CategoriesList/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>
_______________________________________________
An Expert in Anything Was Once a Beginner
2 REPLIES

Re: Magento 2 How to get category tree (collection) on footer

Re: Magento 2 How to get category tree (collection) on footer

A tutorial on How to display the category tree in Magento 2

See this video https://www.youtube.com/watch?v=p5wKTzWnOaY

I hope it will save your time.