Magento 2: ¿Cómo verificar si estamos en una página de categoría o página de producto?

12

¿Hay alguna manera de verificar si un usuario en una página de categoría o una página de producto individual en Magento 2?

Cualquier ayuda sería muy apreciada!

Equipo de magento
fuente
Es decir, después de un inicio de sesión de usuario aleatorio, debemos saber que el usuario se encuentra en qué página.
Arjun
No es necesario que el usuario inicie sesión. Solo quiero verificar que la página sea página de categoría o página de producto. Como en Magento 1, podemos verificarlo así: $ category = Mage :: Registry ('current_category');
Equipo Magento

Respuestas:

29

Puede probar el siguiente código que podría ayudarlo.

Inyecte una instancia de \Magento\Framework\App\Request\Httpen su constructor de clase.

Si está en un controlador, no necesita hacerlo. Ya puedes acceder así$request = $this->getRequest()

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

Luego puede verificar si es una categoría o producto 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
fuente
3
Si lo quiere directamente en el archivo phtml, use así: $ this-> getRequest () -> getFullActionName () aquí está la condición if que usé: if ($ this-> getRequest () -> getFullActionName () == ' catalog_category_view ') {...}
KA9
Hola @Arjun, ¿cómo obtendrías el nombre de la categoría en la que te encuentras?
John
5

Supongo que podemos usar directamente

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

en el archivo .phtml para obtener la acción de la página actual.

Kazim Noorani
fuente
¡¡¡Respuesta perfecta!!! hizo mi día :) +1
SagarPPanchal
5

Puede usar la instancia de \ Magento \ Framework \ App \ Request \ Http en el constructor de su clase. Si está en un controlador, no necesita hacerlo.

Ya puedes acceder así $request = $this->getRequest()

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

Luego puede verificar si es la página de inicio, la página de categoría o la página de producto 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
}

De lo contrario, use directamente en el archivo phtml usando el administrador de objetos

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$request = $objectManager->get('\Magento\Framework\App\Request\Http');
Suresh Chikani
fuente
¿Has probado el código anterior?
Suresh Chikani
1

Si está utilizando un archivo de plantilla, es decir .phtml, puede llamar directamente a la página con el siguiente código:

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

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

if ($ request-> getFullActionName () == 'cms_index_index') {// estás en la página de inicio}

if ($ request-> getFullActionName () == 'catalog_product_view') {// estás en la página del producto}

if ($ request-> getFullActionName () == 'catalog_category_view') {// estás en la página de categoría}

y si desea obtener una categoría actual y sus datos, puede hacerlo a través de

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

$ category-> getData ('schbang_category_name');

donde schbang_category_name es mi atributo de categoría personalizado

Espero que esto pueda ayudar a alguien.

Niraj Pathak
fuente
-1

puede agregar condicional, como

if ($ this-> getProductPage ()) {
  // esta es una página de producto, haz algunas cosas
}
elseif ($ this-> getCategoryPage ()) {
  // esta es una página de categoría, haz algunas cosas
}
manuelvillagrdo
fuente
No hay ninguna función getCategoryPageen Magento 2, al menos no en 2.1.10
Jacques