ECMALL完整教程.doc
《ECMALL完整教程.doc》由会员分享,可在线阅读,更多相关《ECMALL完整教程.doc(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Ecmall的详细分析-系统请求跳转分析ecmall的程序的大致结构,如图所示:根据ecmall的程序结构图,你可以清楚的知道ecmall的五脏六腑!ecmall的五脏六腑然后,根据我的学习,觉得其中一些值得我学习的地方,一一提取出来,对它进行分析,与理解。做如下几个问题的处理:需要分析的问题:1、系统请求跳转分析2、数据库关系模型的实现3、登录用户信息$this-visitor-get(“user_id”)的实现4、模板解析分析5、页面json对象传输实现6、 缓存分析这里需要提出的是:笔者也是在慢慢的学习它,难免会有不对之处,欢迎大侠们拍转,提出宝贵的意见!谢谢1、系统请求跳转分析:对于这
2、个问题,我们要首先看看下面的这段代码:Php代码1. index.php: 2.3. include(ROOT_PATH./eccore/ecmall.php); 4. /*启动ecmall*/ 5. ecmall:startup(array( 6. default_app=default, 7. default_act=index, 8. app_root=ROOT_PATH./app, 9. /加载系统所需要的基础类 10. external_libs=array( 11. ROOT_PATH./includes/global.lib.php, 12. ROOT_PATH./include
3、s/libraries/time.lib.php, 13. ROOT_PATH./includes/ecapp.base.php, 14. ROOT_PATH./includes/plugin.base.php, 15. ROOT_PATH./app/frontend.base.php, 16. ), 17. ); 18.19.20. ecmall.php 21.22. classecmall 23. 24. /*启动*/ 25. functionstartup($config=array() 26. 27. /*加载初始化文件*/ 28. require(ROOT_PATH./eccore/
4、controller/app.base.php);/基础控制器类 29. require(ROOT_PATH./eccore/model/model.base.php);/模型基础类 30.31. if(!emptyempty($configexternal_libs) 32. 33. foreach($configexternal_libsas$lib) 34. 35. require($lib); 36. 37. 38. /*数据过滤*/ 39. if(!get_magic_quotes_gpc() 40. 41. $_GET=addslashes_deep($_GET); 42. $_P
5、OST=addslashes_deep($_POST); 43. $_COOKIE=addslashes_deep($_COOKIE); 44. 45.46. /*请求转发*/ 47. $default_app=$configdefault_app?$configdefault_app:default; 48. $default_act=$configdefault_act?$configdefault_act:index; 49.50. $app=isset($_REQUESTapp)?trim($_REQUESTapp):$default_app; 51. $act=isset($_REQ
6、UESTact)?trim($_REQUESTact):$default_act; 52.53. $app_file=$configapp_root.”/$app.app.php”; 54. if(!is_file($app_file) 55. 56. exit(Missingcontroller); 57. 58.59. require($app_file); 60. define(APP,$app); 61. define(ACT,$act); 62. $app_class_name=ucfirst($app).App; 63.64. /*实例化控制器*/ 65. $app=new$app
7、_class_name(); 66. c($app); 67. $app-do_action($act);/转发至对应的Action 68. $app-destruct(); 69. 70. 71.72. /根据app后面所跟的参数,来判断加载对应的控制器类文件,类文件在app文件夹下,对应名称与参数相同,act 后面的参数是对应控制器中的操作方法处理请求 73. /而对应的动作中,会有一个判断:if(!IS_POST)请求前的页面内容的显示else请求后的表单处 理及处理完成后的页面跳转。其中包括使用json处理数据 74. /这里需要提出的是:在控制器中: 75. $this-assign
8、(order,$order_info);/向模板页传递所需要参数的值 76. $this-display(buyer_order.confirm.html);/跳转到哪个页面 77. $this-json_result($new_data,confirm_order_successed);/使用json的方式传递参数,然后在页面上使用javascript处理请求的跳转 Ecmall的详细分析2-数据库关系模型的实现对于数据库关系模型的分析,我觉得需要从两个函数说起:/获取一个模型function &m($model_name, $params = array(), $is_new = fals
9、e)static $models = array();$model_hash = md5($model_name . var_export($params, true);if ($is_new | !isset($models$model_hash)$model_file = ROOT_PATH . /includes/models/ . $model_name .model.php;if (!is_file($model_file)/* 不存在该文件,则无法获取模型 */return false;include_once($model_file);$model_name = ucfirst(
10、$model_name) . Model;if ($is_new)return new $model_name($params, db();$models$model_hash = new $model_name($params, db();return $models$model_hash;/获取一个业务模型function &bm($model_name, $params = array(), $is_new = false)static $models = array();$model_hash = md5($model_name . var_export($params, true);
11、if ($is_new | !isset($models$model_hash)$model_file = ROOT_PATH . /includes/models/ . $model_name .model.php;if (!is_file($model_file)/* 不存在该文件,则无法获取模型 */return false;include_once($model_file);$model_name = ucfirst($model_name) . BModel;if ($is_new)return new $model_name($params, db();$models$model_
12、hash = new $model_name($params, db();return $models$model_hash; 所谓模型,则是一个一个的数据实体,换句话说就是一个数据表,你可以基于这个模型,调用model.base.php中的数据库操作函数来对数据进行增、删、改、查的操作。这里的业务模型,是在实体模型基础上,再继承一次,然后对一些方法进行重写。系统中只有三个实体有业务模型:推荐类型 recommend;商品数据模型 goods;商品分类业务模型 gcategory;具体操作例子:/物品表的操作:$model_goods = & m(goods);$goods_info = $m
13、odel_goods-get($goods_id); 这里需要解释一下对于数据模型的操作是怎样的一个函数调用过程:首先:$model_goods = &m(goods);我们看一下&m()函数的代码,其中var_export()函数则是将传进来的实体,返回相应的实体类对象,因为所有的model都继承至model.base.php中的BaseModel类,这个类中定义了基本所有的操作函数,因此$model_goods对象可以对数据库进行相应的操作。而我们再看看goods.model.php中的GoodsModel的代码: class GoodsModel extends BaseModelvar
14、 $table = goods;var $prikey = goods_id;var $alias = g;/缩写var $_name = goods;var $temp; / 临时变量var $_relation = array(/ 一个商品对应一条商品统计记录has_goodsstatistics = array(model = goodsstatistics,type = HAS_ONE,foreign_key = goods_id,dependent = true),/ 一个商品对应多个规格has_goodsspec = array(model = goodsspec,type = H
15、AS_MANY,foreign_key = goods_id,dependent = true),/ 一个商品对应一个默认规格has_default_spec = array(model = goodsspec,type = HAS_ONE,refer_key = default_spec,foreign_key = spec_id,),/ 一个商品对应多个属性has_goodsattr = array(model = goodsattr,type = HAS_MANY,foreign_key = goods_id,dependent = true),/ 一个商品对应多个图片has_goods
16、image = array(model = goodsimage,type = HAS_MANY,foreign_key = goods_id,dependent = true),/ 一个商品只能属于一个店铺belongs_to_store = array(model = store,type = BELONGS_TO,foreign_key = store_id,reverse = has_goods,),/ 商品和分类是多对多的关系belongs_to_gcategory = array(model = gcategory,type = HAS_AND_BELONGS_TO_MANY,mi
17、ddle_table = category_goods,foreign_key = goods_id,reverse = has_goods,),/ 商品和会员是多对多的关系(会员收藏商品)be_collect = array(model = member,type = HAS_AND_BELONGS_TO_MANY,middle_table = collect,foreign_key = item_id,ext_limit = array(type = goods),reverse = collect_goods,),/ 商品和推荐类型是多对多的关系 todobe_recommend = a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ECMALL 完整 教程
限制150内