Magento 2 IsHomePage nasıl kontrol edilir? Ana sayfada mıyız?


9

Geçerli sayfanın ana sayfa, kategori sayfası, ürün sayfası ve cms sayfası magento 2'de olduğunu kontrol etmek istiyorum


bunu hangi bağlamda kontrol etmek istersiniz? kontrolör? blok?
Marius

Magento 1 sürümü Mage :: getBlockSingleton ('page / html_header') -> getIsHomePage () işlevini kullanıyoruz; anasayfa, kategori sayfası, ürün sayfası & cms sayfası vb.Gibi veri sayfalarını göstermek istiyorum
MagikVishal

1
Bunu biliyorum, ama buna cevap vermek için bunu magento2'de nerede kullanmak istediğinizi bilmek istiyorum. M2 cinsinden global büyücü sınıfı yoktur.
Marius

Yanıtlar:


20

Bunu deneyebilirsiniz: \Magento\Framework\App\Request\HttpSınıf yapıcısına bir örneğini enjekte edin . Bir denetleyicideyseniz, bunu yapmanız gerekmez. Buna zaten bu şekilde erişebilirsiniz$request = $this->getRequest()

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

Sonra böyle bir ana sayfa olup olmadığını kontrol edebilirsiniz:

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
}

aynı phtml dosyasında nasıl kontrol edebilirim?
Manashvi Birla

2
bloğa $this->_request->getFullActionName()reklam döndüren bir yöntem yazın phtml dosyasında kullanın.
Marius

Açıklayabilir misiniz? biri bunu nasıl yapar?
Max

@ Max daha ne detaylara ihtiyacınız var? Bence cevap açık mı? ne bilmek istediğini söyle
Marius

Üzgünüm, tekrar okudum ve net. Teşekkür ederim.
Max

7

Phtml dosyasından bu benim için çalıştı:

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
}

benim için çalışıyor
sandip

3

Bunu dene:

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

2
nesne yöneticisi kullanmayın
Marius

Bu benim için çalıştı. Neden Nesne Yöneticisi'ni kullanmıyorsunuz?
TheBlackBenzKid

Nesne Yöneticisi'ni doğrudan kullanmak kötü bir uygulamadır. Magento Official dev doc "Magento, bir sınıfın gerçek bağımlılıklarını gizlediğinden kodunuzda ObjectManager'ın doğrudan kullanımını yasaklar."
Makwana Ketan

0

Tasarım deseni nedeniyle Bağımlılık Enjeksiyonu. Talep üzerine bir kaynak talep etmek için bir modül oluşturursunuz. Nesne yöneticisi bu paradigmaya karşı çıkıyor. Ancak, harika çalışıyor ama Mage'yi tekrar tekrar kullanmak gibi - yavaş.


whoops yukarıda yorum yapması gerekiyordu, b.
Chris Anderson

0

Aşağıdaki kodu deneyin:

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

Nesne Yöneticisini Kullanma

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