`
ihuashao
  • 浏览: 4704821 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

zencart文件调用机制(详解)

阅读更多

admin后台管理目录

cache 缓存目录

docs 文档目录

download 用于存放下载类商品

editors 所见即所得编辑器

email 电子邮件模版目录

extras 测试文件目录

images 商品图片目录

includes 前台

media 媒体类商品目录

pub 公用目录(空)

includes里面的目录:

auto_loaders 自动加载的脚本

classes 主要的类函数

extra_cart_actions 空

extra_configures 第三方模块设置文件

extra_datafiles 第三方模块数据表名定义

functions 主要的功能函数

index_filters 过滤功能

init_includes 初始化功能

languages 语言文件包目录

modules 所有的模块目录

templates 模版目录

zencart与oscommerce在某中意义上很相似,可以看做是一个升级版,两者之间共用了很多相同的函数或类,不同的是他们是按照不同的方式组织在一起

zencart 采用摸板,单一文件index.php入口,后面跟参数,参数决定显示的内容,基本上网页变换的部分只是中间的主区域

重点介绍几个文件

includes目录,该目录无疑是zencart的核心(前台),

通常情况下index.php第一句话则是包含include目录下的application_top.php文件,如:require('includes/application_top.php');

在该系统中application_top.php负责的是初始化工作,比如加载配置文件include('includes/configure.php');如果系统程序没检测到该文件的存在则会尝试调用安装文件

,然后它会自动遍历include/extra_configures下的配置文件并包含进来

在加载了系统配置文件以后接下来是一个非常重要的文件,这也导致了zencart和oscommerce感觉上很大不同的原因(事实上都一回事)

首先调用一个文件require('includes/initsystem.php'); 在initsystem.php中最先加载include/auto_loaders/config.core.php,config.core.php是一个二围数组$autoLoadConfig,即以数组的形式保存文件的信息供后面文件调用,然后系统会接着加载完include/auto_loaders目录下所有文件名匹配$loaderPrefix(默认为config)的文件

上面程序执行完以后就可以加载自动执行程序了require('includes/autoload_func.php');在这里它会遍历$autoLoadConfig数组,它最终执行的效果会包含所有必须用到的函数或者类的定义,还有变量的初始化,config.core.php里面的注释比较清楚比如 $autoLoadConfig[0][] = array('autoType'=>'class','loadFile'=>'class.base.php');在autoload_func.php里面执行完以后的效果就是require(DIR_WS_CLASSES . 'class.base.php'),事实上本人是不赞成这种写法,大部分的初始化化工作是通过包含init_includes目录下的文件来实现的

如: $autoLoadConfig[110][] = array('autoType'=>'init_script','loadFile'=> 'init_templates.php');它在执行完autoload_func.php文件后就已经加载了init_includes目录下的init_templates.php

文件,由于里面包含的文件太多,在这就不做一一介绍了

下面我来介绍下zencart是怎么根据摸版把内容显示出来的

require('includes/application_top.php');初始化所以需要用到的公共信息以后接下来就应该是显示了

index.php的第29行有句$directory_array = $template->get_template_part($code_page_directory, '/^header_php/');

由于所有初始化工作已经完成所有我们就可以在上面的文件找到他们的定义, $autoLoadConfig[100][] = array('autoType'=>'classInstantiate','className'=>'template_func','objectName'=>'template');

在这里就定义了$template = new template_func(); ,然后$code_page_directory变量的定义是在init_includes/init_sanitize.php文件中定义在这里必须要对class/template_func.php中定义的template_func类比较熟悉在改类中主要定义了两个方法get_template_dir()get_template_part();这两个方法在zencart的摸版中起到了决定性的作用

我简单的说下get_template_dir方法function get_template_dir($template_code, $current_template, $current_page, $template_dir, $debug=false),它定义了5个参数第一个参数一般是个文件名,它是用来判断后两个参数组成的目录中有没有匹配$template_code的这个文件,该类复写了默认的系统函数file_exists所以很多初学者可能会比较迷惑

function get_template_dir($template_code, $current_template, $current_page, $template_dir, $debug=false) {

// echo 'template_default/' . $template_dir . '=' . $template_code;

if ($this->file_exists($current_template . $current_page, $template_code)) {

return $current_template . $current_page . '/';

} elseif ($this->file_exists(DIR_WS_TEMPLATES . 'template_default/' . $current_page, ereg_replace('/', '', $template_code), $debug)) {

return DIR_WS_TEMPLATES . 'template_default/' . $current_page;

} elseif ($this->file_exists($current_template . $template_dir, ereg_replace('/', '', $template_code), $debug)) {

return $current_template . $template_dir;

} else {

return DIR_WS_TEMPLATES . 'template_default/' . $template_dir;

// return $current_template . $template_dir;

}

}

/*

includes/templates/zccn/index

includes/templates/template_default/index

includes/templates/zccn/common

includes/templates/template_default/common

*/

get_template_part()方法有两个函数第一个参数是文件目录第二个参数是匹配的条件执行的结果是包含该目录下所有文件名匹配这个条件的文件

比如$directory_array = $template->get_template_part($code_page_directory, '/^header_php/');

这句话执行的结果就是返回目录下$code_page_directory所有文件名以header_php开头的文件

如此时的url(http://localhost/zencart/index.php?main_page=product_info&cPath=49_27&products_id=83)

你现在应该查看init_sanitize.php$code_page_directory的定义此时的$code_page_directory的值应该是includes/modules/product_info/

所以它就应该包含该目录下所有以header_php开头的文件,在这里好象就只有一个header_php.php

$directory_array = $template->get_template_part($code_page_directory, '/^header_php/');这个包含文件其实是初始化前台不同页面显示所需要用到的变量函数主要是初始化数据库的东西,因为每个页面需要的数据资料都有可能不同,所以index.php?main_page=index main_page的值不同是在includes/modules/目录下都会有个对应的目录这里是index目录

只要知道了这两个方法的用法,你就会知道模板文件都是怎么显示出来的了

再来解释一 require($template->get_template_dir('html_header.php',DIR_WS_TEMPLATE, $current_page_base,'common'). '/html_header.php');

假设当前http://localhost/zencart/index.php?main_page=index&cPath=48

DIR_WS_TEMPLATE 定义是在includes/init_templates.php中定义define('DIR_WS_TEMPLATE', DIR_WS_TEMPLATES . $template_dir . '/');,因为我现在用的是默认的zccn模板

所以现在的DIR_WS_TEMPLATE=includes/templates/zccn/

$current_page_base在这里已经就是index

上面已经解释了$template->get_template_dir()的方法了

程序会依次在includes/templates/zccn/index

includes/templates/template_default/index

includes/templates/zccn/common

includes/templates/template_default/common

这四个目录下找html_header.php在这里最终在template_default\common目录下找到html_header.php

到这里就可以自己写摸板文件了,因为$template->get_template_dir()是按顺序找的所以你只要在你的模板文件中存在该文件即可

分享到:
评论

相关推荐

    zencart常用函数详解

    函数通过调用`chmod()`来改变文件权限,参数`0444`表示所有用户都只有读取权限。 ```php function set_unwritable($filepath) { return @chmod($filepath, 0444); } ``` ### 3. `zen_back_link()` `zen_back_...

    zencart 数据库

    恢复或导入`nike-en.sql` 文件到Zencart数据库将更新或初始化这些表的数据,确保Nike产品的英文信息正确无误地显示在商店中。在进行此类操作时,必须确保数据库备份的安全,防止数据丢失,并遵循适当的数据库管理...

    ZenCart1.5免费模板

    在ZenCart中,"includes"目录通常包含诸如header.php(页面头部)、footer.php(页面底部)这样的文件,它们在每个页面加载时被调用,以保持网站各页面的一致性。 总的来说,ZenCart1.5免费模板为商家提供了一个...

    zencart 常用代码,常用php调用

    根据提供的标题、描述以及部分代码内容,我们可以总结出关于 ZenCart 的一些常用代码及 PHP 调用方法,这些对于修改或自定义 ZenCart 模板非常有帮助。 ### 一、基本概述 ZenCart 是一个流行的开源电子商务平台,...

    (ZenCart CJloader包含CSS和JS文件类)yellow1912-cjloader-d268660

    如,zencart网站的下载安全的其他插件中,如果有两个都带有 同一个 javascript 文件(例如:jQuery),那么它将会被加载两次, 不过要使得这个功能生效的话,那么开发者必须都使用CJ Loader插件来加载 css和javascript 文件,...

    zencart1.55f zen-lightbox

    《ZenCart 1.5.5f与Zen Lightbox整合详解》 ZenCart是一个流行的开源电子商务解决方案,它为在线商家提供了强大的功能和易用性。版本1.5.5f是该平台的一个稳定版本,提供了许多改进和修复,旨在优化用户体验和管理...

    zencart模块

    2. **jscroller_sidebox_v20.zip**:这是一个滚动侧边栏模块的更新版本,可能包含了 JavaScript 和 CSS 文件,用于在商店页面的侧边栏创建动态滚动效果。这样的模块可以用来展示新品、促销信息或者热门产品,增加...

    zencart模板系统文件笔记1:html_header.php

    理解该文件对于定制和优化ZenCart网站的表现和SEO至关重要。 #### 文件基本信息 - **文件名称**:`html_header.php` - **所属项目版本**:英文版Zen-Cart v1.3.9h - **文件路径**:`includes\templates\template_...

    zencart安装

    - 解压缩下载的文件,这将生成一个包含所有Zencart文件和目录的文件夹。 3. **创建项目目录**: - 在APMServ的默认Web根目录下(例如,`D:\APMServ5.2.6\www\htdocs`),创建一个新的文件夹,如“zencart”,用于...

    zencart个人模板开发记录,有模板文件

    本文将深入探讨ZenCart的个人模板开发,包括模板文件的结构、设计原则以及二次开发过程中的重要知识点。 首先,模板是ZenCart用户界面的基础,它决定了网站的外观和布局。在ZenCart中,模板主要由HTML、CSS和可能的...

    zencart 文档结构图

    ### zencart 文档结构与知识点详解 #### 核心概念与文件加载流程 Zencart是一款基于PHP的开源电子商务平台,其强大的功能和灵活的定制能力使其在电商领域受到广泛欢迎。理解Zencart的文档结构对于开发、维护和扩展...

    zencart模板修改定制笔记2:头部背影图片的修改详解

    标题与描述均指向了《Zencart模板修改定制笔记2:头部背影图片的修改详解》这一主题,本文将深入探讨如何在Zencart平台上修改头部背景图片,这对于那些希望个性化其Zencart网店外观的用户来说至关重要。Zencart是一...

    zencart中文语言包

    《ZenCart中文语言包详解与应用》 ZenCart是一款开源的电子商务购物车系统,它以其易用性、灵活性和强大的功能深受商家喜爱。在进行ZenCart的网站搭建时,中文用户常常会遇到语言障碍,此时,“ZenCart中文简体语言...

    paypal跳转插件 zencart版

    3. **上传文件**:使用FTP客户端将解压后的文件上传到ZenCart服务器对应的目录,通常包括修改或替换原有的模板文件和配置文件。 4. **安装配置**:登录ZenCart后台管理界面,找到“模块”或“扩展”部分,安装并配置...

    兰亭zencart首页调整教材

    《兰亭Zencart首页调整教程详解》 Zencart是一款强大的开源电子商务系统,它提供了丰富的功能和自定义选项,让商家可以根据自己的需求定制店铺的外观和内容。本教程主要针对“兰亭模板”的首页调整,帮助新手快速...

    zencart ems

    《ZenCart EMS配送模块详解》 ZenCart,作为一款开源的电子商务购物车系统,深受许多电商网站的喜爱。在处理物流配送方面,ZenCart提供了多种模块,其中之一便是EMS配送模块。本文将深入探讨ZenCart与EMS的集成,...

    zencart 开发技巧 经验整理

    7. **语言文件**:Zencart支持多语言,通过编辑language目录下的文件,可以实现商店的多语言版本。 8. **错误处理和调试**:熟悉Zencart的错误报告机制,学会使用PHP的错误日志和调试工具,如Xdebug,能帮助解决...

    zencart一步支付插件

    2. **备份**:在修改任何系统文件之前,确保备份原有的Zencart文件和数据库,以防万一出现问题可以恢复。 3. **上传文件**:将解压后的插件文件上传到Zencart的相应目录,如`includes/modules/payment`,这通常是...

    zencart法语语言包

    这些文件夹包含了Zencart系统中不同部分的翻译文件。 1. **includes** 文件夹: 这个文件夹是Zencart的核心部分,包含了各种系统配置、模板引擎、语言文件等。其中的语言文件通常以`.php`或`.lang.php`结尾,它们...

Global site tag (gtag.js) - Google Analytics