Como verificar o IsHomePage no Magento 2? Estamos na página inicial?


9

Quero verificar se a página atual é a home page, a categoria, a página do produto e a página cms no magento 2


em que contexto você deseja verificar isso? controlador? quadra?
Marius

Na versão Magento 1, usamos a função Mage :: getBlockSingleton ('page / html_header') -> getIsHomePage (); eu quero mostrar pagewise dados como homepage, página de categoria, página de produto & página cms etc
MagikVishal

11
Eu sei disso, mas, para responder a isso, quero saber onde você quer usar isso no magento2. Não existe classe de magos global em m2.
Marius

Respostas:


20

Você pode tentar o seguinte: Injete uma instância de \Magento\Framework\App\Request\Httpno seu construtor de classe. Se você estiver em um controlador, não precisará fazê-lo. Você já pode acessá-lo assim$request = $this->getRequest()

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

Então você pode verificar se é a página inicial como esta:

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 - como faço para verificar o mesmo em um arquivo phtml?
Manashvi Birla

2
escreva um método no bloco que retorna o $this->_request->getFullActionName()anúncio e use-o no arquivo phtml.
Marius

Você poderia elaborar? Como é que alguém faz isso?
Max

@ Max que mais elaboração você precisa? Eu acho que a resposta é clara? me diga o que você quer saber
Marius

Desculpe, eu reli e está claro. Obrigado.
Max

7

De dentro do arquivo phtml, isso funcionou para mim:

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
}

ele trabalha para mim
sandip

3

Tente este:

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

2
não use gerenciador de objetos
Marius

Isso funcionou para mim. Por que não usar o Object Manager?
TheBlackBenzKid

É uma prática recomendada usar o Gerenciador de Objetos diretamente. Magento Official dev doc diz "O Magento proíbe o uso direto do ObjectManager no seu código porque oculta as dependências reais de uma classe."
Makwana Ketan

0

Por causa do padrão de design Injeção de Dependência. Você cria um módulo para solicitar um recurso sob demanda. O gerenciador de objetos está indo contra esse paradigma. No entanto, funciona muito bem, mas é como usar o Mage novamente - devagar.


gritos deveriam comentar acima, meu b.
Chris Anderson

0

Experimente o código abaixo:

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

Usando o Gerenciador de Objetos

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$logo = $objectManager->get('Magento\Theme\Block\Html\Header\Logo');
var_dump($logo->isHomePage());
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.