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!

Equipe Magento
fonte
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
}
Arjun
fonte
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.

Kazim Noorani
fonte
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');
Suresh Chikani
fonte
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.

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