Magento 2: Afficher l'arborescence des catégories d'administration sur le frontend

10

Je veux afficher l'arborescence des catégories sur le frontend comme l'arborescence des catégories par défaut de l'administrateur.

Besoin d'afficher l'arborescence des catégories dans mon module personnalisé et la zone de contenu pour le côté frontal.

Toute aide serait appréciée.

Merci.

Suresh Chikani
la source
Non seulement afficher le nom de la catégorie mais avoir besoin d'une catégorie avec une arborescence similaire à celle de l'administrateur.
Suresh Chikani
Veuillez vous référer: mage2.pro/t/topic/912 Cela vous aidera
Nikunj Vadariya
1
@nikunjVadariya Merci pour votre suggestion. Laisse moi vérifier.
Suresh Chikani

Réponses:

4

1) allez dans "app" depuis le répertoire racine de Magento 2 et créez un nouveau code de répertoire. Créez ensuite deux répertoires supplémentaires dans l' application / le code , l'espace de noms et le nom du module. Le répertoire final ressemblera à ceci: app / code / Demo / CategoryTree .

Démo comme espace de noms et CategoryTree comme nom de module.

2) créez le fichier "module.xml" dans app / code / Demo / CategoryTree / etc et collez le code ci-dessous dans le fichier:

<?xml version="1.0"?>
<!--
/**
 * Copyright © 2013-2017 Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Demo_CategoryTree" setup_version="1.0.0">
        <sequence>
            <module name="Magento_Catalog"/>
        </sequence>
    </module>
</config>

3) créez le fichier "route.xml" dans app / code / Demo / CategoryTree / etc / frontend et collez le code ci-dessous dans le fichier:

<?xml version="1.0"?>
<!--
/**
 * Copyright © 2013-2017 Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="standard">
        <route id="categorytree" frontName="categorytree">
            <module name="Demo_CategoryTree" />
        </route>
    </router>
</config>

4) créez le fichier "registration.php" dans app / code / Demo / CategoryTree et collez le code ci-dessous dans le fichier:

<?php
/**
 * Copyright © 2013-2017 Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Demo_CategoryTree',
    __DIR__
);

5) créez le fichier "Index.php" dans app / code / Demo / CategoryTree / Controller / Index et collez le code ci-dessous dans le fichier:

<?php
/**
 *
 * Copyright © 2013-2017 Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Demo\CategoryTree\Controller\Index;

class Index extends \Magento\Framework\App\Action\Action
{
    /**
     * @var \Magento\Framework\View\Result\PageFactory $resultPageFactory
     */
    protected $resultPageFactory;

    /**
     * @param \Magento\Framework\App\Action\Context $context
     * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
     */
    public function __construct(
        \Magento\Framework\App\Action\Context $context,
        \Magento\Framework\View\Result\PageFactory $resultPageFactory
    ) {
        $this->resultPageFactory = $resultPageFactory;
        parent::__construct($context);
    }

    /**
     * Renders CATEGORYTREE Index page
     *
     * @param string|null $coreRoute
     * @return \Magento\Framework\Controller\Result\Forward
     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
     */
    public function execute($coreRoute = null)
    {
        $resultPage =  $this->resultPageFactory->create();
        $resultPage->getConfig()->getTitle()->set(__('CategoryTree'));
        return $resultPage;
    }
}

6) créez le fichier "categorytree_index_index.xml" dans app / code / Demo / CategoryTree / view / frontend / layout et collez le code ci-dessous dans le fichier:

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="2columns-left" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <update handle="styles"/>
    <head>
        <css src="extjs/resources/css/ext-all.css"/>
        <css src="extjs/resources/css/ytheme-magento.css"/>
    </head>
    <body>
        <referenceContainer name="sidebar.additional">
            <block class="Magento\Catalog\Block\Adminhtml\Category\Tree" name="category.tree" template="Demo_CategoryTree::catalog/category/tree.phtml"/>
        </referenceContainer>
    </body>
