ecmall是一个基于mvc模式框架系统,跟thinkphp有点像。先从ecmall的入口开始,ecmall入口文件upload/index.php、admin.php:

index.php启动ecmall前台,启动后则进入ecmall框架核心文件ecmall.php. ecmall.php相当于一个调度中心,接收不同的控制命令(app)以及命令的相关操作(funciton),接着对其进行分配处理。然后调度中心把这些命令(app)和方法(function) 传到前台控制中心对应的具体控制器上。"控制器"接收到命令后,开始实施执行控制,接着把处理后的结果传给view模板文件(模板命名规则:appname.fucname.html)。

其中控制器接收到命令执行过程中,可以调用调度中心的模型获取方法&m()实例化一个模型,进行数据的curd操作。

index.php:

01include(ROOT_PATH .'/eccore/ecmall.php');

02/* 启动ECMall */

03ECMall::startup(array(

04'default_app'   =>'default',

05'default_act'   =>'index',

06'app_root'      =>  ROOT_PATH .'/app',

07//加载系统所需要的基础类

08'external_libs' =>array(

09ROOT_PATH .'/includes/global.lib.php',

10ROOT_PATH .'/includes/libraries/time.lib.php',

11ROOT_PATH .'/includes/ecapp.base.php',

12ROOT_PATH .'/includes/plugin.base.php',

13ROOT_PATH .'/app/frontend.base.php',

14),

15));

ecmall.php:

01class ECMall

02{

03/* 启动 */

04function startup($config =array())

05{

06/* 加载初始化文件 */

07require(ROOT_PATH .'/eccore/controller/app.base.php');//基础控制器类

08require(ROOT_PATH .'/eccore/model/model.base.php');//模型基础类

09

10if (!emptyempty($config['external_libs']))

11{

12foreach ($config['external_libs']as $lib)

13{

14require($lib);

15}

16}

17/* 数据过滤 */

18if (!get_magic_quotes_gpc())

19{

20$_GET   = addslashes_deep($_GET);

21$_POST  = addslashes_deep($_POST);

22$_COOKIE= addslashes_deep($_COOKIE);

23}

24

25/* 请求转发 */

26$default_app =$config['default_app'] ?$config['default_app'] :'default';

27$default_act =$config['default_act'] ?$config['default_act'] :'index';

28

29$app    = isset($_REQUEST['app']) ? trim($_REQUEST['app']) :$default_app;

30$act    = isset($_REQUEST['act']) ? trim($_REQUEST['act']) :$default_act;

31

32$app_file =$config['app_root'] ."/{$app}.app.php";

33if (!is_file($app_file))

34{

35exit('Missing controller');

36}

37

38require($app_file);

39define('APP',$app);

40define('ACT',$act);

41$app_class_name = ucfirst($app) .'App';

42

43/* 实例化控制器 */

44$app     =new $app_class_name();

45c($app);

46$app->do_action($act);//转发至对应的Action

47$app->destruct();

48}

49}

50

51//根据app后面所跟的参数,来判断加载对应的控制器类文件,类文件在app文件夹下,对应名称与参数相同,act后面的参数是对应控制器中的操作方法处理请求

52//而对应的动作中,会有一个判断: if (!IS_POST){请求前的页面内容的显示}else{请求后的表单处理及处理完成后的页面跳转}。其中包括使用json处理数据

53//这里需要提出的是:在控制器中:

54$this->assign('order',$order_info);//向模板页传递所需要参数的值

55$this->display('buyer_order.confirm.html');//跳转到哪个页面

56$this->json_result($new_data,'confirm_order_successed');//使用json的方式传递参数,然后在页面上使用javascript处理请求的跳转

由于这个机制,ECMALL中可以自行添加APP,模块,插件等。如何在ECMALL中添加自己的APP呢?比如访问地址为http://xxx.com/index.php?app=hello在ecmall的app目录下建立一个新的名称为hello.app.php的应用文件

在languages的sc-utf8的目录下建立对应的语言文件 hello.lang.php ,并返回数组 (若不建立,会出错)

hello.app.php中的类为HelloApp,并继承FrontendApp

此为前端程序,在ecmall的themes/mall/default文件夹下建立一个hello.index.html模板文件

重写默认的index方法,可以使用模板的方式输出:

1$h ="Hello";

2$this->assign("h",$h);

3$this->display('hello.index.html');

编写其他方法比如访问地址为http://xxx.com/index.php?app=hello&act=test

这个URL访问的名为hello的app类中的test方法,其实http://xxx.com/index.php?app=hello默认访问的是index方法。

01//1、在upload/app/下建立一个test.app.php

02<?php

03class TestAppextends MallbaseApp

04{

05public function index()

06{

07$str="hello world";

08$uc_first= ucfirst($str).'
';

09$uc_words=ucwords($str).'
';

10

11$Model=&m('goods');

12$res=$Model->get(27);

13print_r($res);

14

15

16$this->assign('ss',$uc_first);

17$this->assign('sss',$uc_words);

18$this->display('test.index.html');

19}

20}

