Magento 2:如何使用布局句柄customer_logged_in?


9

Magento 2是否具有诸如customer_logged_in这样的句柄?如果可以,该如何使用?

我试图创造

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

并添加到那里 <referenceBlock name="content" remove="true" />

但是内容块并未删除。我将句柄文件重命名为默认文件,并且块已成功删除。

我究竟做错了什么?

Answers:


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布局句柄现在已过时。

请参阅Fabian的答案以获取有关如何在Magento 2中完成操作的说明。


1
这些事件在客户登录注销时触发,而不是针对每个请求触发。
Fabian Schmengler,


8

正如其他人指出的那样,这些句柄现在不见了。如果查看Magento_Customer模块,将会看到总是添加了诸如注册链接之类的块,但是如果客户已登录则不会呈现它们。现在看来,这是根据登录状态有条件地显示元素的首选方式。

但是,这不是一种根据块的名称删除块(在其他位置定义)的解决方案。如果客户已登录,则可以使用layout_load_before该调用的观察者来重新创建功能$layout->addHandle('customer_logged_in')


感谢您的答复。当然,我想过在我的自定义模块中添加句柄。但这看起来像秒杀,我想使用更多的本机方式。感谢您的解释和示例
zhartaunik

0

这很愚蠢。我只需要加载块/模板/资源客户的权限,而不仅仅是loggin或loggout。但是我需要编写1000行代码来检查用户是否具有查看权限。真漂亮。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.