Magento 2: Como usar o manipulador de layout customer_logged_in?

9

O Magento 2 possui um identificador como customer_logged_in ? Se sim, como posso usá-lo?

Eu tentei criar

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

e adicionado lá <referenceBlock name="content" remove="true" />

Mas o bloco de conteúdo não foi removido. Renomeei o arquivo de identificador para o padrão e o bloco foi removido com êxito.

O que estou fazendo errado?

zhartaunik
fonte

Respostas:

9

A resposta à sua pergunta é definitivamente não, não há customer_logged_inmais identificador, eu procurei o código e não consegui encontrar nenhum identificador de layout que pudesse fazer o truque.

Além disso, \dev\tests\static\testsuite\Magento\Test\Legacy\LayoutTest.phpvocê encontra o seguinte 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',
];

O que, para mim, nos diz claramente que o customer_logged_inidentificador de layout está obsoleto agora.

Veja a resposta de Fabian para explicações sobre como isso é feito agora no Magento 2.

Raphael na Digital Pianism
fonte
11
esses eventos são acionados quando o cliente efetua login e quando efetua logout , não em todas as solicitações.
Fabian Schmengler
8

Como outros já apontaram, essas alças já se foram. Se você olhar o módulo Magento_Customer, verá que blocos como o link de registro são sempre adicionados, mas não renderizados se o cliente estiver logado . Parece que agora é a maneira preferida de mostrar elementos condicionalmente, dependendo do estado de login.

Mas essa não é uma solução para remover blocos com base em seus nomes, que foram definidos em outro lugar. Você pode recriar o recurso com um observador para layout_load_beforeessas chamadas $layout->addHandle('customer_logged_in')se o cliente estiver conectado.

Fabian Schmengler
fonte
Obrigado pela sua resposta. Claro, eu pensei em adicionar manipular isso no meu módulo personalizado. Mas poderia parecer um pico e eu queria usar uma maneira mais nativa. Obrigado pela explicação e exemplo
zhartaunik 15/03
0

Isso é muito estúpido. Eu preciso carregar o bloco / modelo / recurso apenas o cliente tem permissão, não apenas loggin ou loggout. Mas eu preciso escrever 1000 linhas de código para verificar se o usuário tem permissão para ver isso. Apenas bonita.

user2386643
fonte