Magento 2:レイアウトハンドルcustomer_logged_inの使用方法


9

Magento 2にはcustomer_logged_inなどのハンドルがありますか?はいの場合、どのように使用できますか?

作ってみました

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

そしてそこに追加されました <referenceBlock name="content" remove="true" />

ただし、コンテンツブロックは削除されませんでした。ハンドルファイルの名前をデフォルトに変更すると、ブロックは正常に削除されました。

何が悪いのですか?

回答:


9

あなたの質問への答えは間違いなくノーです、customer_logged_inもはやハンドルはありません、私はコードを掘り下げて、トリックをすることができるレイアウトハンドルを見つけることができませんでした。

その上に\dev\tests\static\testsuite\Magento\Test\Legacy\LayoutTest.php、次のコードがあります。

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

これcustomer_logged_inは、レイアウトハンドルが廃止されたことを明確に示しています。

Magento 2で現在行われている方法の説明については、Fabianの回答を参照してください。


1
これらのイベントは、すべてのリクエストごとではなく、顧客がログインしたときとログアウトしたときにトリガーされます。
Fabian Schmengler 2016年


8

他の人が指摘したように、これらのハンドルはなくなっています。Magento_Customerモジュールを見ると、登録リンクのようなブロックは常に追加されいますが、顧客がログインしている場合はレンダリングされないことがわかります。これは、ログイン状態に応じて要素を条件付きで表示するための推奨される方法です。

しかし、これは、他の場所で定義された名前に基づいてブロックを削除するための解決策ではありません。顧客がログインしlayout_load_beforeている$layout->addHandle('customer_logged_in')場合は、そのコールのオブザーバーを使用して機能を再作成できます。


お返事をありがとうございます。もちろん、カスタムモジュールにハンドルを追加することを検討しました。しかし、それはスパイクのように見える可能性があり、よりネイティブな方法を使用したいと思いました。説明と例をありがとう
zhartaunik '15 / 03/16

0

これは非常に愚かです。ブロック/テンプレート/リソースをロードする必要があるのは、logginやloggoutだけでなく、顧客のみが許可を得ている場合です。しかし、ユーザーにこれを表示する権限があるかどうかを確認するには、1000行のコードを記述する必要があります。ただただ美しい。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.