index.php
ECMall::startup() //ecmall.php

object //所有类的基础类 ecmall.php
BaseApp //控制器基础类 app.base.php
ECBaseApp //ecapp.base.php
FrontendApp //前台控制器基础类 frontend.base.php
MallbaseApp //商城控制器基类 frontend.base.php
default.app.php //以上的类是defaultApp类的父类

根目录表示@(在这表示wwwroot/ecmall)
@index.php(根目录下的index.php文件,即wwwroot/ecmall/index.php)

@index.php(加载配置文件config.inc.php和核心文件ecmall.php)
=>ECMall::startup();
=>ecmall.php
=>startup();
=>require(ROOT_PATH.'/app'."/{$app}.app.php");(加载控制器,默认为default.app.php)
=>do_action();(DefaultApp类的方法)
=>default.app.php
=>do_action();(do_action在,defaultApp父类MallbaseApp的父类FrontendApp的父类ECBaseApp中,
其中类MallbaseApp和类FrontendApp在frontend.base.php文件中,ECBaseApp类在ecapp.base.php文件中)
=>parent::do_action();(即类ECBaseApp的父类BaseApp的成员函数do_action()(不是静态成员,若为静态成员parent改为类名),
其中BaseApp类在app.base.php文件中)
=>_run_action();
=>$this->$action();($action=$this->_curr_action,在这是等于index)

deault.app.php(DefaultApp类)
=>index();
=>$this=>assign();
=>app.base.php(BaseApp类)
=>assign();
=>_init_view();
=>$this->_view=& v();
=>ecmall.php(object类)
=>& v();(加载了/eccore/view/template.php,ecsTemplate类)
=>app.base.php(BaseApp类)
=>$this->_view->assign();(此时的$this->_view为ecsTemplate类的一个实例)
=>template.php(ecsTemplate类)
=>assign();
=>$this->_var[$key]=$val;

> default.app.php(DefaultApp类)
=>display()
=>frontend.base.php
=>display()

seo(即title,description,keywords)
$this->_config_seo(array('title'=>'...',...));//设置title标签的
=>ecapp.base.php(ECBaseApp类)
=>_config_seo();
=>_assign_seo();
=>_get_seo_code();//生成html代码,如$html.="<{$type}>{$info}</{$type}>";

