zencart建站必备的五个插件

zencart的源码文件中第一句话往往是包含include目录下的application_top.php文件,如:require(’includes/application_top.php’);

在zencart系统中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是怎么根据摸版把内容显示出来的。
在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’);

假设当前url: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_defaultcommon目录下找到html_header.php

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

zencart目录文件说明 zencart模板加载方式相关推荐

  1. [转载]velocity模板加载

    2019独角兽企业重金招聘Python工程师标准>>> 转载自: http://www.blogjava.net/sxyx2008/archive/2010/11/11/337799 ...

  2. SpringBoot八种bean的加载方式

    目录 第一种bean的加载方式-配置文件 第二种加载bean方式-注解和扫描 创建第三方的bean对象 第三种加载bean方式-不使用配置文件 扩展-bean的加载方式扩展FactoryBean< ...

  3. 钓鱼篇-利用RLO隐藏exe文件捆绑office免杀-远程模板加载上线CS

    RLO伪装图片执行 利用msf生成木马x.exe msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.96.128 LPORT=4444 ...

  4. python保存大列表(list)数据到文件并后续重新加载为列表(list)对象实战

    python保存大列表(list)数据到文件并后续重新加载为列表(list)对象实战 笔者遇到的问题是这样的, 在做机器学习模型的时候,有的时候会使用相关性分析的方法来进行特征的筛选,去除冗余特征,降 ...

  5. asp.net使用httphandler打包多CSS或JS文件以加快页面加载速度

    介绍 使用许多小得JS.CSS文件代替一个庞大的JS或CSS文件来让代码获得更好的可维护性,这是一个很好的实践.但这样做反过来却损失了网站的性能.虽然你应该将你的Javascript代码写在小文件中并 ...

  6. 一步步手动实现热修复(一)-dex文件的生成与加载

    *本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 热修复技术自从QQ空间团队搞出来之后便渐渐趋于成熟. 我们这个系列主要介绍如何一步步手动实现基本的热修复功能,无需使用第三方框架. ...

  7. Linux下的ELF文件、链接、加载与库(含大量图文解析及例程)

    Linux下的ELF文件.链接.加载与库 链接是将将各种代码和数据片段收集并组合为一个单一文件的过程,这个文件可以被加载到内存并执行.链接可以执行与编译时,也就是在源代码被翻译成机器代码时:也可以执行 ...

  8. Angularjs标签模板加载原理

    前言 Angularjs提供多种模板加载方案. 最基础的为通过预先声明路径的方式,通过Ajax获取. 使用诸如gulp-html2js构建工具,将HTML模板转化为js文件使用. 使用script标签 ...

  9. 【Youtobe trydjango】Django2.2教程和React实战系列八【渲染数据库数据与模板加载顺序探究】

    [Youtobe trydjango]Django2.2教程和React实战系列八[渲染数据库数据与模板加载顺序探究] 1. 准备数据 2. 渲染数据库数据到模板 3. 如何在app里加载django ...

最新文章

  1. 别乱提交代码了,看下大厂 Git 提交规范是怎么做的!
  2. Exchange工具11—性能监视器
  3. Flash as3 以鼠标点为中心缩放效果
  4. 【自译】八步成为数据科学家
  5. bootstrap 模态框满屏_解决Ueditor在bootstarp 模态框中全屏问题
  6. 张奠宙:数学本质的揭示
  7. 面试—每日一题(5)
  8. Android 高效开发调试神器 JRebel
  9. php阿拉伯语字符串,使用PHP将RTL(阿拉伯语)文本写入图像
  10. 暑假NOIP期末考试【1】—— Phantom
  11. 计算机系统结构安全检测,计算机软件安全检测法综述
  12. 安装解锁网易云音乐 unblockneteasemusic 三种方法
  13. 2023毕业生必看,springboot计算机毕业设计容易通过题目都在这里!
  14. [MOT学习笔记]JDE损失函数详解
  15. GP工作室的项目计划书
  16. java applet 打印_applet 打印常见问题与解决方法
  17. Dynamics 365Online 使用adal.js注册和配置SimpleSPA应用程序
  18. (转载)STM32与LAN9252构建EtherCAT从站
  19. 由GZipStream的压缩,減少Web Service的传输量
  20. CM和CMTS是怎么上网的

热门文章

  1. 计算机标准差平方差怎么按,方差就是标准差的平方吗
  2. win8系统登录服务器失败怎么办,Win8系统出现lol无法连接服务器请检查网络连接怎么办?...
  3. python字典dict与json数据转换
  4. gcc指定头文件搜索路径及动态链接库搜索路径
  5. 智能判定魔兽是否在聊天状态
  6. 课程设计:模拟全球通计费程序--java(包含源码、思路、结果)
  7. 利用Photoshop CS4替换登记照的背景颜色
  8. 机器中的幽灵:人工智能在金融市场的影响、风险及监管
  9. ClickHouse 聚合函数的执行过程
  10. Delphi常用批处理命令