Получить категории и подкатегории в виде дерева - PullRequest
0 голосов
/ 04 февраля 2019

Как я могу получить Категории и подкатегории рекурсивно, используя Magento 2?Я смог отобразить все категории, но проблема в том, что мне нужно отобразить его древовидным способом, например ниже

  • Категория по умолчанию
    • Домой
    • О нас
    • Продукты
      • P-one
        • SC-Four
      • P-two
        • SC-One
        • SC-Two
      • Карта сайта
      • SC-One

Но то, что я получаю, это отображение всей этой категории.Есть ли способ достичь вышеупомянутого образца?Прямо сейчас мой код выглядит следующим образом

class Index extends \Magento\Framework\View\Element\Template 
{

protected $_categoryCollectionFactory;
protected $_categoryHelper;
protected $_categoryRepository;
protected $_storeManager;

public function __construct(
    \Magento\Backend\Block\Template\Context $context,
    \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryCollectionFactory,
    array $data = []
)
{
    $this->_categoryCollectionFactory = $categoryCollectionFactory;
    $this->_categoryHelper = $categoryHelper;
    $this->_categoryCategoryRepository = $categoryRepository; 
    $this->_storeManager = $storeManager;
    $this->layerResolver = $layerResolver;
    parent::__construct($context, $data);
}

/**
 * Get category collection
 *
 * @param bool $isActive
 * @param bool|int $level
 * @param bool|string $sortBy
 * @param bool|int $pageSize
 * @return \Magento\Catalog\Model\ResourceModel\Category\Collection or array
 */
public function getCategoryCollection($isActive = true, $level = false, $sortBy = false, $pageSize = false)
{
    $collection = $this->_categoryCollectionFactory->create();
    $collection->addAttributeToSelect('*');

    // Select only active categories
    if ($isActive) {
        $collection->addIsActiveFilter();
    }

    // select categories of certain level
    if ($level) {
        $collection->addLevelFilter($level);
    }

    // sort categories by some value
    if ($sortBy) {
        $collection->addOrderField($sortBy);
    }

    // select certain number of categories
    if ($pageSize) {
        $collection->setPageSize($pageSize);
    }

    return $collection;
}

, и в моем файле phtml у меня есть это

$categories = $this->getCategoryCollection();
foreach ($categories as $category) {
    echo $category->getName() . '<br />';
}

Я не уверен, как это сделать, и было бы здорово, если бы яТакже можно получить справочную информацию о любой документации по Magento 2, в которой рассказывается, как получить другую часть сайта, например, продукты и другие материалы.Прямо сейчас у меня нет нулевых знаний по Magento, и я не знаю никакой документации / учебника, которым бы я мог следовать.

Буду признателен за вашу помощь в этом.

1 Ответ

0 голосов
/ 05 февраля 2019

Magento\Theme\Block\Html\Topmenu Блок уже дает вам все категории и подкатегории рекурсивно проверяет файл phtml /vendor/magento/module-theme/view/frontend/templates/html/topmenu.phtml Вы можете получить меню с кодом ниже

<?php $columnsLimit = $block->getColumnsLimit() ?: 0; ?>
<?php echo $_menu = $block->getHtml('level-top', 'submenu', $columnsLimit) ?>

Приведенный выше код даст вам категории в структуре дерева HTML,Вы также можете переписать блок Magento\Theme\Block\Html\Topmenu, чтобы получить вывод в нужном формате.

ИЛИ

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$categoryFactory = $objectManager->create('Magento\Catalog\Helper\Category');
$all = $categoryFactory->getStoreCategories(false,true,true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...