Magento 2: Jak korzystać z uchwytu układu Customer_logged_in?

9

Czy Magento 2 ma taki uchwyt jak customer_logged_in ? Jeśli tak, jak mogę go użyć?

Próbowałem stworzyć

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

i dodał tam <referenceBlock name="content" remove="true" />

Ale blok treści nie został usunięty. Zmieniłem nazwę pliku obsługi na domyślną i blok został pomyślnie usunięty.

Co ja robię źle?

zhartaunik
źródło

Odpowiedzi:

9

Odpowiedź na twoje pytanie jest zdecydowanie nie, nie ma customer_logged_injuż żadnego uchwytu, zagłębiłem się w kod i nie mogłem znaleźć żadnego uchwytu układu, który mógłby załatwić sprawę.

Oprócz tego \dev\tests\static\testsuite\Magento\Test\Legacy\LayoutTest.phpmożesz znaleźć następujący kod:

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

Co dla mnie wyraźnie mówi nam, że customer_logged_inuchwyt układu jest teraz przestarzały.

Zobacz odpowiedź Fabiana, by dowiedzieć się, jak to się teraz robi w Magento 2.

Raphael at Digital Pianism
źródło
1
zdarzenia te są wyzwalane, gdy klient loguje się i kiedy się wylogowuje , nie na każde żądanie.
Fabian Schmengler,
8

Jak zauważyli inni, tych uchwytów już nie ma. Jeśli spojrzysz na moduł Magento_Customer, zobaczysz, że bloki takie jak link rejestracyjny są zawsze dodawane, ale nie renderowane, jeśli klient jest zalogowany . Wygląda na to, że jest to obecnie preferowany sposób warunkowego wyświetlania elementów w zależności od stanu logowania.

Ale to nie jest rozwiązanie do usuwania bloków na podstawie ich nazw, które zostały zdefiniowane gdzie indziej. Możesz odtworzyć tę funkcję z obserwatorem dla layout_load_beforetych połączeń, $layout->addHandle('customer_logged_in')jeśli klient jest zalogowany.

Fabian Schmengler
źródło
Dzięki za twoją odpowiedź. Pewnie pomyślałem o dodaniu uchwytu w moim niestandardowym module. Ale może to wyglądać jak kolec i chciałem użyć bardziej natywnego sposobu. Dzięki za wyjaśnienie i przykład
zhartaunik
0

To jest bardzo głupie. Muszę załadować blok / szablon / zasób tylko klient ma uprawnienia, a nie tylko logowanie lub wylogowanie. Ale muszę napisać 1000 wierszy kodu, aby sprawdzić, czy użytkownik ma pozwolenie na to. Po prostu pięknie.

użytkownik2386643
źródło