Smarty模板技术

本文介绍了Smarty模板技术,包括其简单使用、配置、模板变量、内置函数等核心概念。Smarty允许开发者将PHP代码和HTML分离,提高开发效率。通过assign方法分配变量,结合模板中的SMARTY标记实现数据替换。此外,文章还详细讲解了Smarty的配置选项,如debugging、cache_lifetime等,并探讨了PHP分配变量、保留变量和自定义变量的用法。同时, Smarty内置的if分支和foreach循环结构为数据处理提供了便利。

模板技术,即利用特定的占位符放到一个文档中的某个部位,然后利用相应的方式找到对应的占位符,并将数据实现占位符替换

普通替换

此时用户访问就不需要在访问静态文件,直接访问php文件即可 ,这就是最基本的替换技术

编译:对与那是的php文件提供的内容和html提供的模板颈线编译,编译的结果就是形成一个可执行的PHP编译文件

smarty官网

smarty可以直接缓存,在编译的基础上访问效率更高,二次访问不需要再编译,数据实时效率低,如果访问的数据是实时的,那么不推荐使用smarty,如股票等就不推荐

smarty简单使用

smarty的使用就是将其加入到项目中,并且在项目中实现模板替换的功能

smarty的目标是将用户要显示的数据通过smarty在模板中合适的位置显示出来,这里要实现该功能一共分三步

1.在模板中使用smarty规则来定义数据存放占位符

2.使用smarty->asign('模板中变量名',‘数据’)方法将要显示的数据传递给模板

smarty替换

<?php
    //加载类
    include_once './smarty/Smarty.class.php';

    //实例化
    $smarty = new Smarty();

    //提供数据
    $smarty->assign('hello','hello world');         //数据交给smarty
    //需要注意php中的hello不需要带$符号,html中的需要带
    
    //显示模板数据
    $smarty->display('7.html');

?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=\, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    {$hello}
</body>
</html>

总结:

1.引入smarty文件

2.实例化smarty对象

3.利用smarty->assign()方法分配给显示模板显示的数据

4.使用smarty->display()方法加载模板文件

