web-dev-qa-db-fra.com

Comment obtenir la catégorie actuelle dans magento2?

Comment puis-je obtenir la catégorie actuelle dans magento2 ?

Je veux obtenir le nom et l'id de la catégorie dans un fichier phtml personnalisé.

6
Makwana Ketan

Essayez ce code. cela va certainement vous aider.

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

Magento définit le registre pour les catégories auxquelles l'utilisateur accède. Donc, pour obtenir la catégorie actuelle, utilisez la méthode suivante:

/**
 * @param \Magento\Framework\Registry $registry
 */

protected $_registry;

public function __construct(
    \Magento\Framework\Registry $registry
) {
    $this->_registry = $registry;
}

et ensuite utiliser:

$category = $this->_registry->registry('current_category');//get current category

Vous pouvez maintenant accéder à la collection et récupérer des détails tels que $ category-> getName ()

12
Manish Joy

Ce qui précède semble correct, mais je pense que passer directement au registre n’est pas la meilleure approche. Magento fournit un résolveur de couche qui encapsule déjà cette fonctionnalité. (Voir le bloc TopMenu dans les plugins du catalogue)

Je suggère d'injecter la classe\Magento\Catalog\Model\Layer\Resolver et de l'utiliser pour obtenir la catégorie actuelle. Voici le code:

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

Voici ce que fait la méthode getCurrentCategory () dans la classe de résolveur.

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

Comme vous pouvez le constater, il utilise toujours le registre, mais il offre une solution de secours en cas d'échec.

1
drew7721

Ajouter un thème de code XML/namespace/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" />

Créer un nouveau thème de fichier/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