Tôi muốn hiển thị cây danh mục trên frontend như cây danh mục mặc định của quản trị viên.
Cần hiển thị cấu trúc cây danh mục trong mô-đun tùy chỉnh và khu vực nội dung của tôi cho phía trước.
Bất kỳ trợ giúp sẽ được đánh giá cao.
Cảm ơn.
Tôi muốn hiển thị cây danh mục trên frontend như cây danh mục mặc định của quản trị viên.
Cần hiển thị cấu trúc cây danh mục trong mô-đun tùy chỉnh và khu vực nội dung của tôi cho phía trước.
Bất kỳ trợ giúp sẽ được đánh giá cao.
Cảm ơn.
Câu trả lời:
1) đi đến "ứng dụng" từ thư mục gốc của Magento 2 và tạo mã thư mục mới. Sau đó tạo thêm hai thư mục trong ứng dụng / mã , Không gian tên và Tên mô-đun. Thư mục cuối cùng sẽ trông như thế này: app / code / Demo / CategoryTree .
Demo dưới dạng Namespace và CategoryTree làm tên mô-đun.
2) tạo tệp "module.xml" trong ứng dụng / code / Demo / CategoryTree / etc và dán mã bên dưới vào tệp:
<?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) tạo tệp "route.xml" trong ứng dụng / code / Demo / CategoryTree / etc / frontend và dán mã bên dưới vào tệp:
<?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) tạo tệp "register.php" trong ứng dụng / mã / Demo / CategoryTree và dán mã bên dưới vào tệp:
<?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) tạo tệp "Index.php" trong ứng dụng / mã / Demo / CategoryTree / Trình điều khiển / Chỉ mục và dán mã bên dưới vào tệp:
<?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) tạo tệp "categorytree_index_index.xml" trong app / code / Demo / CategoryTree / view / frontend / layout và dán mã bên dưới vào tệp:
<?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) sao chép từ nhà cung cấp / magento / module-catalog / view / adminhtml / samples / catalog / category / tree.phtml sang app / code / Demo / CategoryTree / view / frontend / samples / catalog / category
8) tạo tệp "Yêu cầu-config.js" trong ứng dụng / mã / Demo / CategoryTree / view / frontend và dán mã bên dưới vào tệp:
var config = {
"shim": {
"extjs/ext-tree": [
"prototype"
],
"extjs/ext-tree-checkbox": [
"extjs/ext-tree",
"extjs/defaults"
]
}
};
9) Chạy bên dưới các lệnh trong thư mục gốc:
php bin/magento setup:upgrade
php bin/magento cache:clean
php bin/magento cache:flush
php bin/magento setup:static-content:deploy
10) chạy url như thế này " http://local-magento.com/cargettree/index/index " để bạn sẽ nhận được đầu ra như bên dưới.
Được rồi, đây là những gì tôi sử dụng để tạo một menu dựa trên cây danh mục của tôi. Cần lưu ý rằng để dễ dàng, tất cả các danh mục của tôi được lưu trữ trong danh mục mặc định với ID2, đi kèm với bản cài đặt mới của Magento2. Nếu bạn không có cấu trúc này, bạn có thể định nghĩa thay thế $soncats
là một mảng ID của các danh mục bạn muốn lặp qua thay thế.
<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>