如何在zencart添加一个页面

来源:互联网 发布:分布式数据库系统 编辑:程序博客网 时间:2024/05/16 11:58
假设当前使用的是默认模板的经典(classic)款,待新增的页面名称为在访问时为:about_future,即index.php?main_page=about_future
1、tpl文件
这个文件就是最终进行渲染的文件,将前面得到的数据,在这里完成渲染,跟smarty的tpl一样的含义。
注意命名有规定:tpl_xxx_default.php。中间的xxx就是等于浏览器访问的main_page的值。

在includes/templates/classic/templates/下新建tpl_about_future_default.php
里面写上:
<?php

echo "--------------------在classic下的-------------define_page=$define_page<br/>";
require($define_page);  //这个$define_page待会会说到。
?>

如果不在classic下新建,而是放到其他地方,则会找不到这个文件。
但是可以把这个文件放到template_default目录的templates下,这个就表示,如果当前样式(classic)下找不到对应的模板文件,此处为tpl_about_future_default.php,就会到template_default/templates下去找,这个其实就是一个函数里进行判断文件是否存在的过程而已。可以做,template_default/templates是最后的一关了。
这样做的好处就是:对于大部分的可以放在template_default/templates下就行了,对于部分要定制的,就额外放到新的模板名称下,或者在新的模板名称下起新的tpl,其他的模板下就没有这个tpl,等等,都可以,自己去领会。

2、page文件(功能文件)
这个位置的文件的作用在于获取相关的数据,定义相关的变量,就像是控制器。抛开zencart灵活的模板控制过程,其实简单的来说,就是访问page下的功能文件,得到数据,然后到tpl去渲染,仅此而已。
其实我觉得叫做page文件,有点怪,但因为放到includes/modules/pages目录下,我还是这样叫吧,感觉像service层的东西。
在includes/modules/pages目录下,建立about_future文件夹,注意是文件夹,然后在里面建立一个header_php.php。文件夹的名称是等于浏览器访问中的main_page的值,里面的php是固定命名的,都是叫做header_php.php。
里面写上这样的内容:
<?php

require(DIR_WS_MODULES . zen_get_module_directory('require_languages.php'));
$breadcrumb->add(NAVBAR_TITLE);
$define_page = zen_get_file_directory(DIR_WS_LANGUAGES . $_SESSION['language'] . '/html_includes/', FILENAME_ABOUT_FUTURE, 'false'); //这个FILENAME常量待会说。
echo "pages/about_future<br/>";
?>
这个$define_page就是上面tpl里用到的。
这里可以处理很多数据,如从数据库加载数据,保存数据到数据库等等。


3、正文被引用的文件
这个文件不是一定要的,像说明性的文字倒是可以放这里。如像上面的定义了$define_page等于某个路径下的某个文件,然后再tpl文件里require一下,就输出了该文件的内容。
在includes/languages/schinese(或english)/html_includes/classic/目录下,建立一个名称为define_about_future.php的文件。上面看到的FILENAME_ABOUT_FUTURE这个常量等于define_about_future,在后面介绍其定义的地方。
这里又可以见识到zencart的灵活了:schinese目录还是english目录下来建立,看你当前采用的语言是中文还是英文,最好两个地方都要建立,一个写中文内容,一个写英文内容。这是第一个分支:语言的分支。进入到某个分支的html_includes下,又面临:哪个模板下的问题,跟tpl的是一样的灵活。可以选择放到某个模板下,这样,只有那个模板才有这个文件。也可以直接放到html_includes下,供各个模板共用,怎么选择,看你的用途。但如果你当前的模板是classic,而你把这个文件放到了light模板下,那么此时是不能看到这个文件的内容的。

4、定义语言常量
在程序中,使用常量可以保持程序的一致,常量的取值可以不同。zencart也是,不同的语言,相同的code,就要用该语言来写。
在includes/languages/english/下,新建about_future.php文件,里面写上:
<?php

define('NAVBAR_TITLE', 'About Future');
define('HEADING_TITLE', 'About Future');
define('TEXT_INFORMATION', 'About Future information goes here.');
?>

在includes/languages/schinese/下,新建about_future.php文件,里面写上:
<?php 
define('NAVBAR_TITLE', '关于未来的标题');
define('HEADING_TITLE', '关于未来');
define('TEXT_INFORMATION', '关于未来,需要努力');
?>

可以看到这些常量的取值因语言而异。

5、定义文件的常量
在includes目录下有个filenames.php,里面定义了所有的文件名称,
如define('FILENAME_ACCOUNT', 'account');
define('FILENAME_ACCOUNT_EDIT', 'account_edit');
define('FILENAME_ACCOUNT_HISTORY', 'account_history');
define('FILENAME_ACCOUNT_HISTORY_INFO', 'account_history_info');
define('FILENAME_ACCOUNT_NEWSLETTERS', 'account_newsletters');
我们增加:
define('FILENAME_ABOUT_FUTURE','define_about_future');

注意,都是没有携带php后缀的。


总之,有两个维度:语言的维度,模板的维度,灵活的组合,有点像n*m的感觉。

参考:http://blog.sina.com.cn/s/blog_94eb1a9601019q07.html
http://blog.sina.com.cn/s/blog_6caa2f250100ybq4.html

这个有系列文章:
http://wenku.baidu.com/view/5766e4f0f61fb7360b4c65a2.html
0 0
原创粉丝点击