Отображение подкатегорий в категории Magento 2


Я хотел бы, пожалуйста, вашей помощи. Я новичок в Magento, и я хотел бы показать подкатегории категории на странице ее родителя на слайдере. Сначала я попытался показать категории в родительской категории (в list.phtml), но безуспешно, как было предложено здесь

Https://mage2.pro/t/topic/1813/15

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

Не могли бы вы, пожалуйста, помочь?

Author: Munesh Jalwani, 2019-11-27

2 answers

Прежде всего, пожалуйста, избегайте использования диспетчера объектов (почему? https://devdocs.magento.com/guides/v2.3/extension-dev-guide/object-manager.html)

Уже существует основная функция magento, которая предоставляет что-то в соответствии с тем, что вы хотите сделать: навигация по категориям слева, это список подкатегорий, обычно используемых на левой боковой панели страницы категории (которая не использует фильтры, а также многоуровневую навигацию). Взгляните на то, что находится внутри magento/модуль-каталог/просмотр/интерфейс/шаблоны/навигация/слева.phtml

Шаги, которые я бы сделал для достижения того, что вы хотите сделать, примерно таковы: В вашей теме или модуле (в зависимости от того, что вы разрабатываете) создайте новый шаблон и добавьте его на страницу категории с помощью xml. Используйте тот же блок, что и левая навигация, скопируйте содержимое файла left.phtml в пользовательский шаблон и измените его в соответствии с вашими потребностями.

 0
Author: c.norin, 2019-12-02 10:06:00

Удалось сделать так, как здесь сказано 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
                        }
                    }
                });
            });

 -1
Author: Alex4842, 2019-11-28 14:55:13