Отображение подкатегорий в категории Magento 2
Я хотел бы, пожалуйста, вашей помощи. Я новичок в Magento, и я хотел бы показать подкатегории категории на странице ее родителя на слайдере. Сначала я попытался показать категории в родительской категории (в list.phtml), но безуспешно, как было предложено здесь
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$category = $objectManager->get('Magento\Framework\Registry')->registry('current_category');
$subcats = $category->getChildrenCategories();
$_helper = $this->helper('Magento\Catalog\Helper\Output');?>
<ul>
<?php
foreach ($subcats as $subcat) {
if ($subcat->getIsActive()) {
$_category = $objectManager->create('Magento\Catalog\Model\Category')->load($subcat->getId());
$_outputhelper = $this->helper('Magento\Catalog\Helper\Output');
$subcaturl = $subcat->getUrl();
$_imgHtml = '';
if ($_imgUrl = $_category->getImageUrl()) {
$_imgHtml = '<img src="' . $_imgUrl . '" />';
$_imgHtml = $_outputhelper->categoryAttribute($_category, $_imgHtml, 'image');
/* @escapeNotVerified */
echo '<li><a href="' . $subcaturl . '" class="block-promo" title="' . $subcat->getName() . '">' . $_imgHtml . '<span class="categ_div"><strong></strong><br><br><span class="action more button">Learn More</span></span></a></li>';
}
}
} ?>
</ul>
Не могли бы вы, пожалуйста, помочь?
2 answers
Прежде всего, пожалуйста, избегайте использования диспетчера объектов (почему? https://devdocs.magento.com/guides/v2.3/extension-dev-guide/object-manager.html)
Уже существует основная функция magento, которая предоставляет что-то в соответствии с тем, что вы хотите сделать: навигация по категориям слева, это список подкатегорий, обычно используемых на левой боковой панели страницы категории (которая не использует фильтры, а также многоуровневую навигацию). Взгляните на то, что находится внутри magento/модуль-каталог/просмотр/интерфейс/шаблоны/навигация/слева.phtml
Шаги, которые я бы сделал для достижения того, что вы хотите сделать, примерно таковы: В вашей теме или модуле (в зависимости от того, что вы разрабатываете) создайте новый шаблон и добавьте его на страницу категории с помощью xml. Используйте тот же блок, что и левая навигация, скопируйте содержимое файла left.phtml в пользовательский шаблон и измените его в соответствии с вашими потребностями.
Удалось сделать так, как здесь сказано https://mage2.pro/t/topic/1813/5
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$category = $objectManager->get('Magento\Framework\Registry')registry('current_category');//get current category
$subcats = $category->getChildrenCategories();
$_helper = $this->helper('Magento\Catalog\Helper\Output');?>
<?php if(($subcats->count())>0) {?>
<div class="product-items">
<div id="owlsliderCat">
<?php foreach ($subcats as $subcat) {
if ($subcat->getIsActive()) {
$_category = $objectManager->create('Magento\Catalog\Model\Category')->load($subcat->getId());
$_outputhelper = $this->helper('Magento\Catalog\Helper\Output');
$subcaturl = $subcat->getUrl();
$_imgHtml = '';
if ($_imgUrl = $_category->getImageUrl()) {
$_imgHtml = '<img src="' . $_imgUrl . '" />';
$_imgHtml = $_outputhelper->categoryAttribute($_category, $_imgHtml, 'image');
/* @escapeNotVerified */
echo '<div class="list_categ item"><a href="' . $subcaturl . '" class="block-promo" title="' . $subcat->getName() . '">' . $_imgHtml . '<p>' . $subcat->getName() . '</p></a></div>';
}
}
} ?>
</div>
</div>
<?php }?>
<script type="text/javascript">
require([
'jquery',
'mgs/owlcarousel'
], function ($) {
$('#owlsliderCat').owlCarousel({
items: 10,
autoplay: true,
autoplayHoverPause: true,
nav: true,
dots: true,
lazyLoad: true,
navText: ["<i class='pe-7s-angle-left'></i>","<i class='pe-7s-angle-right'></i>"],
responsive:{
0:{
items:1
},
768:{
items:2
},
992:{
items:5
}
}
});
});