赵荣涛's Archivers

From admin on 2011-06-08 23:20:24

ecmall框架系统分析-ecmall的程序结构

ecmall的程序的大致结构,如图所示:

<img class="aligncenter size-full wp-image-332" title="07a56c7b-a55e-32c7-afea-372bee873f9b" src="http://www.oicto.com/wp-content/uploads/2011/06/07a56c7b-a55e-32c7-afea-372bee873f9b.jpg" alt="" width="397" height="612" />

根据ecmall的程序结构图,你可以清楚的知道ecmall的五脏六腑!

然后,根据我的学习,觉得其中一些值得我学习的地方,一一提取出来,对它进行分析,与理解。做如下几个问题的处理:

需要分析的问题:

1、系统请求跳转分析
2、数据库关系模型的实现
3、登录用户信 息$this->visitor->get("user_id")的实现
4、模板解析分析
5、页面json对象传输实现
6、 缓存分析

1、系统请求跳转分析:

对于这个问题,我们要首先看看下面的这段代码:


Php代码


  1. index.php:

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

  3. /* 启动ecmall */

  4. ecmall::startup(array(

  5. 'default_app' => 'default',

  6. 'default_act' => 'index',

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

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

  9. 'external_libs' => array(

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

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

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

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

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

  15. ),

  16. ));

  17. ecmall.php

  18. class ecmall

  19. {

  20. /* 启动 */

  21. function startup($config = array())

  22. {

  23. /* 加载初始化文件 */

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

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

  26. if (!emptyempty($config['external_libs']))

  27. {

  28. foreach ($config['external_libs'] as $lib)

  29. {

  30. require($lib);

  31. }

  32. }

  33. /* 数据过滤 */

  34. if (!get_magic_quotes_gpc())

  35. {

  36. $_GET = addslashes_deep($_GET);

  37. $_POST = addslashes_deep($_POST);

  38. $_COOKIE= addslashes_deep($_COOKIE);

  39. }

  40. /* 请求转发 */

  41. $default_app = $config['default_app'] ? $config['default_app'] : 'default';

  42. $default_act = $config['default_act'] ? $config['default_act'] : 'index';

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

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

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

  46. if (!is_file($app_file))

  47. {

  48. exit('Missing controller');

  49. }

  50. require($app_file);

  51. define('APP', $app);

  52. define('ACT', $act);

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

  54. /* 实例化控制器 */

  55. $app = new $app_class_name();

  56. c($app);

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

  58. $app->destruct();

  59. }

  60. }

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

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

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

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

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

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


查看完整版本: ecmall框架系统分析-ecmall的程序结构

From Name on 2014-01-08 13:29:39

撒旦

Tags: