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.