Magento 2: แสดงผังหมวดหมู่ผู้ดูแลระบบที่ส่วนหน้า


10

ฉันต้องการที่จะแสดงต้นไม้หมวดหมู่ในส่วนหน้าเช่นต้นไม้ประเภทเริ่มต้นของผู้ดูแลระบบ

จำเป็นต้องแสดงโครงสร้างต้นไม้หมวดหมู่ในโมดูลที่กำหนดเองและพื้นที่เนื้อหาของฉันสำหรับส่วนหน้า

ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม

ขอบคุณ



ไม่เพียงแสดงชื่อหมวดหมู่ แต่ต้องการหมวดหมู่ที่มีแผนผังเหมือนกันกับผู้ดูแลระบบ
Suresh Chikani

โปรดอ้างอิง: mage2.pro/t/topic/912มันจะช่วยให้คุณ
Nikunj Vadariya

1
@nikunjVadariya ขอบคุณสำหรับคำแนะนำของคุณ ขอตรวจสอบดูก่อน.
Suresh Chikani

คำตอบ:


4

1) ไปที่ "แอพ" จากไดเรกทอรีรากของ Magento 2 และสร้างรหัสไดเรกทอรีใหม่ จากนั้นสร้างอีกสองไดเรกทอรีในแอพ / รหัส , ชื่อและชื่อโมดูล ไดเรกทอรีสุดท้ายจะมีลักษณะเช่นนี้: app / รหัส / สาธิต / CategoryTree

การสาธิตเป็นNamespaceและCategoryTreeเป็นชื่อโมดูล

2) สร้างไฟล์ "module.xml" ในแอป / รหัส / สาธิต / CategoryTree / ฯลฯและวางรหัสด้านล่างลงในไฟล์:

<?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) สร้างไฟล์ "route.xml" ในแอพ / รหัส / สาธิต / CategoryTree / etc / frontendและวางโค้ดด้านล่างลงในไฟล์:

<?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) สร้างไฟล์ "registration.php" ในแอป / รหัส / สาธิต / CategoryTreeและวางรหัสด้านล่างในไฟล์:

<?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) สร้างไฟล์ "Index.php" ในแอพ / รหัส / สาธิต / CategoryTree / Controller / ดัชนีและวางโค้ดด้านล่างลงในไฟล์:

<?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) สร้างไฟล์ "categorytree_index_index.xml" ในแอพ / รหัส / สาธิต / CategoryTree / ดู / frontend / layoutและวางโค้ดด้านล่างลงในไฟล์:

<?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) คัดลอกจากผู้ขาย / magento / module-catalog / view / adminhtml / template / catalog / category / tree.phtmlไปยังapp / code / Demo / CategoryTree / view / frontend / template / catalog / category

8) สร้างไฟล์ "requirejs-config.js" ในแอพ / รหัส / สาธิต / CategoryTree / ดู / ส่วนหน้าและวางรหัสด้านล่างลงในไฟล์:

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

9) รันคำสั่งด้านล่างในไดเรกทอรีราก:

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

10) เรียกใช้ url เช่นนี้ " http://local-magento.com/categorytree/index/index " ดังนั้นคุณจะได้ผลลัพธ์ดังนี้

ป้อนคำอธิบายรูปภาพที่นี่


สวัสดี @nilesh gosai ได้โปรดช่วยฉันในmagento.stackexchange.com/questions/249360//
Nagaraju K

1

โอเคนี่คือสิ่งที่ฉันใช้ในการสร้างเมนูตามโครงสร้างหมวดหมู่ของฉัน ควรสังเกตว่าเพื่อความสะดวกทุกหมวดหมู่ของฉันจะถูกเก็บไว้ภายใต้หมวดหมู่เริ่มต้นด้วย ID2 ที่มาพร้อมกับการติดตั้งใหม่ของ Magento2 หากคุณไม่มีโครงสร้างนี้คุณสามารถกำหนด$soncatsเป็นอาร์เรย์ของรหัสหมวดหมู่ที่คุณต้องการวนซ้ำแทนได้

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

สวัสดีจอห์นดูเหมือนว่าคุณจะมีตัวแปร $ addq ที่ไม่ได้กำหนด
Purushotam Sangroula

สวัสดีอะนิเมะขอขอบคุณที่จำไว้ว่า addq เป็นอีกตัวแปรหนึ่งที่กำหนดไว้ก่อนหน้านี้และเกี่ยวข้องกับโครงการของฉันในคำถามมันไม่จำเป็นสำหรับรหัสในการทำงาน
John

รหัสนี้ไม่ได้แสดงหมวดหมู่ย่อยของเด็ก
HaFiz Umer

@ HaFizUmer นั้นแปลกเพราะมันควรจะเป็น แต่ฉันก็ไม่แปลกใจเพราะมันสำหรับ Magento 2.0 ~ อาจต้องแก้ไข / เขียนใหม่สำหรับ Magento 2.1+
John
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.