如何在 magento2 中获取当前类别?
How to get current category in magento2?
如何在 magento2 中获取当前类别?
我想在自定义 phtml 文件中获取类别名称和类别 ID。
试试这个代码。这一定会对你有帮助。
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$category = $objectManager->get('Magento\Framework\Registry')->registry('current_category');//get current category
echo $category->getId();
echo $category->getName();
?>
Magento 为正在访问的类别设置注册表。因此,要获取当前类别,请使用以下方法:
/**
* @param \Magento\Framework\Registry $registry
*/
protected $_registry;
public function __construct(
\Magento\Framework\Registry $registry
) {
$this->_registry = $registry;
}
然后使用:
$category = $this->_registry->registry('current_category');//get current category
现在您可以访问集合并获取详细信息,例如 $category->getName()
以上似乎是正确的,但我认为直接跳转到注册表并不是最好的方法。 Magento 提供了一个已经封装了该功能的层解析器。 (请参阅目录插件中的 TopMenu 块)
我建议注入 \Magento\Catalog\Model\Layer\Resolver class 并使用它来获取当前类别。这是代码:
<?php
namespace FooBar\Demo\Block;
class Demo extends \Magento\Framework\View\Element\Template
{
private $layerResolver;
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Catalog\Model\Layer\Resolver $layerResolver,
array $data = []
) {
parent::__construct($context, $data);
$this->layerResolver = $layerResolver;
}
public function getCurrentCategory()
{
return $this->layerResolver->get()->getCurrentCategory();
}
}
下面是 getCurrentCategory() 方法在 Resolver Class.
中的实际作用
public function getCurrentCategory()
{
$category = $this->getData('current_category');
if ($category === null) {
$category = $this->registry->registry('current_category');
if ($category) {
$this->setData('current_category', $category);
} else {
$category = $this->categoryRepository->get($this->getCurrentStore()->getRootCategoryId());
$this->setData('current_category', $category);
}
}
return $category;
}
如您所见,它仍然使用注册表,但在失败的情况下提供回退。
无需使用对象管理器或注入 class。您可以通过以下方式使用内置助手 class Magento\Catalog\Helper\Data
。
<?php
$catalogHelperData = $this->helper('Magento\Catalog\Helper\Data');
$categoryObject = $catalogHelperData->getCategory();
$categoryId = $categoryObject->getId();
$categoryName = $categoryObject->getName();
?>
此代码段适用于与产品列表页面或产品相关的任何 phtml(内置或自定义)文件详情页。
在Category页面的*.phtml文件中可以通过以下代码片段获取Category数据:
$currentCategory = $this->helper('Magento\Catalog\Helper\Data')->getCategory();
如何在 magento2 中获取当前类别?
我想在自定义 phtml 文件中获取类别名称和类别 ID。
试试这个代码。这一定会对你有帮助。
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$category = $objectManager->get('Magento\Framework\Registry')->registry('current_category');//get current category
echo $category->getId();
echo $category->getName();
?>
Magento 为正在访问的类别设置注册表。因此,要获取当前类别,请使用以下方法:
/**
* @param \Magento\Framework\Registry $registry
*/
protected $_registry;
public function __construct(
\Magento\Framework\Registry $registry
) {
$this->_registry = $registry;
}
然后使用:
$category = $this->_registry->registry('current_category');//get current category
现在您可以访问集合并获取详细信息,例如 $category->getName()
以上似乎是正确的,但我认为直接跳转到注册表并不是最好的方法。 Magento 提供了一个已经封装了该功能的层解析器。 (请参阅目录插件中的 TopMenu 块)
我建议注入 \Magento\Catalog\Model\Layer\Resolver class 并使用它来获取当前类别。这是代码:
<?php
namespace FooBar\Demo\Block;
class Demo extends \Magento\Framework\View\Element\Template
{
private $layerResolver;
public function __construct(
\Magento\Framework\View\Element\Template\Context $context,
\Magento\Catalog\Model\Layer\Resolver $layerResolver,
array $data = []
) {
parent::__construct($context, $data);
$this->layerResolver = $layerResolver;
}
public function getCurrentCategory()
{
return $this->layerResolver->get()->getCurrentCategory();
}
}
下面是 getCurrentCategory() 方法在 Resolver Class.
中的实际作用public function getCurrentCategory()
{
$category = $this->getData('current_category');
if ($category === null) {
$category = $this->registry->registry('current_category');
if ($category) {
$this->setData('current_category', $category);
} else {
$category = $this->categoryRepository->get($this->getCurrentStore()->getRootCategoryId());
$this->setData('current_category', $category);
}
}
return $category;
}
如您所见,它仍然使用注册表,但在失败的情况下提供回退。
无需使用对象管理器或注入 class。您可以通过以下方式使用内置助手 class Magento\Catalog\Helper\Data
。
<?php
$catalogHelperData = $this->helper('Magento\Catalog\Helper\Data');
$categoryObject = $catalogHelperData->getCategory();
$categoryId = $categoryObject->getId();
$categoryName = $categoryObject->getName();
?>
此代码段适用于与产品列表页面或产品相关的任何 phtml(内置或自定义)文件详情页。
在Category页面的*.phtml文件中可以通过以下代码片段获取Category数据:
$currentCategory = $this->helper('Magento\Catalog\Helper\Data')->getCategory();