</page>

7) Copier du fournisseur / magento / module-catalogue / view / adminhtml / templates / catalogue / category / tree.phtml vers app / code / Demo / CategoryTree / view / frontend / templates / catalogue / category

8) créez le fichier "requirejs-config.js" dans app / code / Demo / CategoryTree / view / frontend et collez le code ci-dessous dans le fichier:

var config = {
    "shim": {
        "extjs/ext-tree": [
            "prototype"
        ],
        "extjs/ext-tree-checkbox": [
            "extjs/ext-tree",
            "extjs/defaults"
        ]
    }
};

9) Exécutez les commandes ci-dessous dans le répertoire racine:

php bin/magento setup:upgrade
php bin/magento cache:clean
php bin/magento cache:flush
php bin/magento setup:static-content:deploy

10) exécutez l'url comme ceci " http://local-magento.com/categorytree/index/index " afin d'obtenir la sortie comme ci-dessous.

entrez la description de l'image ici

Nilesh Gosai
la source
salut @nilesh gosai pourriez-vous m'aider s'il vous plaît sur ce magento.stackexchange.com/questions/249360/…
Nagaraju K
1

D'accord, c'est ce que j'utilise pour générer un menu basé sur mon arbre de catégories. Il convient de noter que pour plus de facilité, toutes mes catégories sont stockées sous la catégorie par défaut avec ID2, qui est livrée avec une nouvelle installation de Magento2. Si vous ne disposez pas de cette structure, vous pouvez également définir $soncatscomme un tableau des ID des catégories que vous souhaitez parcourir à la place.

<ul id="nav" class="accordion vertnav vertnav-top grid-full wide">
    <?php
$fathercat = $objectManager->create('Magento\Catalog\Model\Category')->load(2); //this is my master root category, holds all other categories so I can loop through.
$soncats = $fathercat->getChildrenCategories(); 
$catids = array(2); 
foreach ($soncats as $soncat) {
    $categoryid = $soncat->getId();
    array_push($catids,$categoryid);
}
for($i = 1; $i < count($catids); ++$i) { 
    $basic = 1;
    $catId = $catids[$i];
    $subcategory = $objectManager->create('Magento\Catalog\Model\Category')->load($catId);
    $subcats = $subcategory->getChildrenCategories();
    $categoryname = $subcategory->getName(); 
    $categoryurl = $subcategory->getUrl(); ?>
    <li class="level0 nav-<?php echo $i;?> level-top parent"><a href="<?php echo $categoryurl ?>" class="level-top"><?php echo $categoryname; ?><span class="caret"> </span> </a><span class="opener"> </span>
        <div class="level0-wrapper dropdown-6col" style="left: 0;">
            <div class="level0-wrapper2">
                <ul class="level0 part">
                    <?php
                    foreach ($subcats as $subcat) { 
                        if ($subcat->getIsActive()) {
                            $subcat_url = $subcat->getUrl(); 
                            $subcat_name = $subcat->getName(); ?>
                            <li class="level1 nav-1-<?php echo $basic;?> item"><a href="<?php echo $subcat_url ?>"><?php echo $subcat_name; ?></a></li>
                            <?php
                        } $basic++; } ?>
                    </ul>
                </div>
            </div>
        </div>
    </li>
    <?php } ?>
</ul>
John
la source
Bonjour John, il semble que vous ayez une variable non définie $ addedq.
Purushotam Sangroula
Salut Anime, merci d'avoir repéré cela, addedq était une autre variable précédemment définie et relative à mon projet en question, il n'est pas nécessaire que le code fonctionne
John
ce code n'est pas afficher les sous-catégories de l'enfant
HaFiz Umer
@HaFizUmer c'est étrange parce qu'il devrait l'être, mais je ne serais pas surpris non plus car c'est pour Magento 2.0 ~. Il faudra peut-être modifier / réécrire pour tout ce qui concerne Magento 2.1+
John