今天更新了日志,对于开发magento 2的人员有时候,为了在template里面判断客户是否登录我们常见的方法
使用\Magento\Customer\Model\Session 这个类进行判断,但是我们在block里面代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <?php namespace Sky8g\Post\Block\Catalog\Product; class Login extends \Magento\Framework\View\Element\Template { protected $_customerSession; public function __construct(\Magento\Framework\View\Element\Template\Context $context, \Magento\Customer\Model\Session $customerSession) { $this->_customerSession = $customerSession; parent::__construct($context); } /** * @return string */ public function getCustomerAjaxUrl() { return $this->getUrl('sky8g/ajax/index'); } public function isLoggedIn() { return $this->_customerSession->isLoggedIn(); } } |
然后第二步,我们创建了layout xml 配置文件如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?xml version="1.0"?> <!-- /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ --> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <body> <referenceBlock name="addtocart.shortcut.buttons"> <block class="Sky8g\Post\Block\Catalog\Product\Login" name="post.add.to.cart.login" template="Sky8g_Post::catalog/product/add_to_customer_login.phtml" after="-" /> </referenceBlock> </body> </page> |
最后我们在创建template 为add_to_customer_login.phtml在里面调用block的方法
1 | <?= $block->isLoggedIn() ?> |
然而我们登录后再刷新页面,但是没有输出 1 ,而是生命也没有输出。这是我们感到奇怪。解决的办法是我们这个template 默认是启用了cache的
所以在配置文件里面设置:加上 cacheable=”false” 这个即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?xml version="1.0"?> <!-- /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ --> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <body> <referenceBlock name="addtocart.shortcut.buttons"> <block class="Sky8g\Post\Block\Catalog\Product\Login" name="post.add.to.cart.login" template="Sky8g_Post::catalog/product/add_to_customer_login.phtml" after="-" cacheable="false" /> </referenceBlock> </body> </page> |
如果有不明告白的地方请留言。