我们的使命

助力跨境卖家高效建立全球销售网络

喜报2021年我司获《江苏省国家高新技术企业》认定

分类目录

文章标签

热门推荐

相关咨讯

opencart前台编辑,magento控制器

2022-09-16 10:05:48 - 米境通跨境电商

    

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

    1.MVCL

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

    opencart

    |--admin

    |--catalog

    |----controller

    |----language

    |----model

    |----view

    |--image

    |--system

    |--index.php

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

    2.注册树模式

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

    finalclassRegistry{

    private$data=array();

    publicfunctionget($key){

    return(isset($this->data[$key])?$this->data[$key]:null);

    }

    publicfunctionset($key,$value){

    $this->data[$key]=$value;

    }

    publicfunctionhas($key){

    returnisset($this->data[$key]);

    }

    }

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

    //Registry

    $registry=newRegistry();

    //Loader

    $loader=newLoader($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.前端控制器(FrontController)、路由和输出

    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中

    publicfunctionview($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:Couldnotloadtemplate'.$file.'!');

    exit();

    }

    }

    publicfunctionsetOutput($output){

    $this->output=$output;

    }

    b.入口文件最后一句,$response->output();输出
    联系我们
  • 24H客服
  • 联系电话:16651690460(龙经理)
  • 微信咨询:
南京天遥路联网络科技有限公司,版权所有 Copyright By ©米境通ERP4.0,2015-2025,苏ICP备:苏ICP备15044100号-4, 苏公网安备:32011402011043