如何使用Magento 2递归获取类别和子类别?我能够显示所有类别,但问题是我需要以树状方式显示,例如下面的
但是我得到的是所有这些类别的显示。有没有办法实现上述示例?现在我的代码看起来像这样
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的知识为零,而且我不知道可以遵循的任何文档/教程。
非常感谢您的帮助。
答案 0 :(得分:0)
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
以获取所需格式的输出。
OR
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$categoryFactory = $objectManager->create('Magento\Catalog\Helper\Category');
$all = $categoryFactory->getStoreCategories(false,true,true);