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クラスを挿入し、それを使用して現在のカテゴリを取得することをお勧めします。ここにコードがあります:
<?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();
}
}
以下は、Resolverクラスで実際のgetCurrentCategory()メソッドが行うことです。
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;
}
ご覧のとおり、レジストリは引き続き使用されますが、失敗した場合のフォールバックを提供します。
オブジェクトマネージャや注入クラスを使用する必要はありません。組み込みヘルパークラスMagento\Catalog\Helper\Data
を次のように使用できます。
<?php
$catalogHelperData = $this->helper('Magento\Catalog\Helper\Data');
$categoryObject = $catalogHelperData->getCategory();
$categoryId = $categoryObject->getId();
$categoryName = $categoryObject->getName();
?>
このコードスニペットは、製品リストページまたは製品に関連するany phtml(built-in or custom)ファイルで機能します。詳細ページ。
XMLコードテーマ/名前空間/ Magento_Catalog/templates/product/viewを追加します
<block class="Magento\Catalog\Block\Product\View" name="product.info.category" after="product.price.final" template="product/view/current_category.phtml" />
新しいファイルの作成Theme/namespace/Magento_Catalog/templates/product/view
<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$product = $objectManager->get('Magento\Framework\Registry')->registry('current_product');
$categories = $product->getCategoryIds(); /*will return category ids array*/
foreach($categories as $category){
$cat = $objectManager->create('Magento\Catalog\Model\Category')->load($category);
echo $cat->getName();
}
?>