You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:36:03