Magento 2 - показать дерево категорий в левой навигации


Есть ли способ получить список дерева категорий и ограничить его глубину в списке подкатегорий основной категории Magento 2 на левой боковой панели? В настоящее время список выглядит следующим образом:

Categories:

- Subcategory 1
- Subcategory 2
- Subcategory 3
- Subcategory 4
...

Файл, который генерирует этот список, находится в Magento_Catalog/templates/navigation/left.phtml со следующей структурой:

?>
<?php if (!$block->getCategory()) {
    return;
} ?>
<?php $_categories = $block->getCurrentChildCategories(); ?>
<?php $_count = is_array($_categories) ? count($_categories) : $_categories->count(); ?>
<?php if ($_count): ?>
    <div class="block filter">
        <div class="title">
            <strong><?php /* @escapeNotVerified */ echo __('Shop By') ?></strong>
        </div>
        <div class="content">
            <strong class="subtitle"><?php /* @escapeNotVerified */ echo __('Shopping Options') ?></strong>
            <dl class="options" id="narrow-by-list2">
                <dt><?php /* @escapeNotVerified */ echo __('Category') ?></dt>
                <dd>
                    <ol class="items">
                        <?php foreach ($_categories as $_category): ?>
                            <?php if ($_category->getIsActive()): ?>
                                <li class="item">
                                    <a href="<?php /* @escapeNotVerified */ echo $block->getCategoryUrl($_category) ?>"<?php if ($block->isCategoryActive($_category)): ?> class="current"<?php endif; ?>><?php echo $block->escapeHtml($_category->getName()) ?></a>
                                    <span class="count"><?php /* @escapeNotVerified */ echo $_category->getProductCount() ?></span>
                                </li>
                            <?php endif; ?>
                        <?php endforeach ?>
                    </ol>
                </dd>
            </dl>
        </div>
    </div>
<?php endif; ?>

Я хотел бы показать дерево подкатегорий с глубиной 2, чтобы оно показывало подкатегории lvl2 также под родительской категорией:

Categories:

- Subcategory 1
    Subcategory 1.1
    Subcategory 1.2
    Subcategory 1.3

- Subcategory 2
    Subcategory 2.1
    Subcategory 2.2
    Subcategory 2.3

- Subcategory 3
    Subcategory 3.1
    Subcategory 3.2
    Subcategory 3.3
...
Author: g5wx, 2016-02-10

1 answers

Мы создали расширение, которое делает именно это: https://github.com/Sebwite/magento2-category-sidebar.

$category имеет функцию getChildrenNodes(), которая возвращает все дочерние элементы. Функция работает только в том случае, если включены плоские категории. Мы используем эту функцию для извлечения подкатегорий для категории:

public function getSubcategories($category)
{
    if ($this->categoryFlatConfig->isFlatEnabled() && $category->getUseFlatResource())
        return (array)$category->getChildrenNodes();

    return $category->getChildren();
}

У меня была проблема с отображением категории, и я немного поработал и отредактировал код в 2 разных файлах. У вас жестко задан идентификатор корневой категории 1, но мой идентификатор корневой кошки был 2, Так что в block/sidebar.php, Я изменил его на корневую категорию хранилища. и 2-й я изменился. скопируйте следующий код из page-layout/2columns-left.xml и вставить в layout/default.xml Удалите каталог макетов страниц.

 7
Author: Silvan, 2019-07-29 08:35:58