Opencart 3.0.3.2搭配Journal 3主题未登录跳转注册页失效求方案
OpenCart 3.0.3.2 + Journal3 未登录跳转失效解决方案
一、结账页未登录跳转修复
失效原因
- 原有代码是OpenCart 2.x版本的语法,OpenCart 3.x的跳转方法已变更
- Journal3主题会重写默认的checkout核心控制器路由,部分场景下不会加载默认
catalog/controller/checkout/checkout.php的逻辑 - Journal3自带的页面缓存、路由缓存会拦截原生控制器的执行
修复步骤
- 优先查找Journal3自定义的结账控制器,路径通常为
catalog/controller/journal3/checkout.php,在控制器的index方法最开头插入如下代码:
if (!$this->customer->isLogged()) { $this->session->data['redirect'] = $this->url->link('checkout/cart', '', true); $this->response->redirect($this->url->link('account/login', '', true)); }
注意:OpenCart 3.x中
$this->redirect已废弃,统一替换为$this->response->redirect,SSL参数用布尔值true代替原空字符串写法
- 如果找不到Journal3自定义结账控制器,可通过OCMOD扩展将跳转逻辑注入到默认checkout控制器的执行前事件,避免修改核心文件
- 修改完成后清空Journal3主题缓存、OpenCart系统缓存、浏览器缓存后测试
二、点击加入购物车未登录跳转实现
实现步骤
- 找到加购逻辑对应的控制器文件,默认路径为
catalog/controller/checkout/cart.php,如果Journal3重写了加购逻辑,路径为catalog/controller/journal3/cart.php - 找到文件中的
add方法,在方法最开头插入如下适配逻辑:
if (!$this->customer->isLogged()) { // 处理普通请求跳转 if (!$this->request->is_ajax()) { $this->session->data['redirect'] = $this->url->link('product/product', 'product_id=' . $this->request->post['product_id'], true); $this->response->redirect($this->url->link('account/login', '', true)); } else { // 处理Journal3 AJAX加购场景,返回跳转地址给前端处理 $json['redirect'] = $this->url->link('account/login', '', true); $this->response->addHeader('Content-Type: application/json'); $this->response->setOutput(json_encode($json)); exit; } }
- 若AJAX场景下仍不跳转,可在Journal3主题的加购JS逻辑中添加判断,当返回结果存在
redirect字段时,直接执行window.location.href = result.redirect即可
内容的提问来源于stack exchange,提问作者Koutaiba Altellawi
相关产品推荐
相关产品推荐

