关于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。

目录
相关文章
|
开发工具 git 缓存
Git忽略规则.gitignore不生效
在项目开发过程中个,一般都会添加 .gitignore 文件,规则很简单,但有时会发现,规则不生效。 原因是 .gitignore 只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
49403 4
|
数据建模 Linux 数据库
简单实用的数据建模工具PDManer
PDManer是一款开源的国产数据建模工具
9942 0
简单实用的数据建模工具PDManer
|
JavaScript
Element el-radio 单选框详解
本文目录 1. 用途 2. 单选框 3. 单选框样式 4. 单选框组 4. 单选框组样式 5. 尺寸调节 6. 绑定值变化事件 7. 小结
1354 0
Element el-radio 单选框详解
|
7月前
|
Linux PHP
百度搜索:蓝易云【deepin系统安装php8教程。】
现在您已成功在Deepin系统上安装了PHP 8。请注意,这些步骤适用于Deepin系统,如果您使用的是其他Linux发行版,请查阅相应的文档或指南进行操作。
211 0
|
11月前
|
算法 测试技术 Python
算法分析:阿拉伯数字与罗马数字的互相转换
算法分析:阿拉伯数字与罗马数字的互相转换
105 0
|
11月前
开源qms质量管理系统
主要有:ERPNext、Odoo、Dolibarr、iDempiere、Openbravo
340 0
|
10月前
|
缓存 JavaScript 前端开发
从 Vue 转换看 Webpack 和 Vite 代码转换机制的差异
从 Vue 转换看 Webpack 和 Vite 代码转换机制的差异
117 0
|
JavaScript
(踩坑篇)vue element-ui resetForm()表单重置失效的问题
好久没更新了,最近在折腾Vue,没用啥时间更新博客。 但是,今天帮朋友看问题时踩到一个坑。 项目时若依的后台管理,有一个数据搜索框,如下(因为部分原因不能展示整个页面)。
943 0
|
Ubuntu NoSQL Linux
查看linux操作系统版本:Ubuntu?Centos?还是其他?
查看linux操作系统版本:Ubuntu?Centos?还是其他?
14196 2
查看linux操作系统版本:Ubuntu?Centos?还是其他?
element-ui输入框中添加按钮
element-ui输入框中添加按钮
595 3
element-ui输入框中添加按钮