Magento 2: mostra l'albero delle categorie dell'amministratore sul frontend


10

Voglio visualizzare l'albero delle categorie sul frontend come l'albero delle categorie predefinite dell'amministratore.

Devo visualizzare la struttura ad albero delle categorie nel mio modulo personalizzato e l'area del contenuto per il lato frontend.

Qualsiasi aiuto sarebbe apprezzato.

Grazie.



Non solo mostra il nome della categoria ma ha bisogno di una categoria con albero come lo stesso di admin.
Suresh Chikani,

Si prega di fare riferimento: mage2.pro/t/topic/912 Ti aiuterà
Nikunj Vadariya,

1
@nikunjVadariya Grazie per il tuo suggerimento. Fammi controllare.
Suresh Chikani,

Risposte:


4

1) vai su "app" dalla directory principale di Magento 2 e crea un nuovo codice di directory. Quindi crea altre due directory in app / codice , Spazio dei nomi e Nome modulo. La directory finale sarà simile a questa: app / code / Demo / CategoryTree .

Demo come Namespace e CategoryTree come nome del modulo.

2) crea il file "module.xml" in app / code / Demo / CategoryTree / etc e incolla il codice sottostante nel file:

<?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) crea il file "route.xml" in app / code / Demo / CategoryTree / etc / frontend e incolla il codice sottostante nel file:

<?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) crea il file "registration.php" in app / code / Demo / CategoryTree e incolla sotto il codice nel file:

<?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) crea il file "Index.php" in app / code / Demo / CategoryTree / Controller / Index e incolla il codice sottostante nel file:

<?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) crea il file "categorytree_index_index.xml" in app / code / Demo / CategoryTree / view / frontend / layout e incolla il codice sottostante nel file:

<?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) copia dal fornitore / magento / modulo-catalogo / vista / adminhtml / modelli / catalogo / categoria / albero.phtml in app / codice / Demo / categoriaTree / vista / frontend / modelli / catalogo / categoria

8) crea il file "requirejs-config.js" in app / code / Demo / CategoryTree / view / frontend e incolla il codice sottostante nel file:

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

9) Esegui i seguenti comandi nella directory principale:

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

10) esegui l'URL in questo modo " http://local-magento.com/categorytree/index/index " in modo da ottenere un output come di seguito.

inserisci qui la descrizione dell'immagine


ciao @nilesh gosai potresti per favore aiutarmi in questo magento.stackexchange.com/questions/249360/…
Nagaraju K

1

Ok, questo è quello che uso per generare un menu basato sul mio albero delle categorie. Va notato che per comodità tutte le mie categorie sono memorizzate nella categoria predefinita con ID2, che viene fornito con una nuova installazione di Magento2. Se non si dispone di questa struttura, è possibile in alternativa definire $soncatscome una matrice degli ID delle categorie che si desidera scorrere invece.

<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>

Ciao John, sembra che tu abbia una variabile indefinita $ Addedq.
Purushotam Sangroula,

Ciao Anime, grazie per averlo individuato, aggiuntaq era un'altra variabile precedentemente definita e relativa al mio progetto in questione, non è necessario che il codice funzioni
John

questo codice non mostra le sottocategorie del bambino
HaFiz Umer

@HaFizUmer è strano perché dovrebbe essere, ma non sarei sorpreso perché è per Magento 2.0 ~. Potrebbe essere necessario modificare / riscrivere qualsiasi cosa Magento 2.1+
John
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.