模板引擎

PHP引入数据库,数据库内容遍历的显示在HTML页面中嵌套写入时

echo "<ul>";
$db = new MySql;
$db ->query(select * from ts_news);
$data = $db -> findAll();
foreach($data as $vo){
echo "<li><a href="{$vo['link']}">{$vo['title']}</a></li>"
}
echo "</ul>"

如果通过模板引擎来嵌套就会是这个样

<div>  模板文件
<ul>
{@ newslist@}
</ul>
</div>

 

模板引擎:

  PHP代码和HTML代码相分离的一种解决方案。

模板引擎优点:

  使PHP代码和HTML代码分离,并且使HTML页面更加简洁。

  PHP程序员和前端人员并行开发,提高了效率。

  网站后期更改网站风格主题更加方便。

模板引擎种类:

  Smarty  Smart  PHPlib  ThinkTemplate

Smarty好处:

  smarty是纯PHP编写的模板引擎类库。

  smarty有丰富的控制结构。

  smarty内有丰富的插件机制。

  smarty内有丰富的缓存控制,可以加快页面加载速度。

      Smarty运行原理:

  

Smarty在第一次调用模板时,运行速度是慢的,因为,模板文件要经过Smarty的解析类将模板文件编译成编译文件后才能运行,并且如果解析类查询到缓存开启,那么还会通过编译文件生成缓存文件,所以速度比直接运行PHP和HTML代码要慢,但是以后所有调用,会先判断缓存文件是否存在,如果存在就直接调用缓存文件,所以整体速度是快,如果缓存文件不在,会查询是否存在编译文件,如果编译文件存在,直接运行编译文件。如果编译文件不在,再重新编译。

Smarty的使用:

  下载smarty类库:www.smarty.net

    Smarty2.x: smarty封装内部很多标签和使用都死函数封装的。

    Smarty3.x: 使用了纯的面向对象编程。

  将类库引入项目中:

  初始化smarty对象:

    Smarty.class.php:核心解析类

    SmartyBC.class.php:2.0到3.0的过渡类

    Require_once("./libs/smarty.class.php");

    $tpl = new Smarty;

  smarty配置:

    2.0: 配置编译和模板目录

    3.0: 只配置模板目录

    $tpl -> template_dir = "./templates/";  模板目录

    $tpl -> compiler_dir = "./compilers";  编译目录

    模板文件后缀可以随意设置:  .tp  .dwz  .html  .htm  .ts

  调用前台模板文件:

    $tpl -> display("文件名");

<?php
require_once("./libs/Smarty.class.php");
$tpl = new Smarty;
$tpl -> template_dir = "./templates/";
$tpl -> compile_dir = "./compilers/";
$tpl -> display("index.html");
?>

