Magento 2: Mostrar árbol de categorías de administrador en la interfaz

10

Quiero mostrar el árbol de categorías en la interfaz como el árbol de categorías predeterminado de administrador.

Necesito mostrar la estructura de árbol de categorías en mi módulo personalizado y área de contenido para el lado frontal.

Cualquier ayuda sería apreciada.

Gracias.

Suresh Chikani
fuente
No solo muestra el nombre de la categoría, sino que necesita una categoría con el árbol como el administrador.
Suresh Chikani
Consulte: mage2.pro/t/topic/912 Le ayudará
Nikunj Vadariya
1
@nikunjVadariya Gracias por su sugerencia. Dejame revisar.
Suresh Chikani

Respuestas:

4

1) vaya a "aplicación" desde el directorio raíz de Magento 2 y cree un nuevo código de directorio. Luego cree dos directorios más en la aplicación / código , Espacio de nombres y Nombre del módulo. El directorio final se verá así: app / code / Demo / CategoryTree .

Demostración como espacio de nombres y CategoryTree como nombre del módulo.

2) cree el archivo "module.xml" en app / code / Demo / CategoryTree / etc y pegue el siguiente código en el archivo:

<?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) cree el archivo "route.xml" en app / code / Demo / CategoryTree / etc / frontend y pegue el siguiente código en el archivo:

<?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) cree el archivo "Registration.php" en app / code / Demo / CategoryTree y pegue el siguiente código en el archivo:

<?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) cree el archivo "Index.php" en la aplicación / código / Demo / CategoryTree / Controller / Index y pegue el siguiente código en el archivo:

<?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) cree el archivo "categorytree_index_index.xml" en app / code / Demo / CategoryTree / view / frontend / layout y pegue el siguiente código en el archivo:

<?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) copie de vendor / magento / module-catalog / view / adminhtml / templates / catalog / category / tree.phtml a app / code / Demo / CategoryTree / view / frontend / templates / catalog / category

8) cree el archivo "requirejs-config.js" en app / code / Demo / CategoryTree / view / frontend y pegue el siguiente código en el archivo:

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

9) Ejecute los siguientes comandos en el directorio raíz:

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

10) ejecute la URL como esta " http://local-magento.com/categorytree/index/index " para que obtenga la salida como se muestra a continuación.

ingrese la descripción de la imagen aquí

Nilesh Gosai
fuente
hola @nilesh gosai podrías ayudarme en este magento.stackexchange.com/questions/249360/…
Nagaraju K
1

Bien, esto es lo que uso para generar un menú basado en mi árbol de categorías. Cabe señalar que, para mayor comodidad, todas mis categorías se almacenan en la categoría predeterminada con ID2, que viene con una nueva instalación de Magento2. Si no tiene esta estructura, también puede definirla $soncatscomo un conjunto de ID de categorías que le gustaría recorrer.

<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
fuente
Hola John, parece que tienes una variable indefinida $ Addedq.
Purushotam Sangroula
Hola Anime, gracias por descubrir que, agregada q era otra variable previamente definida y relativa a mi proyecto en cuestión, no es necesario que el código funcione
John
este código no muestra las subcategorías de niños
HaFiz Umer
@HaFizUmer es extraño porque debería serlo, pero tampoco me sorprendería porque es para Magento 2.0 ~. Puede necesitar modificación / reescritura para cualquier cosa Magento 2.1+
John