Magento 2: Admin-Kategoriebaum im Frontend anzeigen

10

Ich möchte den Kategorienbaum im Frontend wie den Standardkategorienbaum des Administrators anzeigen.

Die Kategoriebaumstruktur muss in meinem benutzerdefinierten Modul und Inhaltsbereich für die Frontend-Seite angezeigt werden.

Jede Hilfe wäre dankbar.

Vielen Dank.

Suresh Chikani
quelle
Zeigen Sie nicht nur den Kategorienamen an, sondern benötigen Sie eine Kategorie mit einem Baum wie der des Administrators.
Suresh Chikani
Bitte beziehen Sie sich auf: mage2.pro/t/topic/912 Es wird Ihnen helfen
Nikunj Vadariya
1
@nikunjVadariya Vielen Dank für Ihren Vorschlag. Lass mich das überprüfen.
Suresh Chikani

Antworten:

4

1) Gehen Sie vom Stammverzeichnis von Magento 2 zu "app" und erstellen Sie einen neuen Verzeichniscode. Erstellen Sie dann zwei weitere Verzeichnisse in App / Code , Namespace und Modulname. Das endgültige Verzeichnis sieht folgendermaßen aus: app / code / Demo / CategoryTree .

Demo als Namespace und CategoryTree als Modulname.

2) Erstellen Sie die Datei "module.xml" in app / code / Demo / CategoryTree / etc und fügen Sie den folgenden Code in die Datei ein:

<?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) Erstellen Sie die Datei "route.xml" in app / code / Demo / CategoryTree / etc / frontend und fügen Sie den folgenden Code in die Datei ein:

<?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) Erstellen Sie die Datei "register.php" in app / code / Demo / CategoryTree und fügen Sie den folgenden Code in die Datei ein:

<?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) Erstellen Sie die Datei "Index.php" in app / code / Demo / CategoryTree / Controller / Index und fügen Sie den folgenden Code in die Datei ein:

<?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) erstellen "categorytree_index_index.xml" Datei in app / code / Demo / CategoryTree / view / Frontend / Layout und unter Code in die Datei einfügen:

<?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) Kopie von Vendor / Magento / Modulkatalog / Ansicht / Adminhtml / Vorlagen / Katalog / Kategorie / Baum.phtml nach App / Code / Demo / CategoryTree / Ansicht / Frontend / Vorlagen / Katalog / Kategorie

8) Erstellen Sie die Datei "requirejs-config.js" in app / code / Demo / CategoryTree / view / frontend und fügen Sie den folgenden Code in die Datei ein:

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

9) Führen Sie die folgenden Befehle im Stammverzeichnis aus:

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

10) Führen Sie die URL wie folgt aus: " http://local-magento.com/categorytree/index/index ", damit Sie die folgende Ausgabe erhalten.

Geben Sie hier die Bildbeschreibung ein

Nilesh Gosai
quelle
hi @nilesh gosai könntest du mir bitte auf diesem magento.stackexchange.com/questions/249360/… helfen
Nagaraju K
1

Okay, das ist es, was ich verwende, um ein Menü basierend auf meinem Kategoriebaum zu generieren. Es ist zu beachten, dass alle meine Kategorien der Einfachheit halber unter der Standardkategorie mit ID2 gespeichert sind, die mit einer Neuinstallation von Magento2 geliefert wird. Wenn Sie diese Struktur nicht haben, können Sie sie alternativ $soncatsals Array der IDs von Kategorien definieren, die Sie stattdessen durchlaufen möchten.

<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
quelle
Hallo John, anscheinend hast du eine undefinierte Variable $ addiertq.
Purushotam Sangroula
Hallo Anime, danke, dass du das entdeckt hast. Addedq war eine andere zuvor definierte Variable und relativ zu meinem fraglichen Projekt ist es nicht notwendig, dass der Code funktioniert
John
Dieser Code zeigt nicht die Unterkategorien des Kindes an
HaFiz Umer
@ HaFizUmer das ist seltsam, weil es sein sollte, aber ich wäre auch nicht überrascht, weil es für Magento 2.0 ~ ist. Möglicherweise muss Magento 2.1+
John