Smarty变量:

  php分配给smarty的变量

    $tpl -> assign(“前台变量名”,值);

    前台访问:

      {$前台变量名}

    自定义左右定界符:

      $tpl -> left_delimiter = "{ts: ";

      $tpl -> right_delimiter= "}";

  smarty模板变量

    {ts:assign var="" value=""}

    var: 模板变量的变量名

    val: 模板变量的变量值

  前台样式配置变量

    {ts:$smarty.config.section.变量名}

    {ts:#变量名#}

  全局变量    

    {ts:$smarty.session|cookie|get|post|request.键名}

    $_session[‘uname’]  

    {ts:$smarty.session.uname}

  【Index.php】

<?php
require_once("./libs/Smarty.class.php");
$tpl = new Smarty;
$tpl -> template_dir = "./templates/";
$tpl -> compile_dir = "./compilers/";
$tpl -> left_delimiter = "{ts:";
$tpl -> right_delimiter= "}";
$tpl -> assign("title","This is Web Title!");
$tpl -> display("index.html");
?>

  【Index.html】

<h1>Test Template index!</h1>
{ts:$title}
<hr>
{ts:assign var="username" value="TOM"}
{ts:$username}

#在Index.php中获取前台Index.html中的值#

 

Smarty中的控制结构:

  分支结构:

    if else

    {ts:if 条件}

      代码块

    {ts:else if 条件}

      代码块

    {ts:else}

      代码块

    {ts:/if}

  【if.php】 

<?php
// if.php页面
require_once("./smarty.inc.php");
$marks = 88;
$tpl -> assign("marks",$marks);
$tpl -> display("if.html");
?>

  【if.html】

{ts:/* if.html */}
<h1>if</h1>
{ts:if $marks >=90}
优秀
{ts:else if $marks>=80}
良好
{ts:else if $marks>=60}
及格
{ts:else}
不及格
{ts:/if}

#在if.php中获取前台if.html中的值#

 

  循环结构: 关联数组最少可以省一次循环

    Foreach循环:

      格式:

      {ts:foreach name="" item="" key="" from=""}

      {ts:/foreach}

      Name:循环体的名字

      Item:被遍历出的数组元素

      Key: 数组元素的键名或者是下标

      From:被遍历的数组。

      关联数组: 数组名.键名

  【foreach.php】

<?php
require_once("./smarty.inc.php");
$sy_arr = array('a','b','c','d');
$gl_arr = array('a'=>1001,'b'=>1002,'c'=>1003,'d'=>1004);
$data = array(array('uname'=>'tom','age'=>30),
              array('uname'=>'lily','age'=>100));
$tpl -> assign("sy_arr",$sy_arr);
$tpl -> assign("gl_arr",$gl_arr);
$tpl -> assign("data",$data);

$tpl -> display("foreach.html");
?>

  【foreach.html】

<h1>foreach</h1>
{ts:foreach name="f1" item="vo" key="key" from=$sy_arr}
    {ts:$vo}<br/>
{ts:/foreach}
<hr>
{ts:foreach name="f2" item="vo" key="key" from=$gl_arr}
    {ts:$vo}<br/>
{ts:/foreach}
<font color="red">{ts:$gl_arr.b}</font>
<hr/>
{ts:foreach name="f3" item="vo" key="key" from=$data}
    {ts:foreach name="f_f3" item="vo2" key="key3" from=$vo}
        {ts:$vo2}
    {ts:/foreach}
{ts:/foreach}
<br/>
{ts:foreach name="f3" item="vo" key="key" from=$data}
        {ts:$vo.uname} {ts:$vo.age} 
{ts:/foreach}

#在foreach.php中获取前台foreach.html中的值#

 

    Section循环:可以对数据进行二次筛选。

      格式:

      {ts:section name=”” loop=”” start=”” step=”” max=”” show=””}

      {ts:/section}

      1,2,3,4,5,6,7,8,9,10

      Section:标签名

      Name:循环体名字,可以当下标使用,但是不是下标。

      Loop:被遍历的数组

      Start:遍历数组时,第一个被遍历的数据在数组中的起始位置
        正数:从左向右,找第一个元素

        负数:从右向左,找第一个元素

      Step: 步长

        正数: 从左到右

        负数:从右向左

      Max:筛选的总记录条数

      Show:指的是否显示数据   true就是显示数据,false遍历出数据不显示

  【section.php】

<?php
require_once("./smarty.inc.php");
$sy_arr = array('a','b','c','d');
$gl_arr = array('a'=>1001,'b'=>1002,'c'=>1003,'d'=>1004);
$data = array(array('uname'=>'tom','age'=>30),
              array('uname'=>'lily','age'=>100),
              array('uname'=>'jack','age'=>10));
$menu = array(array("type"=>"衣服","item"=>array("衬衣","上衣","秋衣")),array("type"=>"鞋子","item"=>array("皮鞋","球鞋","平底鞋")),array("type"=>"家居","item"=>array("床","柜子","沙发")));
$tpl -> assign("sy_arr",$sy_arr);
$tpl -> assign("gl_arr",$gl_arr);
$tpl -> assign("data",$data);
$tpl -> assign("menu",$menu);
$tpl -> display("section.html");
?>

  【section.html】

<h4>f1</h4>
{ts:section name=f1 loop=$sy_arr}
    {ts:$sy_arr[f1]}
{ts:/section}

<h4>f2</h4>
    {ts:$gl_arr.a}/{ts:$gl_arr.b}/{ts:$gl_arr.c}
<h4>f3</h4>
{ts:section name="f3" loop=$data}
    {ts:$smarty.section.f3.index}:
    {ts:if $smarty.section.f3.first}
        <font color="red">
            {ts:$data[f3].uname};
            {ts:$data[f3].age};
        </font>
    {ts:else if $smarty.section.f3.last}
        <font color="blue">
            {ts:$data[f3].uname};
            {ts:$data[f3].age};
        </font>
    {ts:else}
        {ts:$data[f3].uname};
        {ts:$data[f3].age};
    {ts:/if}
    <br/>
{ts:/section}

<h4>f1</h4>
{ts:section name=f1 loop=$sy_arr start=-1 step=-1 max=3 show=true}
    {ts:$sy_arr[f1]}
{ts:/section}
<hr>
<dl>
{ts:section name=m1 loop=$menu}
    <dt>{ts:$menu[m1].type}<dt>
    {ts:section name="m2" loop=$menu[m1].item}
    <dd>{ts:$menu[m1].item[m2]}</dd>
    {ts:/section}
{ts:/section}
</dl>
<dl>
{ts:foreach name=m1 item = vo from=$menu}
    <dt>{ts:$vo.type}<dt>
    {ts:foreach name="m2" item = v1 from=$vo.item}
    <dd>{ts:$v1}</dd>            
    {ts:/foreach}
{ts:/foreach}
</dl>

#在section.php中获取前台section.html中的值#

 

  循环属性:

    $smarty.foreach/section.name名字.属性名。

    First/last判断是否是最后一个或者第一个 数组元素

    Index:当前下标

 

文件引入:

  模板文件引入:模板文件的路径计算是以当前的模板文件为参照进行计算的。

    {ts:include file=”路径+文件名”}

  php文件引入: 以解析模板的php文件为参照来计算路径的。

    {ts:include_php file=”路径+文件名”}

    2.0:支持该标签

    3.0: 不支持,但是可以使用smartyBC类来代替Smarty类就可以使用了。

  前台样式配置文件引入:

    用途:配置前台css样式中共性很大的属性值。

    配置前台中的固定共性文字信息,图片信息。

    {ts:config_load file=”” section=””}

    Section: 设置的是调用某块的前台样式配置

  前台样式配置:

  文件名后缀: .conf

  基本语法:

    变量名=值

    [Chinese]

    Title=值

    [english]

    Title=值

  【config.conf】

title=This is my webSite
bgcolor=gray
[chinese]
title=Chinese News
bgcolor=red
[english]
title=English
bgcolor=green

  【Include.php】

<?php
require_once("./smarty.inc.php");
$tpl -> display("include.html");
?>

  【Include.html】

{ts:config_load file="config.conf"}
<hr/>
{ts:#title#}
<font style="background-color:{ts:$smarty.config.bgcolor}">HELLO</font>
<div style="width:100px;height:100px;background:{ts:#bgcolor#}">
<h4>{ts:#title#}</h4>
</div>
{ts:config_load file="config.conf" section="chinese"}
<div style="width:100px;height:100px;background:{ts:#bgcolor#}">
<h4>{ts:#title#}</h4>
</div>
{ts:config_load file="config.conf" section="english"}
<div style="width:100px;height:100px;background:{ts:#bgcolor#}">
<h4>{ts:#title#}</h4>
</div>

#在include.php中获取前台include.html和config.conf中的值#

 

转载于:https://www.cnblogs.com/shuo-128/p/6862440.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值