模板引擎
模板引擎:将PHP和HTML分开的一种解决方案;
<?php
mysql_connect("localhost","root","");
mysql_select_db();
$sql="select * from stu";
$result=mysql_query($sql);
echo "<ul>";
while($row=mysql_fetch_assoc())
echo "<li>".$row['title']."</li>";
echo "</ul>";
?>
{@ news typeip='?' lmit=5@}
<div id="news">
{@ news typeip='?' lmit=5@}
</div>
好处:
1、PHP与HTML分开,可以后期方便的更改模板
2、PHP程序员和美工各司其责,并行开发,提高了开发速度;
坏处:
1、中小型的项目不适合
2、实时更新数据的网站中不适用
流行模板引擎:
smarty smart template phplib
smarty:
1、支持编译和缓存,可以提高用户体验度(页面加载)
2、smarty模板中有丰富的控制结构
3、smarty中具有丰富的自定义插件
4、PHP编写模板引擎-可以学习模板引擎编写
5、丰富的缓存控制
smarty的基本使用步骤:
1、smarty.net中下载smarty包
libs->smarty
2、引入smarty
将smarty中代码引入程序
引入smarty解析类
3、初始化smarty类
$tpl = new Smarty;
2.6:
模板目录:
$tpl -> template_dir = "./tpl";
编译目录:
$tpl -> compile_dir = "./comp";
3.0
模板目录:
$tpl -> template_dir = "./tpl";
编译目录时自动生成的 template_c
4、使用smarty:
调用模板: index.html index.tpl
$tpl -> display("模板文件名");
smarty的基本操作:
【变量】
1、PHP分配给smarty变量
$tpl -> assign("前台变量名",PHP变量名|数据);
模板中变量输出:
{$变量名}
防止标签成对出现:
1)原样输出不解析;
{literal}
代码{}
{/literal}
2)手动修改变量的左右定界符
$tpl -> left_delimiter = "{@ ";
$tpl -> right_delimiter ="@}";
2、smarty模板内定义的局部变量
{@ assign var="" value=""@}
var:定义的模板变量名
value:定义的变量的数据;
3、smarty前台样式配置变量
4、smarty中session,get等变量使用
【控制结构】
分支控制结构:
{@ if 条件1@}
操作1
{@ else if 条件2@}
操作2
{@ else@}
操作3
{@ /if@}
注意:
比较运算符
> gt
< lt
== eq
>= gte
<= lte
=1 浏览权限
=2 修改和删除
=3 增加权限
其他 你没有权限
循环结构】
foreach: 几维数组,几次循环
格式:
{@ foreach name="" item="" key="" from=""@}
{@ /foreach@}
name:循环体名字
item:被遍历出得数组元素
key:数组元素的键名或者是索引值
from:被遍历的数组
关联数组元素:
$item.键名
section:可以省掉一次循环,并且可以对记录进行二次记录筛选;
格式:
{@ section name="" loop="" start="" step="" max="" show=""@}
{@ /section@}
name:循环体的名字,可以当做下标使用,但是不是下标
loop:被遍历的数组名字
start:被遍历的数组的起始记录 索引从0开始
正值:从头到尾的去找起始记录
负值:从尾到头的去找起始记录
step:步长
正值:从头到尾的取得记录
负值:从尾到头的取得记录
eg:
start=-1 step=-1 将记录进行倒序排列
max:循环次数,被遍历的数组记录条数
show:被遍历出得数据是否显示
true:显示数据
false:不显示数据
【文件引入】
1、静态模板文件引入
{@ include file="路径+文件名"@}
路径计算是以当前的模板页面计算的
另外:
{@ *注释内容*@}
2、动态PHP页面引入
{@ include_php file="路径+名字"@}
路径计算是以调用该模板的PHP页面来计算的
或者
{@ php@}
echo "你好";
{@ /php@}
3.1 初始化的对象必须是smartyBC
$tpl -> allow_php_templates=true
3.0 $tpl -> allow_php_tag=true;
2.6 直接使用
3、前台样式配置文件引入:配置的是前台显示的某些数据和样式
{@ config_load file="" section=""@}
section:模块名
【前台样式配置】
注意文件后缀名:
.conf
语法格式:
变量名=值
变量2=值
.......
路径计算以该前台样式的模板文件计算的;
变量:
{@ #变量名#@}
{@ $smarty.config.变量名@}
模块定义:模块区域:从定义的位置开始直到下个模块定义或者是页面结束
[模块名]
变量=值
[模块名]
【系统定义的标签】
1、单选按钮组
{@ html_radios name="" output="" values="" checked="" separator=""@}
name:单选按钮的名字
output:显示的数据内容组成的一维索引数组
values: 每个单选按钮value值组成的一维的索引数组
checked:被选中按钮的value值
separator:按钮组的样式
options:以value当键名,以显示数据当元素值,组成的关联数组;
2、复选框按钮组
{@ html_checkboxes name="" output="" values="" checked="" separator=""@}
checked:可以是单个数值也可以是被选中的按钮value组成的一维索引数组
3、下拉列表框
{@ html_options name="" output="" values="" selected=""@}
checked改成selected
4、时间插件
{@ html_select_time@}
5、日期插件
{@ html_selecte_date start_year="" end_year=""@}
start_year:起始的年份
end_year:终止的年份
6、html_image
7、html_table
【修饰函数】对传递到前台的数据进行二次修改
使用格式:
{@ 变量名|函数名:参数1:参数2[|函数名:参数1:参数2]@}
capitalize:首字母大写
date_format:设置日期格式
truncate:截取字符串
count_characters:统计字符个数
default:设置默认值
indent:缩进
lower:将字符转换为小写
strip_tags:去掉HTML标签
upper:将字符转换为大写
replace:字符串替换
【session|cookie|get|post】
$smarty.session.变量名
$smarty.cookie.变量名
$smarty.get.变量名
$smarty.post.变量名
【用户自定义插件】
plugins:用户自定义插件目录
sysplugins:系统插件目录
1】修饰函数插件:
文件名:modifier.插件名.php
函数名:
function smarty_modifier_插件名($string,参数1,参数2,参数3...){
}
$string:所要修饰的数据是什么
参数:使用该插件时,冒号后面的参数
修饰数据可以return 也可以是echo出得;
eg:
modifier.color.php
function smarty_modifier_color($string,$color){
return "<font color='".$color."'>".$string."</font>";
}
2】块状插件:就好像literal标签类型似的插件
{@ 标签名 参数1=值1 参数2=值2 参数3=值3......@}
{@ /标签名@}
文件名:block.插件名.php
函数名:
function smarty_block_插件名($params, $content, $template, &$repeat){
}
$params:将参数名当做键名,用参数值作为数组元素值,组成的关联数组
$content:标签中的数据内容
$template:smarty对象
3】function类型插件:好像html_radios html_select_time
文件名:
function.插件名.php
函数名:
function smarty_function_插件名($params, $template){
}
$params:将参数名当做键名,用参数值作为数组元素值,组成的关联数组
$template:smarty对象
显示数据:
1)直接输出:操作轻松
2)assign传递前台:可以自由的控制样式
【简易的缓存控制】
缓存目录
$tpl -> cache_dir = "./cache";
缓存时间:时间超过后回重新的生成缓存
$tpl -> cache_life_tim=60
打开缓存:
$tpl -> caching = true;
false:就是关闭缓存
display("index.tpl",20111199)
第二个参数是缓存文件快速识别的ID编号
clearallcache():清除缓存目录下得所有的缓存文件
clearcache("那个缓存文件"):清除那个缓存文件
iscached():判断缓存是否已经存在
plugins插件中的所有插件在默认情况下,全部是会生成缓存的
regist_block("前台标签名","PHP函数名",true|false);
1)在当前PHP页面中定义一个函数
2)将函数注册成插件
3)true|false:控制是否缓存的;
regist_function("前台标签名","PHP函数名",true|false);
【静态HTML页面的生成和原理】
为了提高SEO优化和页面加载速度
伪静态
方法:
1)字符串替换,文件操作
2)使用输出流:输出到终端的数据流
5 4 3 2 1
ob_start():打开输出流缓冲池
ob_get_contents():从缓冲池中取得数据
ob_clear():清除缓冲池
3)使用smarty内置函数
fetch(模板文件名[,缓存编号])
如果没有缓存文件,fetch去编译目录下找编译文件生成html代码
如果有缓存,fetch自动的加载缓存后的文件
返回的模板文件被编译后生成的HTML代码;
时间:
1)手动生成:后台设置功能按钮
2)自动生成:
即时生成静态HTML页面
根据时间设置生成HTML
【多国语言网站】
1)风格设计
风格完全不同,设计两套 调用模板页面使用session固定风格
风格一样,内容不一样,那么使用语言包使用
2)数据库设计
1]数据库级别:浪费磁盘空间 数据量较大时,推荐使用
数据库名
ch_gccms
en_gccms
2]表级别:现在比较实用一种方式,检索速度不影响,磁盘浪费不严重
表名:
ch_news
en_news
3]字段级别:检索速度较慢 不浪费磁盘空间
news
id ch_title en_title ch_content en_content
3)程序设计
使用session保存语言类型,然后根据session语言类型调去不同语言的数据内容和模板风格 为了应付客户端每个人的选择,可以使用cookie保存用户数据.
【单入口程序中引入smarty】
1)使用smarty目录替换掉原来的gctemplate;
2)将smarty的配置文件引入到单入口的配置文件中
3)将将smarty的初始化信息,放入到model.class.php页面
4)3.0以后,将common.inc.php中的autoload和smarty中的autoload合并;
注意:将model.class.php中display内的模板文件后缀改掉;