Opencart2.0-模式结构

用了一年的Opencart,总觉得要记下点什么。一方面检验一下自己对这个开源程序的理解程度,另一方面是作个笔记,以备不时之需!

1.MVCL

  MVC算是老生常谈了,opencart里多了一个语言层 L ,在目录里看起来是这样的:

  

opencart
 |--admin
 |--catalog
       |----controller
       |----language
       |----model
       |----view
 |--image
 |--system
 |--index.php

  opencart是网站根目录,catalog前台,system核心文件。这样的结构目录看起来一目了然

  

2.注册树模式

  opencart的核心架构运用的是注册树模式,registry.php

final class Registry {
	private $data = array();

	public function get($key) {
		return (isset($this->data[$key]) ? $this->data[$key] : null);
	}

	public function set($key, $value) {
		$this->data[$key] = $value;
	}

	public function has($key) {
		return isset($this->data[$key]);
	}
}

  入口文件index.php 中则这样:

// Registry
$registry = new Registry();

// Loader
$loader = new Loader($registry);
$registry->set(‘load‘, $loader);

  把所有核心文件的实例都保存在Registry对象中,其结果就是Registry对象像一颗巨大的树,包含了所有控制结构的对象,然后,

  在控制器中加载语言包这样的:

1 $this->load->language(‘checkout/cart‘);  

  加载模型是这样的:

$this->load->model(‘catalog/product‘);

  接收表单参数这样的:

$this->request->post[‘quantity‘]

  加载配置文件:

$this->config->get(‘config_template‘)

  加载模版:

$this->load->view(‘default/template/error/not_found.tpl‘, $data)

  这样的好处是我们在处理业务逻辑的时候可以以这样的方法调用任意模版、模型、配置文件、第三方类库等。虽然看起来这样加载显得冗余,且大多数时候也确实不需要这么多的类库,但是opencart的核心文件非常小巧,这样的设计我觉得还是比较高效的。

3. 前端控制器(Front Controller)、路由和输出

  3.1  在控制器目录controller/common中有两个特殊的控制器类 maintenance.php和seo_url.php 每次有url请求时在入口处都是先加载这两个类,这两个类的2个作用:

    a.劫取每次请求的url并重新处理,当然也可以不处理url,具体在配置文件中配置

    b.类似钩子,配合接下来的路由选择分发

  3.2  路由

    a. front.php负责分发(dispatch),并用maintenance.php或seo_url.php去调用action.php类

    b. action.php获取当前请求的url,实例化并执行

  3.3 输出

    a.打开缓冲区, 把当前控制器的$data变量和对应的模版全部输出,并保存在Response.php类的私有变量$output中

public function view($template, $data = array()) {
        $file = DIR_TEMPLATE . $template;

        if (file_exists($file)) {
            extract($data);

            ob_start();

            require($file);

            $output = ob_get_contents();

            ob_end_clean();

            return $output;
        } else {
            trigger_error(‘Error: Could not load template ‘ . $file . ‘!‘);
            exit();
        }
    }
public function setOutput($output) {
    $this->output = $output;
}

    b.入口文件最后一句,$response->output();输出

时间: 2024-08-25 12:40:27

Opencart2.0-模式结构的相关文章

数据库的三级模式结构

数据库的三级模式结构 外模式.模式.内模式 数据库的两级映像

Email5.0 代码结构

Email5.0 代码结构 1核心接口IEmailService IEmailService是Email的核心接口.定义了Email的基本功能.如发送邮件(sendmail),下载附件(loadAttachment),同步(sync)搜索邮件(searchMessages)等.EmailServiceStub实现了IEmailService接口.主要实现POP3和IMAP邮箱共同的一些方法.EmailServiceStub为抽象类,它有两个子类.这两个子类分别是POP3邮箱和IMAP邮箱对该接口

数据库中的三级模式结构

