Magento 2: come utilizzare il layout handle customer_logged_in?


9

Magento 2 ha un handle come customer_logged_in ? Se sì, come posso usarlo?

Ho provato a creare

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

e aggiunto lì <referenceBlock name="content" remove="true" />

Ma il blocco di contenuto non è stato rimosso. Ho rinominato il file handle come predefinito e il blocco è stato rimosso con successo.

Che cosa sto facendo di sbagliato?

Risposte:


9

La risposta alla tua domanda è sicuramente no, non c'è customer_logged_inpiù un handle, ho scavato nel codice e non sono riuscito a trovare alcun handle di layout che potrebbe fare il trucco.

Inoltre, sotto \dev\tests\static\testsuite\Magento\Test\Legacy\LayoutTest.phppuoi trovare il seguente codice:

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

Il che per me ci dice chiaramente che la customer_logged_inmaniglia del layout è ormai obsoleta.

Vedi la risposta di Fabian per le spiegazioni su come viene fatto ora in Magento 2.


1
tali eventi vengono attivati ​​quando il cliente accede e quando si disconnette , non ad ogni richiesta.
Fabian Schmengler,


8

Come altri hanno sottolineato, queste maniglie sono ora sparite. Se guardi il modulo Magento_Customer, vedrai che i blocchi come il link di registrazione vengono sempre aggiunti ma non resi se il cliente ha effettuato l'accesso . Sembra che questo sia ora il modo preferito per mostrare gli elementi in modo condizionale a seconda dello stato di accesso.

Ma questa non è una soluzione per rimuovere i blocchi in base al loro nome, che sono stati definiti altrove. È possibile ricreare la funzione con un osservatore per le layout_load_beforechiamate $layout->addHandle('customer_logged_in')se il cliente ha effettuato l'accesso.


Grazie per la risposta. Certo, ho pensato di aggiungere handle nel mio modulo personalizzato. Ma potrebbe sembrare un picco e volevo usare un modo più nativo. Grazie per la spiegazione e l'esempio
zhartaunik

0

Questo è molto stupido. Devo caricare il blocco / modello / risorsa solo il cliente ha l'autorizzazione, non solo il login o il logout. Ma devo scrivere 1000 righe di codice per verificare se l'utente ha il permesso di vedere questo. Semplicemente bellissima.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.