web-dev-qa-db-ja.com

magento2で現在のカテゴリを取得する方法

magento2で現在のカテゴリを取得するにはどうすればよいですか?

カスタムphtmlファイルでカテゴリ名とカテゴリIDを取得したい。

9
Makwana Ketan

このコードを試してください。これは間違いなくあなたを助けます。

<?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();
?>
7
Makwana Ketan

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()などの詳細を取得できます

13
Manish Joy

上記は正しいように見えますが、レジストリに直接ジャンプすることは最善のアプローチではないと思います。 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;
}

ご覧のとおり、レジストリは引き続き使用されますが、失敗した場合のフォールバックを提供します。

6
drew7721

オブジェクトマネージャや注入クラスを使用する必要はありません。組み込みヘルパークラスMagento\Catalog\Helper\Dataを次のように使用できます。

<?php 
    $catalogHelperData = $this->helper('Magento\Catalog\Helper\Data');
    $categoryObject = $catalogHelperData->getCategory();
    $categoryId = $categoryObject->getId();
    $categoryName = $categoryObject->getName();
?>

このコードスニペットは、製品リストページまたは製品に関連するany phtmlbuilt-in or custom)ファイルで機能します。詳細ページ。

1
Milan Chandro

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();
    }

?>
0
AB Saiyad