模式(Schema)是数据库中全体数据的逻辑结构和特征的描述,又称概念模式或概念视图.视图可理解为一组记录的值,用户或程序员看到和使用的数据库的内容. 模式处于三级结构的中间层,它是整个数据库实际存储的抽象表示,也是对现实世界的一个抽象,是现实世界某应用环境(企业或单位)的所有信息内容集合的表示,也是所有个别用户视图综合起来的结果,所以又称用户共同视图. 所谓模式是指用数据描述语言精确定义的数据模型.数据模式的三个层次:外部层.概念层和内部层,构成数据库系统的三级模式结构,不管数据库管理系统的功

风险评估DNV GL AS Phast v7.11.33.0/海洋结构物强度分析DNV sesam suite 2013海洋结构物强度分析

风险评估DNV GL AS Phast v7.11.33.0/海洋结构物强度分析DNV sesam suite 2013海洋结构物强度分析DNV Phast Risk v6.7-ISO 1DVDDNV Phast v6.7-ISO 1DVD 最新6.7版本 全功能无限制DNV sesam suite 2013 Full 1CD包含新的 DeepC .GeniE和HydroD模块.DNV sesam Genie 2013 Full 1CD(用于评估无航速浮体流体动力性能的计算软件)DNV Soft

Android 4.0 源代码结构

21.Android 4.0 源代码结构 Android源码的第一级目录结构 Android/abi (abi相关代码.ABI:application binary interface,应用程序二进制接口) Android/bionic(bionic C库) Android/bootable(启动引导相关代码) Android/build(存放系统编译规则及generic等基础开发配置包) Android/cts(Android兼容性测试套件标准) Android/dalvik(dalvik J

琐碎-hadoop2.2.0目录结构

之前了解了一下0.20.2和1.1.0.以后现在主流肯定是2.x吧,包含了之前没有的yarn bin Hadoop最基本的管理脚本和使用脚本,这些脚本是sbin目录下管理脚本的基础实现,用户可以用这些脚本管理和使用hadoop etc hadoop配置文件所在的目录,包括core-site.xml.hdfs-site.xml.mapred-site.xml等从hadoop1.0继承而来的配置文件和yarn-site.xml等hadoop2.0新增的文件..template是模板文件 相当于之前版

Bentley.ProSteel.3D.v18.0.Rev.8.10.0.9结构软件.

Delft3D 3.23 (河口海岸数值模拟) Delft3D,V3.23,最好的水数值模拟软件\ FastCAM.v6.0-ISO 1CD(数控切割编程套料软件)\ Flow2000 v5.3 1CD(最好的高聚物挤出过程分析软件)\ Flow2000 v6.2 1CD(最好的高聚物挤出过程分析软件) \ maxsurf 中文教程手册\ PROFILE_MASTER_2000_CAM-DUCT_v2.26.050 风管展开软体 pm2000\ PVelite 2006 压力容器设计和分析软件

Android 5.0 源代码结构

本节书摘来自异步社区<深入理解Android 5 源代码>一书中的第2章,第2.2节分析Android源代码结构,作者 李骏. 网址:https://yq.aliyun.com/articles/93279?spm=5176.100239.blogcont93310.17.gtBsUg 2.2 分析Android源代码结构 获得Android 5.0源代码后,源代码的全部工程分为以下3个部分. Core Project:核心工程部分,这是建立Android系统的基础,被保存在根目录的各个文件夹

THINKPHP 5.0目录结构

目录结构 下载最新版框架后,解压缩到web目录下面,可以看到初始的目录结构如下: project 应用部署目录 ├─application 应用目录(可设置) │ ├─common 公共模块目录(可更改) │ ├─index 模块目录(可更改) │ │ ├─config.php 模块配置文件 │ │ ├─common.php 模块函数文件 │ │ ├─controller 控制器目录 │ │ ├─model 模型目录 │ │ ├─view 视图目录 │ │ └─ ... 更多类库目录 │ ├─c

七、适配器(Adapter)模式--结构模式(Structural Pattern)

适配器模式:把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作. 类的 Adapter模式的结构: 类适配器类图: 由图中可以看出,Adaptee 类没有 Request方法,而客户期待这个方法.为了使客户能够使用 Adaptee 类,提供一个中间环节,即类Adapter类, Adapter 类实现了 Target 接口,并继承 自 Adaptee,Adapter 类的 Request 方法重新封装了Adaptee 的SpecificRequ