5.在模板中利用smarty标记来占位(名字必须和assign方法分配的名字一致,否则匹配不上,且php文件中,不需要带$符号,html文件中名字需要带$符号

smarty配置

smarty提供了很多配置,利用smarty对象的属性来配置

$smarty->debugging = false;                //是否开启debug调试,默认关闭

$smarty->template_dir = "remplates/"                //实际模板目录,如果指定目录不存在,那么系统就会自动去根目录下寻找

$smarty->complate_dir  =“complates_c”                //编译目录,自动生成

$smarty->config_dir = "configs/"                //配置项目录

$smarty->caching = "false"                //是否开启缓存

$smarty->cashe_lifetime=3600;                //缓存生命周期,单位s

$smarty->left_delimiter="{"                //左界定符

$smarty->right_delimiter= "}"                //右界定符

通常使用smarty时,需要设置的就是模板路径template_dir和可能冲突的分隔符left/right_delimiter

在项目开发阶段,一般不会开启缓存模式(数据更新频繁)

smarty模板变量

模板变量就是在模板中被分配的变量,以及如何使用smarty规则在模板中解析变量

在smarty模板中,我们将模板变量分为三类

PHP分配变量,即利用assign方法分配的变量

Smarty保留变量,包括超全局预定义变量和smarty的内置变量

自定义变量,用户在模板中去定义的变量(通常不用)

PHP分配变量

理论上PHP可以分配任意数据类型给模板进行解析,通常数据也就三种

标量数据:之间使用标记输出的数据

数组数据:在smarty模板中可以使用下标或通过“.”来实现访问

对象数据:通过对象访问符来访问->       ::

<?php
    //加载smarty类
    include_once "./smarty/Smarty.class.php";

    //实例化对象
    $s = new Smarty();
    
    //标量分配
    $s->assign('str','这是标量分配的数据');

    //数组分配,用点或者下标都可以,索引数组,关联数组
    $s->assign('arr',array(1,2,3));
    $s->assign('arr1',array('k1'=>'v1','k2'=>'v2'));

    //分配对象
    class p{
        public $name = 'Tom';
        public $age = 21;
    }
    $s->assign('obj',new p());

    //显示
    $s->display('9.html');

?>
<html>
    <header></header>
    <body>
        {$str}<br>
        <!-- 索引数组访问 -->
        {$arr.1},{$arr[2]}<br>
        <!-- 关联数组访问 -->
        {$arr1.k1},{$arr1['k2']}<br>
        <!-- 对象访问 -->
        {$obj->name},{$obj->age}
    </body>
</html>

smarty保留变量

smarty考虑到用户会需要经常使用的系统变量或者内部变量,这类变量通常以$samrty开始,然后类的关键字

GET数据:{$smarty.get.名字}

POST数据:{$smarty.post.名字}

session数据:{$smarty.session.名字}

cookie数据:{$smarty.cookie.名字}

REQUEST数据:{$smarty.request.名字}

server数据:{$smarty.server.大写名字}

时间戳:{$smarty.now}

模板路径:{$smarty.current_dir}

模板名字:{$smarty.template}

<?php
    //加载smarty类
    include_once "./smarty/Smarty.class.php";

    //实例化对象
    $s = new Smarty();

    //设置预定义变量
    $_GET['name'] = 'TOM';

    $s->display('10.html');
?>
<?php
    //加载smarty类
    include_once "./smarty/Smarty.class.php";

    //实例化对象
    $s = new Smarty();

    //设置预定义变量
    $_GET['name'] = 'TOM';

    $s->display('10.html');
?>

自定义变量

<html>
    {assign var = 'test' value = 'hello world'}        //定义自定义变量
    {$test}        //后面可以直接使用变量
</html>

配置文件

在smarty中,提供了一种为smarty提供个性化服务的配置文件,smarty文件可以直接使用txt格式文件,可以配置多个#代表注释,[局部配置]

<html>
    <!-- 配置文件加载 -->
    {config_load file = 'config.txt'}
    <body bgcolor="{$smarty.config.bgcolor}">
    {$smarty.get.name}<br>
    {$smarty.now}<br>
    {$smarty.template}<br>
    {$smarty.config.bgcolor}
    </body>
</html>

 内置函数

smarty内置函数就是,smarty针对分支,循环等数据处理封装的一套便于在模板中显示和操作数据的语法格式

1.分支处理:

smarty中提供了一套if分支用于简单的逻辑判定,语法格式为{if}{elseif}{/if}

<html>
    <header></header>
    {if isset($smarty.post.name)}
        {$smarty.post.name}
    {else}
    没有数据
    {/if}
</html>

2.循环结构:

foreach:遍历所有类型的数组,主要用于php分配的数据的输出的显示

<html>
    <header></header>
    <body>
        <!-- 形式一 -->
        {foreach $arr as $val}
        <!-- 显示$val的数据 -->
        {/foreach}

        <!-- 形式二 -->
        {oreach from=arr key='键名' item='值名'} 
            {$键名}{$值名}
        <!-- 以下方式也能获得数据 -->
            {$值名@key}
        {/foreach}
    </body>
</html>
<?php
    //加载smarty类
    include_once "./smarty/Smarty.class.php";

    //实例化对象
    $s = new Smarty();

    $arr = array(
        'user'=>'张三',
        'pass'=>1234656
    );
    $s->assign('user',$arr);

    $s->display('12.html');
?>
<html>
    <header></header>
    <body>
      
        {foreach from=$user key='k' item='v'}
                {$k}:{$v}<br>
                {$k}:{$v@key}:{$v}
        {/foreach}

    </body>
</html>

在smarty中,为foreach提供了很多可访问的属性,通过{$smarty.foreach.名字.属性}或者{$循环值@属性}来实现访问

index:当前数据索引(循环内部)

iteration:当前循环的此时(循环内部)

first:首次循环(循环内部)

last:最后一次循环(循环內部)

show:循环是否执行判定:true表示循环有数据,false表示没有数据(未执行)

total:foreach执行的总次数(循环内外都可以使用)

<html>
    <header></header>
    <body>
      
        {foreach from=$user key='k' item='v'}
                {$k}:{$v}<br>
                {$k}:{$v@key}:{$v}
        {/foreach}

        {assign var='user1' value = array('username','age','gender')} 
        <table border="1">
            {foreach $user1 as $value}
            {if $value@first}第一次执行循环:
            <tr>
                <th>下标</th>
                <th>循环次数</th>
                <th>值</th>
            </tr>
            {/if}
            <tr>
                <td>{$value@index}</td>
                <td>{$value@iteration}</td>
                <td>{$value}</td>
            </tr>
            
            {/foreach}
        </table>
            {if $value@show}循环有数据,一共循环了{$value@total}次{/if}

    </body>
</html>

section:遍历

遍历索引数组,通常更多的时用于没有分配数据的循环

<html>
    <body>
    {section name=任意命名 loop=传递数组|指定循环次数[step=步长][max=最大循环次数]}
        {$传递数组[section名字]遍历元素下标}
    </section>
    {assign var='arr' value=array(1,2,3,4,5)}
    {section name='id' loop=$arr max=4}
        {$arr[id]}
    {/section}
    </body>
</html>

文件包含 {include file= 'xxx.html'}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值