Bagaimana cara memeriksa IsHomePage di Magento 2? Apakah kita ada di beranda?


9

Saya ingin memeriksa halaman saat ini adalah halaman rumah, halaman kategori, halaman produk & halaman cms di magento 2


dalam konteks apa Anda ingin memeriksa ini? pengontrol? blok?
— Marius

Versi Magento 1 kita gunakan function Mage :: getBlockSingleton ('page / html_header') -> getIsHomePage (); saya ingin menampilkan data dengan cara seperti halaman beranda, halaman kategori, halaman produk & halaman cms dll
— MagikVishal

1
Saya tahu itu, tetapi untuk menjawab ini saya ingin tahu di mana Anda ingin menggunakan ini di magento2. Tidak ada kelas global mage di m2.
— Marius

Jawaban:


20

Anda dapat mencoba ini: Menyuntikkan instance dari \Magento\Framework\App\Request\Httpkonstruktor kelas Anda. Jika Anda berada di controller Anda tidak perlu melakukannya. Anda sudah dapat mengaksesnya seperti ini$request = $this->getRequest()

public function __construct(
    ...
    \Magento\Framework\App\Request\Http $request
) {
    ...
    $this->_request = $request;
}

Maka Anda dapat memeriksa apakah beranda seperti ini:

if ($this->_request->getFullActionName() == 'cms_index_index') {
    //you are on the homepage
}
if ($this->_request->getFullActionName() == 'catalog_product_view') {
    //you are on the product page
}
if ($this->_request->getFullActionName() == 'catalog_category_view') {
    //you are on the category page
}

@marius - bagaimana cara saya mengecek yang sama dalam file phtml?
— Manashvi Birla

2
tulis metode di blok yang mengembalikan $this->_request->getFullActionName()iklan menggunakannya dalam file phtml.
— Marius

Bisakah Anda menguraikan? Bagaimana seseorang melakukan itu?
— Maks

@ Max apa lagi elaborasi yang Anda butuhkan? Saya pikir jawabannya jelas? katakan padaku apa yang ingin kau ketahui
— Marius

Maaf, saya baca ulang dan jelas. Terima kasih.
— Maks

7

Dari dalam file phtml ini berfungsi untuk saya:

if ($this->getRequest()->getFullActionName() == 'cms_index_index') {
    //you are on the homepage
}
if ($this->getRequest()->getFullActionName() == 'catalog_product_view') {
    //you are on the product page
}
if ($this->getRequest()->getFullActionName() == 'catalog_category_view') {
    //you are on the category page
}

itu bekerja untuk saya
— sandip

3

Coba yang ini:

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$request = $objectManager->get('Magento\Framework\App\Action\Context')->getRequest();
if ($request->getFullActionName() == 'cms_index_index') {
    // is homepage
}

2
jangan gunakan manajer objek
— Marius

Ini berhasil untuk saya. Mengapa tidak menggunakan Object Manager?
— TheBlackBenzKid

Ini praktik buruk untuk menggunakan Object Manager secara langsung. Magento Official dev doc mengatakan "Magento melarang penggunaan langsung ObjectManager dalam kode Anda karena menyembunyikan dependensi nyata suatu kelas."
— Makwana Ketan

0

Karena pola desain Injeksi Ketergantungan. Anda membuat modul untuk meminta sumber daya sesuai permintaan. Manajer objek menentang paradigma itu. Namun, ini berfungsi dengan baik tetapi seperti menggunakan Mage lagi - lambat.


whoops seharusnya berkomentar di atas, saya b.
— Chris Anderson

0

Coba kode di bawah ini:

protected $_logo;   

public function __construct(
    \Magento\Backend\Block\Template\Context $context,
    \Magento\Theme\Block\Html\Header\Logo $logo,
    array $data = []
)
{       
    $this->_logo = $logo;
    parent::__construct($context, $data);
}

public function isHomePage()
{   
    return $this->_logo->isHomePage();
}

Menggunakan Object Manager

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$logo = $objectManager->get('Magento\Theme\Block\Html\Header\Logo');
var_dump($logo->isHomePage());
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.