Magento 2 mendapatkan Id kategori saat ini menggunakan registri


Jawaban:


0

Saya pikir Anda telah melakukan di controller Anda mungkin Anda harus mendapatkan manajer objek yang akan diinisialisasi dengan menggunakan kelas konteks dalam metode __construct.


Hai saya sudah memanggil metode pembangunan dalam file kelas blok saya, silakan cek tautan di bawah ini untuk lebih detail codebeautify.org/alleditor/0b796a Dan terima kasih atas bantuannya.
Pratik

Ini seharusnya bukan jawaban yang diterima. Anda seharusnya tidak menggunakan Objectmanager dalam cara yang dijelaskan.
seanbreeden

22

Jika Anda membutuhkan ID kategori di Magento2, maka Anda bisa mendapatkan nilai menggunakan langkah-langkah berikut untuk diikuti

1. Sertakan penggunaan Magento\Framework\Registrydalam file kelas Anda.

<?php
/**
 * class file
 */

namespace Vendor\Module\Model;

use Magento\Framework\Registry;

...

2. Buat objek untuk itu menggunakan objek Manager atau jika Anda menggunakannya di controller kemudian menetapkan dalam __construct()fungsi Anda sebagai \Magento\Framework\Registry $registry:

...

/**
 * @var Registry
 */

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

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

    ...

3. Kemudian Anda cukup menggunakannya dengan kelas sebagai:

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

echo $category->getId();

Untuk Referensi lebih lanjut dalam Magento2 Implementasi konsep ini merujuk file kelas dan fungsi yang disebut fungsi publik _initCategory(). Dalam metode ini mereka mendaftarkan kategori saat ini.


Hai Saya ikuti langkah dan periksa hasil yang menunjukkan Ada kesalahan saat memproses permintaan Anda, Obyek DOMDocument harus dibuat.
Pratik

Properti pribadi Anda berada di tempat yang salah.
LM_Fielding

10

Coba kode ini. ini pasti akan membantu Anda.

<?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
Anda seharusnya tidak menggunakan manajer objek dalam kode Anda seperti itu. devdocs.magento.com/guides/v2.0/extension-dev-guide/…
drew7721

3

Di atas kelihatannya benar, tetapi saya berpikir bahwa melompat langsung ke Registry bukanlah pendekatan terbaik. Magento menyediakan Layer Resolver yang telah merangkum fungsionalitas itu. (Lihat Blok TopMenu di Plugin Katalog)

Saya sarankan menyuntikkan kelas \ Magento \ Catalog \ Model \ Layer \ Resolver dan menggunakannya untuk mendapatkan kategori saat ini. Ini kodenya:

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

Inilah yang dilakukan oleh metode getCurrentCategory () di kelas Resolver.

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

Seperti yang Anda lihat, itu masih menggunakan registri tetapi memberikan cadangan jika gagal.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.