frontend.base.php(FrontendApp类,line 17-18)
加载lang配置文件,
Lang::load(lang_file('common));
//加载了每个应用的配置
Lang::load(lang_file(APP));
ecmall.php()
=>lang_file();ROOT_PATH . '/languages/' . LANG . '/' . $file . '.lang.php';(config.inc.php中'LANG'=>'sc-utf-8')
ecapp.base.php(ECBaseApp类)
=>加载了Conf配置,在line 114,Conf::load($setting->getAll());

初始化方向
ecmall.php(122,require($app_file,如default.app.php))
=>default.app.php(DefaultApp类)
=>frontend.base.php(类MallbaseApp和类FrontendApp)
=>MallbaseApp
=>FrontendApp
Lang::load(lang_file('common'));
Lang::load(lang_file(APP));
=>ecapp.base.php(ECBaseApp类)
=>ECBaseApp
->$setting=af();加载了/includes/arrayfile.base.php和/include/arrayfiles/$type(如,settings).arrayfile.php
->$setting->getAll();执行了settings.arrayfile.php中get_default()和arrayfile.base.php中的_loadfromfile();
$this->_init_visitor();(Line116)(但执行了frontend.base.php中的FrontendApp类的成员函数_init_visitor(),跟
frontend.base.php中的类UserVisitor和ecapp.base.php中的类BaseVisitor相关)
=>app.base.php(BaseApp类)
=>BaseApp
$this->_init_session();//$GLOBALS['EC_ENV']
=>ecmall.php(object类)

ecapp.base.php(line 146)
env('session',$this->_session);//实现$GLOBALS['EC_ENV']['session']=$this->_session;

app.base.php()
->display
->_init_view();
->_config_view();//ecapp.base.php

模板文件夹themes/mall/default
控制器存放文件夹/app
模板编译文件夹temp/compiled

default.app.php(display())
=>template.php()
->display();
->fetch();
->make_compiled();
->fetch_str();
->smarty_prefilter_preCompile(); //去除<!-- -->,提取{}里面的内容,把它发送到select();函数中去
->select(); //解析{}里面内容

login.html
有一表单action属性的值为空则当前action的值为当前窗口的url

登陆验证码
settings.arrayfile.php
需'captcha_status'=>array('login'=>1),默认是空数组
FrontendApp::login();
if(Conf::get('captcha_status.login')){$this->assign('captcha',1);}
login.html
包含如下代码,即$captcha为真时,则显示验证码代码,为非真时则不执行验证码代码
< !--{if $captcha}-->
<tr><td>{$lang.captcha}:</td>
< td><input type="text" name="captcha" class="text" id="captcha1" />
< span><a href="javascript:change_captcha($('#captcha'));" class="renewedly">
< img id="captcha" src="index.php?app=captcha&{$random_number}" /></a>
< /span></td>
< /tr>
< !--{/if}-->

模型
ecmall.php
& db();创建MySql数据库对象实例
include_once(ROOT_PATH.'/eccore/model/mysql.php');
return new cls_mysql();
& m();获得一个模型
ROOT_PATH.'/includes/models/'.$model_name.'.model.php';
return new $model_name($params,db());

global.lib.php
& ms();会员系统连接接口
include(ROOT_PATH.'/includes/passport.base.php')
//config.inc.php,MEMBER_TYPE=>'default',default(使用内置的用户系统)
include(ROOT_PATH.'/include/passports/'.MEMBER_TYPE.'.passport.php');
return new ucfirst(MEMBER_TYPE).'Passport';

联接
自定模型属性$_relation=array();

在某模块中查询数据,如$this->_user_mod->find(array(..,'join'=>'..,..',..));
BaseModel::find();
$this->_joinModel($tables,$join);
$this->_getJoinString($_im);

$_relation['dependent']='true'。如果该在member模型定义与store模型关系。则意思即,store属于(belong to)member。
store模型对参考模型的依赖,删除时用到

has_one,belongs_to 在自定义模型设置的模型关系。区别在BaseModel::_getJoinString();函数中,如果是HAS_ONE,
则$refer_key=$this->$prikey;如果是BELONGS_TO,则$refer_key=$model->$prikey; $prikey是在自定义模型里设置的变量,$this和$model分别是这两个模型
关系分别关联的模型的实例的引用

reverse,是在type为belongs_to关系中,值是为一个自定模型的关系名称。如果在member.model.php有$_relation(..,'manage_store'=>array('model'=>'store','reverse'=>'be_manage',..),..);
则M('store')的$_relation属性中就有be_manage关系。

has_one
本表参考键=外表外键
belongs_to
本表外键=外表参考键
has_and_belongs_to_many
本表主键=中间表外键

中间表意思就是这个表是两个表之间的关系表,如会员表跟角色表的关系表就是中间表,这个表必须包含有这两个表的主键,如果会员表
名为user而角色表名为role则中间表为user_role

后台的登陆页,/ecmall/admin/index.php
=>ECMall::startup();
=>ecmall.php
=>startup();
=>require(dirname(__FILE__).'/app'."/{$app}.app.php");(加载控制器,默认为default.app.php)
=>do_action();(do_action在,defaultApp父类MallbaseApp的父类FrontendApp的父类ECBaseApp中,
其中类MallbaseApp和类FrontendApp在frontend.base.php文件中,ECBaseApp类在ecapp.base.php文件中)
=>app.base.php
=>do_action();ECBaseApp类父类BaseApp的方法)
=>backend.base.php
=>_run_action();
=>$this->login();或parent::_run_action();(ecapp.base.php)

***********************************************************************************************************************

模板
显示挂件
template::display_widgets();
FrontendApp::display_widgets();
include_once '/includes/widget.base.php';
& widget(); //widget.base.php
include_once('external/widgets/'.$name.'/main.widget.php'); //$name值如,notice
return new $name.'Widget'();
BaseWidget::BaseWidget();
$this=id,widget_path,widget_root,_view,_view->lib_base,options;
assign=options,widget_root,id,name
$widget->display(); //frontendApp::display_widgets();$widget=new $name.'Widget'();
BaseWidget::display();
echo BaseWidget::get_contents();
BaseWidget::get_contents();
NoticeWidget::_get_data();
assgin=widget_data,options,widget_root
BaseWidget::_wrap_contents();

***********************************************************************************************************************
eccore/ecmall.php
class Object function _error($msg,$obj=''); //eccore/model/model.base.php中有实例

研究ecmall一些流程、结构笔记 (转)的更多相关文章

  1. 分享一下我研究SQLSERVER以来收集的笔记

    分享一下我研究SQLSERVER以来收集的笔记 前言 为什麽分享??因为像现在网上很多人攻城师那样,转行去卖水果,卖早餐,总有一日我也会离开这个行业的 由于本人不是在大公司上班工资很低,我希望有一天存 ...

  2. 【转】《分享一下我研究SQLSERVER以来收集的笔记》未整理

    分享一下我研究SQLSERVER以来收集的笔记 http://www.cnblogs.com/lyhabc/archive/2013/07/27/3219117.html

  3. 【粗糙版】javascript的变量、数据类型、运算符、流程结构

    本文内容: javascript的变量 javascript的数据类型 javascript的运算符 javascript的流程结构 首发日期:2018-05-09 javascript的变量 创建变 ...

  4. MySQL学习之流程结构

    流程结构 流程结构:代码的执行顺序. if分支 根据要求选择合适的执行部分. 基本语法 if在MySQL中有两种基本用法 1.用在select查询当中,当作一种条件来进行判断. 基本语法:if(条件, ...

  5. C语言基础知识-程序流程结构

    C语言基础知识-程序流程结构 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.概述 C语言支持最基本的三种程序运行结构:顺序结构,选择结构,循环结构. 顺序结构:程序按顺序执行, ...

  6. Go流程结构(for)

    一.程序的流程结构 程序的流程控制结构一共有三种:顺序结构,选择结构,循环结构. 顺序结构:代码从上向下逐行的执行 选择结构:条件满足,某些代码才会被执行.0-1次 if语句,switch语句 循环结 ...

  7. Go流程结构(if)

    一.程序的流程结构 程序的流程控制结构一共有三种:顺序结构,选择结构,循环结构. 顺序结构:从上向下,逐行执行. 选择结构:条件满足,某些代码才会执行.0-1次 分支语句:if,switch,sele ...

  8. 巨细靡遗流程控制,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang流程结构详解EP09

    流程结构就是指程序逻辑到底怎么执行,进而言之,程序执行逻辑的顺序.众所周知,程序整体都是自上由下执行的,但有的时候,又不仅仅是从上往下执行那么简单,大体上,Go lang程序的流程控制结构一共有三种: ...

  9. VerilogHDL概述与数字IC设计流程学习笔记

    一.HDL的概念和特征 HDL,Hard Discrimination Language的缩写,翻译过来就是硬件描述语言.那么什么是硬件描述语言呢?为什么不叫硬件设计语言呢?硬件描述语言,顾名思义就是 ...

随机推荐

  1. OpenCL双边滤波实现美颜功能

    OpenCL是一个并行异构计算的框架,包括intel,AMD,英伟达等等许多厂家都有对它的支持,不过英伟达只到1.2版本,主要发展自己的CUDA去了.虽然没有用过CUDA,但个人感觉CUDA比Open ...

  2. 在Linux下安装JDK环境

    解压java安装包到指定目录下,这里为/data/software/java/, 然后在/etc/profile添加以下内容: JAVA_HOME =/data/software/java/jdk1. ...

  3. linux杀毒软件clamav安装与使用

    #clamav安装与使用 ###第一步:Clamav下载http://www.clamav.net/downloads wget http://www.clamav.net/downloads/pro ...

  4. 淘宝TDDL深入浅出

    前言 在开始讲解淘宝的 TDDL(Taobao Distribute Data Layer) 技术之前,请允许笔者先吐槽一番.首先要开喷的是淘宝的社区支持做的无比的烂, TaoCode 开源社区上面, ...

  5. certbot以standalone方式新建密钥

    下载:wget https://dl.eff.org/certbot-auto 授权:chmod a+x ./certbot-auto 快捷命令 ./certbot-auto certonly --t ...

  6. The disadvantage for manager has a part-time job as a trainer

    At present, most companies with in-house trainers take the development model of "full-time trai ...

  7. FairyGUI编辑器制作Unity3D UI值得借鉴

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...

  8. 从JDK源码角度看Object

    Java的Object是所有其他类的父类,从继承的层次来看它就是最顶层根,所以它也是唯一一个没有父类的类.它包含了对象常用的一些方法,比如getClass.hashCode.equals.clone. ...

  9. shell脚本中执行sql的例子

    这个例子演示了如何在shell脚本中执行多个sql来操作数据库表. #! /bin/sh USER_HOME=/home/`whoami` . /etc/profile if [ -f ${USER_ ...

  10. BJOI 模拟赛 #3 题解

    T1 一个网格,每个点有权值,求有多少条路径权值乘积不小于 $n$ $R,C \leq 300, n \leq 10^6$ sol: 暴力 dp 是 $O(R \times C \times n)$ ...