Magento 2: Bagaimana cara memeriksa apakah kita berada pada halaman kategori atau halaman produk?

12

Apakah ada cara saya dapat memeriksa apakah Jika pengguna pada halaman kategori, atau halaman produk individual di Magento 2?

Bantuan apa pun akan sangat dihargai!

Tim Magento
sumber
Maksud Anda setelah login pengguna acak, kami harus mengetahui bahwa pengguna ada di halaman mana.
Arjun
Tidak diperlukan bagi pengguna untuk masuk. Saya hanya ingin memeriksa halaman kategori halaman atau halaman produk. Seperti di Magento 1 Kita dapat memeriksanya seperti ini: $ category = Mage :: registry ('current_category');
Tim Magento

Jawaban:

29

Anda dapat mencoba kode di bawah ini yang mungkin dapat membantu Anda.

Suntikkan instance dari konstruktor kelas\Magento\Framework\App\Request\Http 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;
}

Kemudian Anda dapat memeriksa apakah kategori atau produk seperti ini:

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
}
Arjun
sumber
3
Jika Anda secara langsung menginginkannya dalam file phtml, gunakan seperti ini - $ this-> getRequest () -> getFullActionName () di sini adalah kondisi if yang saya gunakan: if ($ this-> getRequest () -> getFullActionName () == ' catalog_category_view ') {...}
KA9
Hai @ Arjun, Bagaimana Anda mendapatkan nama kategori yang Anda masuki?
John
5

Saya kira, kita bisa langsung pakai

$this->getRequest()->getFullActionName()

dalam file .phtml untuk mendapatkan tindakan halaman saat ini.

Kazim Noorani
sumber
jawaban sempurna !!! membuat hari saya :) +1
SagarPPanchal
5

Anda dapat menggunakan instance dari \ Magento \ Framework \ App \ Request \ Http di konstruktor 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;
}

Kemudian Anda dapat memeriksa apakah beranda atau kategori atau halaman produk 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
}

Kalau tidak langsung digunakan dalam file phtml menggunakan manajer objek

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$request = $objectManager->get('\Magento\Framework\App\Request\Http');
Suresh Chikani
sumber
Sudahkah Anda mencoba kode di atas?
Suresh Chikani
1

Jika Anda menggunakan file template yaitu .phtml maka secara langsung Anda dapat memanggil halaman menggunakan kode di bawah ini:

$ objectManager = \ Magento \ Framework \ App \ ObjectManager :: getInstance ();

$ request = $ objectManager-> get ('\ Magento \ Framework \ App \ Request \ Http');

if ($ request-> getFullActionName () == 'cms_index_index') {// Anda ada di beranda}

if ($ request-> getFullActionName () == 'catalog_product_view') {// Anda ada di halaman produk}

if ($ request-> getFullActionName () == 'catalog_category_view') {// Anda berada di halaman kategori}

dan jika Anda mendapatkan kategori saat ini dan datanya, Anda dapat melakukannya melalui

$ category = $ objectManager-> get ('Magento \ Framework \ Registry') -> registry ('current_category');

$ category-> getData ('schbang_category_name');

di mana schbang_category_name adalah atribut kategori khusus saya

Saya harap ini bisa membantu seseorang.

Niraj Pathak
sumber
-1

Anda dapat menambahkan kondisional, seperti

if ($ this-> getProductPage ()) {
  // ini adalah halaman produk, lakukan beberapa hal
}
elseif ($ this-> getCategoryPage ()) {
  // ini adalah halaman kategori, lakukan beberapa hal
}
manuelvillagrdo
sumber
Tidak ada fungsi getCategoryPagedi mana pun di Magento 2, setidaknya tidak di 2.1.10
Jacques