Magento 2 ruft die aktuelle Kategorie-ID mithilfe der Registrierung ab

13

Weiß jemand, wie ich die Kategorie-ID mithilfe der aktuellen Kategorieregistrierung in Magento 2 erhalten kann?

Pratik
quelle
Siehe Blogs, rakeshjesadiya.com/
Rakesh Jesadiya

Antworten:

0

Ich denke, Sie haben in Ihrem Controller getan, möglicherweise sollten Sie den Objektmanager mithilfe der Kontextklasse in der __construct-Methode initialisieren lassen.

Niranjan B
quelle
Hallo, ich rufe die Konstruktmethode bereits in meiner Blockklassendatei auf. Bitte überprüfen Sie den folgenden Link für weitere Details. Codebeautify.org/alleditor/0b796a Und danke für Hilfe.
Pratik
Dies sollte nicht die akzeptierte Antwort sein. Sie sollten den Objectmanager nicht auf die beschriebene Weise verwenden.
Seanbreeden
22

Wenn Sie die Kategorie-ID in Magento2 benötigen, können Sie die Werte anhand der folgenden Schritte ermitteln

1.Nehmen Sie die Verwendung Magento\Framework\Registryin Ihre Klassendatei auf.

<?php
/**
 * class file
 */

namespace Vendor\Module\Model;

use Magento\Framework\Registry;

...

2.Erstellen Sie ein Objekt dafür mit dem Objekt-Manager oder, falls Sie es in der Steuerung verwenden, weisen Sie es in Ihrer __construct()Funktion zu als \Magento\Framework\Registry $registry:

...

/**
 * @var Registry
 */

class BlueLine
{
    ...
    private $registry;
    ...

    public function __construct(Registry $registry) 
    {
        $this->registry = $registry;
    }

    ...

3. Dann können Sie es einfach mit der Klasse verwenden als:

$category = $this->registry->registry('current_category');

echo $category->getId();

Weitere Informationen zur Implementierung dieses Konzepts in Magento2 finden Sie in der Klassendatei und der Funktion public function _initCategory(). Bei dieser Methode registrieren sie die aktuelle Kategorie.

Niranjan B
quelle
Hallo, ich folge Schritt und überprüfe das Ergebnis. Es ist ein Fehler bei der Verarbeitung Ihrer Anfrage aufgetreten. Das Objekt DOMDocument sollte erstellt werden.
Pratik
Ihr Privatbesitz befindet sich am falschen Ort.
LM_Fielding
10

Versuchen Sie diesen Code. das wird dir definitiv helfen.

<?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();
?>
Makwana Ketan
quelle
4
Sie sollten den Objektmanager in Ihrem Code nicht so verwenden. devdocs.magento.com/guides/v2.0/extension-dev-guide/…
drew7721 17.11.17
3

Das Obige scheint korrekt zu sein, aber ich denke, dass es nicht der beste Ansatz ist, direkt in die Registrierung zu springen. Magento bietet einen Layer Resolver, der diese Funktionalität bereits enthält. (Siehe den TopMenu Block in den Catalog Plugins)

Ich schlage vor, die Klasse \ Magento \ Catalog \ Model \ Layer \ Resolver zu injizieren und diese zu verwenden, um die aktuelle Kategorie abzurufen. Hier ist der 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();
    }

    public function getCurrentCategoryId()
    {
        return $this->getCurrentCategory()->getId();
    }
}

Die Methode getCurrentCategory () in der Resolver-Klasse führt die folgenden Aktionen aus.

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

Wie Sie sehen, wird die Registrierung weiterhin verwendet, es wird jedoch ein Fallback für den Fall bereitgestellt, dass dies fehlschlägt.

drew7721
quelle