21?>

22

23//2、在upload/languages/sc-utf-8/下建立一个test.lang.php

24<?php

25return array();

26?>

27

28//  3、在upload/themes/mall/default/建立一个test.index.html

admin.php这是启动ecmall后台。启动后也进入ecmall框架核心文件ecmall.php。之后的操作跟前台差不多,区别是调度中心把命令传给"后台"控制中心。但控制器调用的模型是同一个模型中心。

ecmall mysql调用_ECMall系统请求跳转分析相关推荐

  1. ecmall mysql调用_Ecmall MySql 数据库调用教程

    很久没有发教程和插件了,今天来一个.很多ecmall开发者问我,怎么使用Ecmall的mysql类库进行数据调用. 从原理上来讲Ecmall的数据调用是以数据模块+模块类库的方式进行mysql数据调用 ...

  2. ecmall mysql调用_ecmall二次开发 直接实例化mysql对象

    $db = &db();// 第一步赋值数据库类库, $db->query(sql);// 第二步执行mysql 语句; 常用的数据库函数: 得到一行数据 $user=$db->g ...

  3. ecmall mysql版本_ECMall的MySQL数据调用的简单方法

    很多ecmall开发者会问,怎么使用Ecmall的mysql类库进行数据调用.从原理上来讲Ecmall的数据调用是以数据模块+模块类库的方式进行mysql数据调用的,所有数据模块都存储在include ...

  4. 最简单的 post 请求发起方式、调用其它系统接口

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 调用其它系统接口,发起一个 post  请求,写法如下: import cn.com.infinit ...

  5. ecmall mysql.php_ecmall页面空白解决方案汇总

    页面空白解决方案: ------------------------------------------------------------------------------------------ ...

  6. 2020最新MySQL数据库面试题( MySQL引索系统+MySQL数据架构+红黑树结构图+B+树)

    视频参考一线互联网大佬一堂课教会你那些年,你未曾了解的MySQL索引优化 [建议收藏] '阿里高级架构师一个视频教会你MySql 各大知识点MySQL系列/ MySQL引索系统/MySQL数据架构/红 ...

  7. SSM+mysql机票订购系统-计算机毕业设计源码07780

    摘要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理.在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设机票订购系 ...

  8. 【javaWeb微服务架构项目——乐优商城day15】——会调用订单系统接口,实现订单结算功能,实现微信支付功能

    0.学习目标 会调用订单系统接口 实现订单结算功能 实现微信支付功能 源码笔记及资料: 链接:https://pan.baidu.com/s/1_opfL63P1pzH3rzLnbFiNw 提取码:v ...

  9. WPS加载项是如何实现调用业务系统JS的 WPS通信原理

    WPS加载项是如何实现调用业务系统JS的 WPS通信原理 wpssdk 一.业务系统调用WPS原理 二.WPS调用业务系统JS的原理 End 写在前面:JSAPI金山办公官方群 756432763 欢 ...

最新文章

  1. Rocksdb 的优秀代码(一) -- 工业级分桶算法实现分位数p50,p99,p9999
  2. C#中读取数据库中Image数据
  3. python安装numpy模块-python的numpy模块安装不成功简单解决方法总结
  4. k-modes算法mysql_第十一章 K-Means(K均值)算法模型实现(中)
  5. 天刀手游制作人亲笔详解制作思路
  6. SDNU 1280.就问你慌不慌(高精度)
  7. nosql的数据服务_使用NoSQL实现实体服务–第3部分:CouchDB
  8. django通过ajax请求接口返回多条数据,并动态生成表格,请求表单后将表格数据并入库
  9. 20190501-整数翻转
  10. Element-UI-的布局和容器---Element-UI工作笔记003
  11. JavaScript书籍的免费32本-收集分享
  12. [BZOJ 1212][HNOI2004]L语言(AC自动机)
  13. excel培训机构_不会excel的,不是好地产人
  14. “仿宋_GB2312、楷体_GB2312、方正小标宋简体”的下载和安装方式【实操】
  15. 学生成绩管理系统mysql数据库表,(最新整理)学生成绩管理系统数据库设计
  16. Python中整除、求余运算
  17. TreeMap排序是怎么样的?
  18. ModbusTCP协议,上位机通讯测试实例分享
  19. Centos7之清理/var/tmp目录下内容
  20. 从契约演进看区块链的变革性

热门文章

  1. 【jQuery】兼容IE6的图表插件Highcharts
  2. 让Windows XP启动更快
  3. shell脚本之正则表达式(一)---grep、egrep
  4. 使用 J-LINK 解锁芯片
  5. html5 2019新年祝福页面,2019最新创意暖心新年祝福语 简单的祝福 - 中国万年历
  6. python日志审计系统_日志审计系统
  7. android 11.0 wifi密码保存的位置
  8. android21 下载,21点APP安卓
  9. 自适应控制笔记-Persistent Excitation持续激励(1)
  10. c++自制锁机程序--两行代码