¿Cómo verificar IsHomePage en Magento 2? ¿Estamos en la página de inicio?

9

Quiero verificar que la página actual sea la página de inicio, la página de categoría, la página del producto y la página de cms en magento 2

MagikVishal
fuente
¿en qué contexto quieres comprobar esto? ¿controlador? ¿bloquear?
Marius
La versión de Magento 1 usamos la función Mage :: getBlockSingleton ('page / html_header') -> getIsHomePage (); quiero mostrar pagewise de datos como página de inicio, página de la categoría, la página del producto y la página cms etc
MagikVishal
1
Lo sé, pero para responder esto quiero saber dónde quieres usar esto en magento2. No hay clase de mago global en m2.
Marius

Respuestas:

20

Puede intentar esto: 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 la página de inicio 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
fuente
@marius: ¿cómo verifico lo mismo en un archivo phtml?
Manashvi Birla
2
escriba un método en el bloque que devuelve el $this->_request->getFullActionName()anuncio y úselo en el archivo phtml.
Marius
¿Podrías dar más detalles? ¿Cómo se hace eso?
Max
@Max ¿qué más elaboración necesitas? Creo que la respuesta es clara? dime lo que quieres saber
Marius
Lo siento, lo releí y está claro. Gracias.
Max
7

Desde el interior del archivo phtml esto funcionó para mí:

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
}
karpa
fuente
funciona para mí
sandip
3

Prueba este:

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$request = $objectManager->get('Magento\Framework\App\Action\Context')->getRequest();
if ($request->getFullActionName() == 'cms_index_index') {
    // is homepage
}
MagePsycho
fuente
2
no use el administrador de objetos
Marius
Esto funcionó para mí. ¿Por qué no usar Object Manager?
TheBlackBenzKid
Es una mala práctica usar el Administrador de objetos directamente. El documento de desarrollo oficial de Magento dice "Magento prohíbe el uso directo del ObjectManager en su código porque oculta las dependencias reales de una clase".
Makwana Ketan
0

Debido a la inyección de dependencia del patrón de diseño. Crea un módulo para solicitar un recurso a pedido. El administrador de objetos va en contra de ese paradigma. Sin embargo, funciona muy bien, pero es como usar Mage de nuevo, lento.

Chris Anderson
fuente
whoops supone comentar arriba, mi b.
Chris Anderson el
0

Pruebe el siguiente código:

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 Object Manager

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$logo = $objectManager->get('Magento\Theme\Block\Html\Header\Logo');
var_dump($logo->isHomePage());

fuente