Magento 2: Como verificar se estamos em uma página de categoria ou página de produto?


12

Existe uma maneira de verificar se um usuário em uma página de categoria ou uma página de produto individual no Magento 2?

Qualquer ajuda seria muito apreciada!


Você quer dizer que após um login aleatório de usuário, devemos saber que o usuário está em qual página.
Arjun

Não é necessário que o usuário faça login. Eu só quero verificar se a página é página de categoria ou página de produto. Como no Magento 1, podemos verificar assim: $ category = Mage :: registry ('current_category');
Magento Team

Respostas:


29

Você pode tentar o código abaixo, que pode ajudá-lo.

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 é categoria ou produto como este:

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
}

3
Se você quiser diretamente no arquivo phtml, use desta forma - $ this-> getRequest () -> getFullActionName () aqui está a condição if que eu usei: if ($ this-> getRequest () -> getFullActionName () == ' catalog_category_view ') {...}
KA9

Olá @Arjun, Como você obteria o nome da categoria em que está?
John #

5

Eu acho que podemos usar diretamente

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

no arquivo .phtml para obter a ação atual da página.


resposta perfeita !!! made my day :) +1
SagarPPanchal

5

Você pode usar a instância de \ Magento \ Framework \ App \ Request \ Http no seu construtor de classes. 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;
}

Em seguida, você pode verificar se é a página inicial ou a página da categoria ou a página do produto 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
}

Caso contrário, use diretamente no arquivo phtml usando o gerenciador de objetos

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

Você já tentou o código acima?
Suresh Chikani 12/09/16

1

Se você estiver usando um arquivo de modelo, por exemplo, .phtml, diretamente, poderá ligar na página usando o código abaixo:

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

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

if ($ request-> getFullActionName () == 'cms_index_index') {// você está na página inicial}

if ($ request-> getFullActionName () == 'catalog_product_view') {// você está na página do produto}

if ($ request-> getFullActionName () == 'catalog_category_view') {// você está na página da categoria}

e se você deseja obter uma categoria atual e seus dados, pode fazê-lo via

$ category = $ objectManager-> get ('Magento \ Framework \ Registry') -> registro ('categoria_ atual');

$ category-> getData ('schbang_category_name');

em que schbang_category_name é meu atributo de categoria personalizado

Espero que isso ajude alguém.


-1

você pode adicionar condicionais, como

if ($ this-> getProductPage ()) {
  // esta é uma página de produto, faça algumas coisas
}
elseif ($ this-> getCategoryPage ()) {
  // esta é uma página de categoria, faça algumas coisas
}

Não há nenhuma função getCategoryPageem qualquer lugar Magento 2, pelo menos não em 2.1.10
Jacques
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.