Magento 2: Comment utiliser le gestionnaire de mise en page customer_logged_in?

9

Magento 2 a-t-il une telle poignée que customer_logged_in ? Si oui, comment puis-je l'utiliser?

J'ai essayé de créer

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

et y a ajouté <referenceBlock name="content" remove="true" />

Mais le bloc de contenu n'a pas été supprimé. J'ai renommé le fichier de gestion par défaut et le bloc a été supprimé avec succès.

Qu'est-ce que je fais mal?

zhartaunik
la source

Réponses:

9

La réponse à votre question est définitivement non, il n'y a plus de customer_logged_inpoignée, j'ai creusé dans le code et je n'ai trouvé aucune poignée de mise en page qui pourrait faire l'affaire.

En plus de cela sous \dev\tests\static\testsuite\Magento\Test\Legacy\LayoutTest.phpvous pouvez trouver le code suivant:

/**
 * 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',
];

Ce qui pour moi, nous indique clairement que la customer_logged_inpoignée de mise en page est obsolète maintenant.

Voir la réponse de Fabian pour des explications sur la façon dont cela se fait maintenant dans Magento 2.

Raphael chez Digital Pianism
la source
1
ces événements sont déclenchés lorsque le client se connecte et lorsqu'il se déconnecte , pas à chaque demande.
Fabian Schmengler
8

Comme d'autres l'ont souligné, ces poignées ont maintenant disparu. Si vous regardez le module Magento_Customer, vous verrez que des blocs comme le lien d'enregistrement sont toujours ajoutés mais pas rendus si le client est connecté . Il semble que ce soit maintenant le moyen préféré d'afficher les éléments de manière conditionnelle en fonction de l'état de connexion.

Mais ce n'est pas une solution pour supprimer des blocs en fonction de leur nom, qui ont été définis ailleurs. Vous pouvez recréer la fonctionnalité avec un observateur pour les layout_load_beforeappels $layout->addHandle('customer_logged_in')si le client est connecté.

Fabian Schmengler
la source
Merci pour votre réponse. Bien sûr, j'ai pensé à ajouter une poignée dans mon module personnalisé. Mais cela pourrait ressembler à un pic et je voulais utiliser de manière plus native. Merci pour l'explication et l'exemple
zhartaunik
0

C'est vraiment stupide. J'ai besoin de charger un bloc / un modèle / un recours, seul le client a la permission, pas seulement la connexion ou la déconnexion. Mais j'ai besoin d'écrire 1000 lignes de code pour vérifier si l'utilisateur a la permission de voir cela. Juste magnifique.

user2386643
la source