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.