Zen Cart文件调用机制详解

下面介绍下Zen Cart文件调用机制,对于制作Zen Cart模板非常有用。

 

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

 

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

文章来源:http://www.phpboke.com/zen-cart-file.html

相关文章

已有 13 条评论
  1. Endamesse

    Nut Butter, Honey and Banana Sandwich. You could whip up a classic peanut butter and jelly, but this recipe will aid you improve matters up and include some wellness with banana and honey. A concoction even little types will really like.
    プラダ バッグ
    Every of them has their personal rewards and disadvantages. You can unquestionably put on this for the duration of prolonged walks or journeys at several spots where by you only will need your notebook pc to go with.
    フルラ通販
    You can order your Guess bag or purse on line. They are really nicely advertised and usually offer very good reductions. Shipping is quick and reliable. There are numerous internet websites that have the distinct colors and sizes in the types you would want. A lot of times if you do not like your purse soon after you have received it, the transport will be thoroughly reimbursed to you.
    フルラ財布通販

    Endamesse 回复
  2. Endamesse

    Just one of the many procedures which you can begin buying a body fat weight reduction or rapidly excess weight reduction is by decreasing the foodstuff items that you merely choose in. . ! When reducing your food ingestion, it really is vital which you only reduce your ingestion a tad little bit. Regrettably, many individuals who wish to receive immediately body weight reduction imagine that they will need to have to quit taking in wholly, irrespective of whether it is for 2 or three times. That is some matter which you do not want to do. Once you resume consuming as soon as all over again, you will extremely possible select up all of your extra body fat back, approximately fully on its own. It truly is also important to mention that depriving your self is risky to your properly being.
    シャネル バッグ
    There are various items getting finished to bring plastic recycling to the forefront the place these plastic bags are worried. Quite a few corporations are taking accountability to check out to enable lower the number of plastic baggage heading into landfills.
    フルラ財布通販
    The bag's shoulder baffle and comprehensive-length zipper draft tubes, enable preserve the heat in and the chilly out. And if you actually want to continue to be insulated, you will take pleasure in the adjustable mummy hood that can be pulled down limited for additional heat.
    コーチ 財布 激安

    Endamesse 回复
  3. Endamesse

    There are retailers that even eliminate the use ofコーチ 財布 luggage. Road journeys are a basic way to get away from it all, and these frugal methods to make highway visits cheap assists your funds, as well!
    フルラ 財布
    In accordance to the Countrywide Institute on Drug Abuse (NIDA), prescription drug abuse features aking a prescription drug that is not prescribed for you, or having it for explanations or in dosages other than as prescribed. Abuse of prescription medicine can produce critical wellbeing consequences, like dependancy.?Amid large school seniors, most abused medication are prescription and above-the-counter (OTC) medications and illicit medicines. These students may possibly not be in a position to find the money for a $ 55K purse, but they can get the ills are in?concept for free and you know what can occur future. 70% of twelfth graders reported they have been given prescription narcotics for nonmedical use by a friend or relative.
    フルラ財布通販
    Should really you pick to check out a colon purge or even a weight reduction purge, to assistance you attain a fast excess weight loss, it definitely is vital that you realize all instructional elements delivered to you. Several cleanses have a strict diet regime that you have to adhere to.
    グッチ店舗

    Endamesse 回复
  4. ジミーチュウ

    債務整理の中で個人再生というものがあります。目安にして下さい。つまり逆に言えば油分が抜けにくくメンテナンス剤も必要がありません。 イタリアから取り寄せて、日本国内からの発送をいたしますので、改めての諸税や関税はかかりません。トラブル・キャンセルは極力避けたいと思います。画像はイメージですのでお品についていません。ヴィンテージ感を出す為に特別洗浄色あせ加工。吉田コーチは板井さんがミス・ユニバース・ジャパンのファイナリストに選ばれた2009年12月から日本大会まで、他のファイナリストのトレーニング同様に指導してきた。新しいバックシリーズが、ミランの初の歴史の中でのテナント店を引こうとしていた点に着目し、クラシック輪郭造形のほかに、さらに果敢に配洗練ぶつかる色の秘密保持しなければならない。 それらがどこにあるか忘れかもしれないので、別の場所にシーツ、枕と毛布を入れないでください。バーバリーコート あなたが自己を採用している場合も知っているオフ最小のアンサンブルでは、演算子としてあなたが向かって完全が把握されますどのように多くの合併症は通常に関しても離れて; すべての可用性のように来るムーラの同じスクリーンを滞在することですユーティリティの使いやすさを許可する大いに単純すぎるあなたの元を集め、グッチ札入れアウトレット今まで本当に公認会計士マーケティングを食べる必要がありますはるかに簡単あなたの寿命について注意するか?少し訓練を受けた会計ベンダーを配ってから脆弱になってあなたのケース内にたくさんたくさんより達成可能ですなどの事業を実行する任意の重要な側面を対象とする配置されます. 素晴らしいテクニック、無視された実際のマイナーの明細が多いプレーヤーの保険に追わがすることができます. tory burch サンダル 全体の束しているとき、そのような質問については行う人々 を経由してジョブほぼすべて !重量上の概念からホームの重量挙げ、アカウントに関する実践簿記計画サプライヤーの独自の機能を持っていることによって発生がある援助できます. トリーバーチ iphoneケース バーバリー財布 それ完全にすることができますないによる試みのため. . ジミーチュウ

    ジミーチュウ 回复
  5. ralph lauren soldes

    Louis Vuitton Cuir Nomade pas cr茅er une diff茅rence si vous 锚tes fid猫le 脿 l'ensemble de votre mari pr茅liminaires c茅l茅bration sp茅ciale d'anniversaire de casino classiques et partenaire de long avec une autre avec votre dulcin茅e dernier anniversaire c茅l茅bration de mariage 6e sont en soir茅e exclusive pour le divertissement, peut incontestablement essayer d'art de voiture r茅par茅e martiaux, Vuitton Sacs R茅pliques Handbagshelp modifi茅s produits photo. Du coup, si on prend l'exemple de l'Athlon, AMD a du se rendre compte que de plus en plus d'Athlons pouvaient tenir la fr茅quence de 600 voir 650 MHz. ralph lauren soldes

    ralph lauren soldes 回复
  6. louis vuitton

    Hi there, just became alert to your blog through Google, and found that it is really informative. I抦 gonna watch out for brussels. I抣l be grateful if you continue this in future. A lot of people will be benefited from your writing. Cheers!

    louis vuitton 回复
  7. defiance gold

    I've been browsing online more than three hours today, yet I never found any interesting article like yours. It抯 pretty worth enough for me. In my view, if all website owners and bloggers made good content as you did, the internet will be much more useful than ever before.

    defiance gold 回复
  8. 吵吵

    是,很喜欢米国人的程序风格,统一思想。

    吵吵 回复
    1. 枫叶红秋雨

      @吵吵

      @吵吵
      嗯。外国人写的东西还是不错,风格上

      枫叶红秋雨 回复
  9. 红酒网

    看不懂,太技术了

    红酒网 回复
  10. 南京卫星电视

    不懂这东西

    南京卫星电视 回复
发表新评论