关于OpenCart的一个小建议

简介: OpenCart是一套老牌的开源自由B2C电商系统,最近watch了其托管在在github上的项目,发现还是很活跃的,每天都有人反馈bug。初步的看一下,它是支持在后台管理多个店铺的,而且可以同一个商品在不同店铺有不同的价格;店铺之间可以绑定不同的域名。

OpenCart是一套老牌的开源自由B2C电商系统,最近watch了其托管在在github上的项目,发现还是很活跃的,每天都有人反馈bug。

初步的看一下,它是支持在后台管理多个店铺的,而且可以同一个商品在不同店铺有不同的价格;店铺之间可以绑定不同的域名。这是一个比较有特色的地方。

但查看它的代码,就发现多年来改动很小,在代码的分工上,没有进化的感觉。

大量本该由视图来进行构造的数据如语言、链接、当前路径等,都放到控制器中,

像前台登录页面:

$data['breadcrumbs'] = array();

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('text_home'),
            'href' => $this->url->link('common/home')
        );

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('text_account'),
            'href' => $this->url->link('account/account', '', 'SSL')
        );

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('text_login'),
            'href' => $this->url->link('account/login', '', 'SSL')
        );

        $data['heading_title'] = $this->language->get('heading_title');

        $data['text_new_customer'] = $this->language->get('text_new_customer');
        $data['text_register'] = $this->language->get('text_register');
        $data['text_register_account'] = $this->language->get('text_register_account');
        $data['text_returning_customer'] = $this->language->get('text_returning_customer');
        $data['text_i_am_returning_customer'] = $this->language->get('text_i_am_returning_customer');
        $data['text_forgotten'] = $this->language->get('text_forgotten');

        $data['entry_email'] = $this->language->get('entry_email');
        $data['entry_password'] = $this->language->get('entry_password');

        $data['button_continue'] = $this->language->get('button_continue');
        $data['button_login'] = $this->language->get('button_login');

        if (isset($this->error['warning'])) {
            $data['error_warning'] = $this->error['warning'];
        } else {
            $data['error_warning'] = '';
        }

        $data['action'] = $this->url->link('account/login', '', 'SSL');
        $data['register'] = $this->url->link('account/register', '', 'SSL');
        $data['forgotten'] = $this->url->link('account/forgotten', '', 'SSL');

相当累赘,其实在现有框架特性下,完全可以放到视图文件中去的。

在视图文件的头部:

<?php

$lang = $this->registry->get('language');//加载语言包管理对象
$url = $this->registry->get('url');//加载url对象

$this->language('common/footer');//载入语言包

?>
<footer>
  <div class="container">
    <div class="row">
      <?php if ($informations) { ?>
      <div class="col-sm-3">
        <h5><?php echo $lang->get('text_information'); ?></h5>
        <ul class="list-unstyled">
          <?php foreach ($informations as $information) { ?>
          <li><a href="<?php echo $information['href']; ?>"><?php echo $information['title']; ?></a></li>
          <?php } ?>
        </ul>
      </div>
      <?php } ?>

这样控制器中就不用再管这种无聊的事情,而集中精力负责业务逻辑和核心数据的调用了。

2016-09-17 注:

不记得当时是怎么走通的了,最新的2.3.系列中视图已经无法访问registry对象,需要做一些改造:

代码详见:https://github.com/web3d/yuncart/commit/923fb3257fb313fc7ce9b6ba379d1fb3176246cd

最终的用法,详见代码:

https://github.com/web3d/yuncart/commit/21bf845ffc31c4d724df1fc08d0f91cba353303d

改造后,虽然可以访问registry容器中所有组件,但建议只使用与视图相关的一些组件,如language、url、document。

目录
相关文章
|
数据处理 对象存储
如何利用 OSS 转换 webp 文件为jpeg
如何利用 OSS 转换 webp 文件为jpeg,OSS 样式使用
2041 1
|
存储 弹性计算 Kubernetes
自建K8S通过PVC配置NAS动态磁盘要点回顾
在K8S上如何配置永久性PVC是大家在生产环境中比较关心的话题,那么如果通过阿里云的NAS来结合进行永久性磁盘的配置呢?本文通过其详细步骤和要点把成功配置的方法给大家做一个分享。本文不做理论性阐述,纯实战,有不严谨之处还望评论指正。
1466 0
自建K8S通过PVC配置NAS动态磁盘要点回顾
|
2月前
|
安全 测试技术
更睿智的看世界!实测阿里首个多模态视觉推理模型QVQ-72B-Preview
阿里通义千问Qwen团队于12月25日推出首个开源视觉推理模型QVQ-72B-Preview,该模型在数学、物理、化学等领域表现出色,在MMMU基准测试中得分70.3,超越Qwen2-VL-72B-Instruct。尽管在部分任务如立体图形计数上存在局限性,QVQ-72B-Preview仍展示了强大的视觉理解和推理能力。模型目前仅支持单轮对话和图像输出,不支持视频输入。地址:https://modelscope.cn/studios/Qwen/QVQ-72B-preview
|
开发工具 git 缓存
Git忽略规则.gitignore不生效
在项目开发过程中个,一般都会添加 .gitignore 文件,规则很简单,但有时会发现,规则不生效。 原因是 .gitignore 只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
58020 4
|
9月前
|
网络协议 算法 Linux
【嵌入式软件工程师面经】Linux网络编程Socket
【嵌入式软件工程师面经】Linux网络编程Socket
241 1
|
5月前
|
弹性计算 人工智能 运维
Terraform从入门到实践:快速构建你的第一张业务网络(上)
本次分享主题为《Terraform从入门到实践:快速构建你的第一张业务网络》。首先介绍如何入门和实践Terraform,随后演示如何使用Terraform快速构建业务网络。内容涵盖云上运维挑战及IaC解决方案,并重磅发布Terraform Explorer产品,旨在降低使用门槛并提升用户体验。此外,还将分享Terraform在实际生产中的最佳实践,帮助解决云上运维难题。
278 1
Terraform从入门到实践:快速构建你的第一张业务网络(上)
|
7月前
|
运维 监控 测试技术
5个常见运维场景,用这几个Python脚本就够了!
5个常见运维场景,用这几个Python脚本就够了!
135 0
|
7月前
|
监控 安全 网络安全
非军事区 (DMZ) 在网络安全中的概念
【8月更文挑战第27天】
266 0
|
10月前
|
前端开发 JavaScript 算法
【web前端技术】响应式画廊Gallery插件-Justified-Gallery
【web前端技术】响应式画廊Gallery插件-Justified-Gallery
254 0
|
9月前
|
机器学习/深度学习 存储 人工智能
数据驱动决策:技术背后的智慧
在当今信息爆炸的时代,数据驱动的决策正在成为各行各业的关键。本文探讨了数据技术如何在现代商业环境中发挥作用,以及如何利用数据分析来优化决策过程,从而提高效率和准确性。
243 2