模板引擎
模板引擎:将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>
好处:
一、PHP与HTML分开,能够后期方便的更改模板
二、PHP程序员和美工各司其责,并行开发,提升了开发速度;
坏处:
一、中小型的项目不适合
二、实时更新数据的网站中不适用
流行模板引擎:
smarty smart template phplibphp
smarty:
一、支持编译和缓存,能够提升用户体验度(页面加载)
二、smarty模板中有丰富的控制结构
三、smarty中具备丰富的自定义插件
四、PHP编写模板引擎-能够学习模板引擎编写
五、丰富的缓存控制html
smarty的基本使用步骤:
一、smarty.net中下载smarty包
libs->smarty
二、引入smarty
将smarty中代码引入程序
引入smarty解析类
三、初始化smarty类
$tpl = new Smarty;
2.6:
模板目录:
$tpl -> template_dir = "./tpl";
编译目录:
$tpl -> compile_dir = "./comp";
3.0
模板目录:
$tpl -> template_dir = "./tpl";
编译目录时自动生成的 template_c
四、使用smarty:
调用模板: index.html index.tpl
$tpl -> display("模板文件名");
smarty的基本操做:mysql
【变量】
一、PHP分配给smarty变量
$tpl -> assign("前台变量名",PHP变量名|数据);
模板中变量输出:
{$变量名}
防止标签成对出现:
1)原样输出不解析;
{literal}
代码{}
{/literal}
2)手动修改变量的左右定界符
$tpl -> left_delimiter = "{@ ";
$tpl -> right_delimiter ="@}";
二、smarty模板内定义的局部变量
{@ assign var="" value=""@}
var:定义的模板变量名
value:定义的变量的数据;ios
三、smarty前台样式配置变量
四、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开始
正值:从头至尾的去找起始记录
负值:从尾到头的去找起始记录sql
step:步长
正值:从头至尾的取得记录
负值:从尾到头的取得记录
eg:
start=-1 step=-1 将记录进行倒序排列数据库
max:循环次数,被遍历的数组记录条数
show:被遍历出得数据是否显示
true:显示数据
false:不显示数据
【文件引入】
一、静态模板文件引入
{@ include file="路径+文件名"@}
路径计算是以当前的模板页面计算的
另外:
{@ *注释内容*@}
二、动态PHP页面引入
{@ include_php file="路径+名字"@}
路径计算是以调用该模板的PHP页面来计算的api
或者
{@ php@}
echo "你好";
{@ /php@}数组
3.1 初始化的对象必须是smartyBC
$tpl -> allow_php_templates=true
3.0 $tpl -> allow_php_tag=true;
2.6 直接使用
三、前台样式配置文件引入:配置的是前台显示的某些数据和样式
{@ config_load file="" section=""@}
section:模块名
【前台样式配置】
注意文件后缀名:
.conf
语法格式:
变量名=值
变量2=值
.......
路径计算以该前台样式的模板文件计算的;
变量:
{@ #变量名#@}缓存
{@ $smarty.config.变量名@}
模块定义:模块区域:从定义的位置开始直到下个模块定义或者是页面结束
[模块名]
变量=值
[模块名]
【系统定义的标签】
一、单选按钮组
{@ html_radios name="" output="" values="" checked="" separator=""@}
name:单选按钮的名字
output:显示的数据内容组成的一维索引数组
values: 每一个单选按钮value值组成的一维的索引数组
checked:被选中按钮的value值
separator:按钮组的样式
options:以value当键名,以显示数据当元素值,组成的关联数组;
二、复选框按钮组
{@ html_checkboxes name="" output="" values="" checked="" separator=""@}
checked:能够是单个数值也能够是被选中的按钮value组成的一维索引数组
三、下拉列表框
{@ html_options name="" output="" values="" selected=""@}
checked改为selected
四、时间插件
{@ html_select_time@}
五、日期插件
{@ html_selecte_date start_year="" end_year=""@}
start_year:起始的年份
end_year:终止的年份
六、html_p_w_picpath
七、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内的模板文件后缀改掉;