Magento 2: ¿Cómo utilizar el controlador de diseño customer_logged_in?

9

¿Magento 2 tiene un identificador como customer_logged_in ? En caso afirmativo, ¿cómo puedo usarlo?

Traté de crear

../view/frontend/layout/customer_logged_in.xml

y agregado allí <referenceBlock name="content" remove="true" />

Pero el bloqueo de contenido no se eliminó. Cambié el nombre del archivo de identificador a predeterminado y el bloque se eliminó con éxito.

¿Qué estoy haciendo mal?

zhartaunik
fuente

Respuestas:

9

La respuesta a su pregunta es definitivamente no, ya no hay un customer_logged_inidentificador, he cavado en el código y no pude encontrar ningún identificador de diseño que pudiera hacer el truco.

Además de eso \dev\tests\static\testsuite\Magento\Test\Legacy\LayoutTest.php, puede encontrar el siguiente código:

/**
 * List of obsolete nodes
 *
 * @var array
 */
protected $_obsoleteNodes = [
    'PRODUCT_TYPE_simple',
    'PRODUCT_TYPE_configurable',
    'PRODUCT_TYPE_grouped',
    'PRODUCT_TYPE_bundle',
    'PRODUCT_TYPE_virtual',
    'PRODUCT_TYPE_downloadable',
    'PRODUCT_TYPE_giftcard',
    'catalog_category_default',
    'catalog_category_layered',
    'catalog_category_layered_nochildren',
    'customer_logged_in',
    'customer_logged_out',
    'customer_logged_in_psc_handle',
    'customer_logged_out_psc_handle',
    'cms_page',
    'sku_failed_products_handle',
    'catalog_product_send',
    'reference',
];

Lo que para mí, claramente nos dice que el customer_logged_incontrolador de diseño está obsoleto ahora.

Consulte la respuesta de Fabian para obtener explicaciones sobre cómo se hace ahora en Magento 2.

Raphael en Digital Pianism
fuente
1
esos eventos se activan cuando el cliente inicia sesión y cuando cierra la sesión , no en cada solicitud.
Fabian Schmengler
8

Como otros han señalado, estos mangos ya no están. Si observa el módulo Magento_Customer, verá que los bloques como el enlace de registro siempre se agregan pero no se representan si el cliente ha iniciado sesión . Parece que esta es la forma preferida de mostrar elementos condicionalmente dependiendo del estado de inicio de sesión.

Pero esta no es una solución para eliminar bloques basados ​​en su nombre, que se definieron en otro lugar. Puede volver a crear la función con un observador para layout_load_beforeesas llamadas $layout->addHandle('customer_logged_in')si el cliente ha iniciado sesión.

Fabian Schmengler
fuente
Gracias por su respuesta. Claro que pensé en agregar el controlador en mi módulo personalizado. Pero podría parecer un pico y quería usar una forma más nativa. Gracias por la explicación y el ejemplo
zhartaunik
0

Esto es muy estupido. Necesito cargar bloque / plantilla / recurso solo el cliente tiene permiso, no solo iniciar sesión o cerrar sesión. Pero necesito escribir 1000 líneas de código para verificar si el usuario tiene permiso para ver esto. Simplemente hermoso.

usuario2386643
fuente