OpenCart 2.3.X产品页判断用户登录控制产品型号显隐的问题
错误原因
你将登录状态变量定义在了公共头部控制器controller/common/header.php中,但产品详情页模板product.tpl是由controller/product/product.php控制器独立渲染的,不同控制器的$data变量作用域互相独立,无法跨控制器传递到非对应模板中,因此product.tpl会提示logged变量未定义。
正确修改步骤
- 第一步:编辑产品页专属控制器
打开路径catalog/controller/product/product.php,在模板渲染代码(也就是文件末尾的$this->response->setOutput($this->load->view('product/product', $data));)之前,任意位置插入以下代码:
$data['logged'] = $this->customer->isLogged();
推荐插入到$data['model'] = $product_info['model'];这行代码的附近,方便后续维护查找。
- 第二步:确认模板代码无需额外调整
你之前在product.tpl中编写的登录判断代码本身没有错误,不需要修改:
<?php if ($logged) { ?> <li><?php echo $text_model; ?> <?php echo $model; ?></li> <?php } ?>
- 第三步:清除缓存生效
修改完成后进入Opencart后台,点击右上角齿轮样式的设置图标,分别清除主题缓存、SASS缓存,如果启用了vQmod/OCmod还要清除对应扩展缓存,刷新前端页面即可生效。
可选全局配置方案
如果你需要在全站多个前端模板中都调用登录状态,不想逐个控制器添加变量,可以通过Opencart的事件系统注册全局变量,避免重复代码。
内容的提问来源于stack exchange,提问作者Steven Lutz
相关产品推荐
相关产品推荐

