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
...
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 Удалите каталог макетов страниц.