Magento 2 kayıt defterini kullanarak güncel kategori kimliği al


Yanıtlar:


0

Ben senin denetleyicinizde yapmış olabilirsiniz olabilir __Contruct yönteminde bağlam sınıfı kullanılarak nesne yöneticisi başlatılması gerekir olabilir.


Merhaba ben zaten benim blok sınıf dosyasında yapıcı yöntem çağırmak daha fazla ayrıntı için aşağıdaki bağlantıyı kontrol codebeautify.org/alleditor/0b796a Ve yardım için teşekkürler.
Pratik

Bu kabul edilen cevap olmamalıdır. Objectmanager'i tarif edilen şekilde kullanmamalısınız.
seanbreeden

22

Magento2 kategorisindeki Id kategorisine ihtiyacınız varsa, aşağıdaki adımları izleyerek değerleri alabilirsiniz

1. kullanımı Magento\Framework\Registrysınıf dosyanıza ekleyin.

<?php
/**
 * class file
 */

namespace Vendor\Module\Model;

use Magento\Framework\Registry;

...

2. nesne Yöneticisi'ni kullanan bir nesne oluşturun veya denetleyicide kullanıyorsanız, __construct()işlevinize şu şekilde atayın \Magento\Framework\Registry $registry:

...

/**
 * @var Registry
 */

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

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

    ...

3.Sadece sınıfla birlikte kullanabilirsiniz:

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

echo $category->getId();

Magento2'deki diğer Referanslar için Bu kavramın uygulanması, public function adı verilen sınıf dosyasına ve fonksiyonuna bakın _initCategory(). Bu yöntemde mevcut kategoriyi kaydediyorlar.


Merhaba Adım izleyin ve onun sonucunu kontrol edin İsteğiniz işlenirken bir hata oluştu Nesne DOMDocument oluşturulmalıdır.
Pratik

Özel mülkünüz yanlış yerde.
LM_Fielding

10

Bu kodu deneyin. bu kesinlikle size yardımcı olacaktır.

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

4
Kodunuzda nesne yöneticisini böyle kullanmamalısınız. devdocs.magento.com/guides/v2.0/extension-dev-guide/…
drew7721

liste sayfasında kategori adı nasıl alınır? objectmanager kullanmadan?
jafar pinjar

3

Yukarıdakiler doğru görünmekle birlikte, doğrudan Kayıt Defterine atlamanın en iyi yaklaşım olmadığını düşünüyorum. Magento, bu işlevselliği zaten içine alan bir Katman Çözücü sağlar. (Katalog Eklentilerindeki TopMenu Bloğuna bakın)

\ Magento \ Catalogue \ Model \ Layer \ Resolver sınıfını enjekte etmenizi ve geçerli kategoriyi almak için bunu kullanmanızı öneririm. İşte kod:

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

Resolver Sınıfı'nda gerçek getCurrentCategory () yönteminin yaptığı şey aşağıdadır.

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

Gördüğünüz gibi, kayıt defterini hala kullanıyor ancak başarısız olması durumunda bir geri dönüş sağlıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.