zen-cart开发教程 - 概述

有的程序一看就明白, 然而真要进行修改和扩展, 还真不容易,ICommerce 就是这样的程序; 然而有的程序, 看起来很复杂, 以至于一时间连某个页面都找不到在哪儿, 这种程序架构比较复杂, 初级网站编程人员很难看明白, 但是当你真正的掌握到了它的程序结构后, 你一定会为架构师的思维拍案叫绝, 因为你会发现, 若要开发一些新功能会变得如此的方便,zen-cart 就是如此.
zen-cart 是国外比较优秀的开源电子商务网点源码,zen-cart 程序源于os-commerce, 借鉴了os-commerce 的很多成果, 而在扩展性方面,zen-cart 显得又比前辈做得更好.
可以看到 , zen-cart 前台所有的页面地址是如下格式:
1.         http://127.0.0.1/zencart/index.php?main_page=index&cPath=1_4
2.         http://127.0.0.1/zencart/index.php?main_page=product_info&cPath=1_4&products_id=1
3.         http://127.0.0.1/zencart/index.php?main_page=site_map
也许你会觉得很困惑, 怎么所有的页面都是index.php ? 这么大的一个网店系统, 难道一个index.php 页面就可以搞定了吗? 这时, 你可能就需要耐心的去分析一下index.php 页面了.
经过分析, 你就会发现, 其实index.php 页面并不想你所想象的那么神奇, 那么深不可测. 相对于其他文件, Index.php 更像是一个管理者, 一个司令员, 当它接到指令后, 并不是自己来处理, 而是把任务分配给他的下属至于要完成什么任务, 那么就要看接收到的指令main_page 的内容了.
index.php 页面的开头, 作者介绍了该页面的处理过程 , 表格 2‑1 所示.
* index.php represents the hub of the Zen Cart MVC system

*

* Overview of flow

* <ul>

* <li>Load application_top.php - see {@tutorial initsystem}</li>

* <li>Set main language directory based on $_SESSION['language']</li>

* <li>Load all *header_php.php files from includes/modules/pages/PAGE_NAME/</li>

* <li>Load html_header.php (this is a common template file)</li>

* <li>Load main_template_vars.php (this is a common template file)</li>

* <li>Load on_load scripts (page based and site wide)</li>

* <li>Load tpl_main_page.php (this is a common template file)</li>

* <li>Load application_bottom.php</li>

* </ul>

*

* @package general

* @copyright Copyright 2003-2005 Zen Cart Development Team

* @copyright Portions Copyright 2003 osCommerce

* @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0

* @version $Id: index.php 2942 2006-02-02 04:41:23Z drbyte $
   1.         加载application_top.php 文件
Application_top.php 文件中将进行许多常量的定义 , 加载配置文件等工作
2.         设置语言目录
这里定义了一个变量$language_page_directory, 代表当前的语言目录, 该变量的值和$_SESSION['language'] 值息息相关.
3.         加载” includes/modules/pages/PAGE_NAME/” 目录中的所有header_php.php 文件.
可以看到, 在每个网页内容的文件夹中, 都有header_php.php 文件, 加载页面时, 首先会加载该文件.
4.         加载html_header.php 文件
html_header.php 文件包含了在<head></head> 标记中出现的内容, 默认放在includes/templates/common 目录下. 当然在特定的情况下, 加载的可能不是这个文件, 你可以再模板级或者页面级来重写这个文件, 从而定义特殊的html_header.php 文件.
         通过 金字塔视图, 可以看到html_header.php 文件的优先级别, 越靠近金字塔顶端, 优先级别越高, 如果优先级别高的文件已经存在, 则不会加载优先级别比它低的文件了.
5.         加载main_template_vars.php 文件
main_template_vars.php 文件根据$_GET['main_page'] 的值实现了页面的跳转逻辑 . 该文件的加载过程和html_header.php 文件的加载过程异曲同工,  html_header.php 加载的是网页头部<head></head> 中的内容, 而文件main_template_vars.php 却决定了要加载的网页的主体内容.  
通过观察template_default common 下面的main_template_vars.php 中的代码, 可以知道, 若在存储页面文件的”includes/modules/pages/$_GET['main_page']” 中增加一个名为main_template_vars.php 的文件, 则将直接加载这个文件. 否则, 将加载当前模板中的 ”tpl_$_GET['main_page']_ default.php” 文件. ( 注意, 这里实际上没有真正加载文件, 而只是将要加载的文件的路径$body_code 进行设置)
如果您对这两个文件的加载过程还不胜了解, 那么请试着做下面的实验.
在地址栏中访问”http://127.0.0.1/zencart/index.php?main_page=news_list”, 将会出现网页未找到的提示信息. 这是可以理解的, 因为news_list 是我自己想象的, zen-cart 没有提供这个页面, 我自己也没有安装类似的插件.
然后在目录”/includes/modules/pages” 中新建一个文件夹, 命名为 news_list, 再访问该链接, 就不会提示找不到链接了, 至此一个新的页面就建好了, 接下来的工作就是要丰富该页面的内容了. 这将在后面的章节中予以描述.
6.         加载on_load 脚本
on_load_*.js 文件中包含了要在<body> 标记的onload 属性中出现的内容, 即在页面加载完成后要执行的脚本. 可以在同一个页面中定义多个on_load_*.js 文件, 这些内容将会同时被执行.
on_load_*.js 文件可能是页面级和站点级的 . 页面级的on_load_*.js 文件只在当前页面中有效, 而站点级on_load_*.js 文件将对站点中的每个页面有效. 有关如何定义页面级和站点级的onload 事件, 将在后面的章节予以描述.
在这里, 页面级和站点级的on_load_*.js 文件内容都将读入$za_onload_array[] 数组中, 然后组合到变量$zv_onload , 为后面做好准备. $zv_onload 最终将作为到<body> onload 属性值.    
7.         加载tpl_main_page.php 文件
这里定义将选择影响页面布局的模板, 可以在具体的页面中选择, 或者使用zen-cart 默认的模板( 一个标准的三列板式), 模板中会对main_template_vars.php 中定义的变量$body_code 所指文件予以加载.
8.         加载application_bottom.php 文件
application_bottom.php 文件中将进行一些清理操作.

你可能感兴趣的:(二次开发,代码分析,zencart)