smarty上线后不能渲染模板_smarty(引擎)

Smarty是一个将内容和表现分离的模板引擎,通过替换HTML中的{}为PHP代码实现数据展示。本文介绍了如何引入并使用Smarty,包括变量、运算符、判断、数组、循环、变量修饰器、自定义变量修饰器、避免Smarty解析、缓存等内容,并提供了配置变量的步骤及缓存管理的多种方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原理:

它是一个,将内容和表现分开的模板引擎,

有别人封装好的smarty引擎,可以下载安装就可以使用,那么就咱们使用别人封装好的smarty

50e3f24724bd75fe701be0c4a36bfcee.png

先要引入别人封装好的smarty

smarty的原理是将内容和表现,那么就肯定得有内容和表现,表的内容就是(php里的数据)表现是值html,就是不在html中写入php代码,而且还要将php数据显示到html中。smarty做的是什么呢smarty做的是将在html中的界符号( {} )替换成php能够识别的php代码

demo(html写的):

55c4542cd5bc571b63a9cfaacdb2812f.png
将这个{$demo} 替换成php能认识的标签(<?php echo $demo ?>)

调用smarty的里的(php写的)

58d6634c16a60a1078e6c1bb53060458.png

基本原理就是这样 显示的是自动将表内容和表现混写的页面(第三个页面)

主要

变量

smarty中变量有3中,普通变量、配置变量、保留变量

普通变量就是我们自己定义的变量

方法一:在PHP中定义  $smarty->assign('name','tom');//将tom赋给name,
方法二:可以在模板定义
    语法:{assign var='变量名' value='值'} //在html中直接定义
    简化写法:    {$sex='男'}     //在html中直接定义

保留变量 (Smarty中有一个特殊的保留变量(内置变量),类似于PHP中的所有的超全局变量、常量、时间等信息) 这些都是加载smarty后直接写可以

8cbe8ca81ae46eb3b86c830b9077dc7e.png

配置变量 (从配置文件中获取变量值,配置文件默认的文件夹是(configs)

1、在站点下创建配置文件夹 configs

2、在configs目录下创建smarty.conf文件 (这样写加载进来的时候方便)

{config_load file='smarty.conf'}   <!--引入配置文件-->

2、获取配置文件中的值的方法有两种

第一:{#变量名#} 第二:{$smarty.config.变量名}

例题: 配置文件 在配置文件中,‘[ ]’表示配置文件的段落

color=#FF0000   #全局的一定要写在节的前面
size=30px
    
[spring]    # 配置文件中的段落
color=#009900;
size=20px;
​
[winter]   #配置文件中[]表示节
color=#000000;
size=5px;

HTML页面

{config_load file='smarty.conf' section='winter'}//通过section引入配置文件中的段落(节)
<style>
body{
    color:{#color#};   //color:=color:#000000;
    font-size: {$smarty.config.size}  //font-size:=size=5px;
}
</style>

运算符

8cea3be4aaf67b9701400e440228aa38.png

判断

{if 条件}      //if判断
​
{elseif 条件}
​
{else}
​
{/if}

数组

smarty中访问数组的方式有两种

数组[下标]   //数组数组的定义和,定义变量差不多,都在php和html中定义
数组.下标

循环

smarty中支持的循环有:{for}、{while}、{foreach}、{section}。对于开发来说用的最多就是{foreach}循环

{for 初始值 to 结束值 [step 步长]}   //for循环
​
{/for}
 默认步长是1
{while 条件}      //while 循环
​
{/while}
{foreach 数组 as $k=>$v}      //既能遍历关联数组也能遍历索引数组 用的多
                             // foreach 循环
{foreachelse}
    没有数组输出
{/foreach}
​
foreach的属性  @index:从0开始的索引,@iteration:从1开始的编号,@first:是否是第一个元素,@last:是否是最后一个元素
{section name=自定义名字 loop=数组}      // section 循环
​
{/section}                          //section不支持关联数组,只能遍历索引数组

变量修饰器

变量修饰器的本质就是PHP函数,用来转换数据

转成大写:{'abc'|upper} <br>                 //ABC
转成小写:{'ABC'|lower} <br>                 //abc
默认值:{$add|default:'地址不详'}<br>       //地址不详
去除标签:{'<b>你好吗</b>'|strip_tags}<br>      //你好吗
实体转换:{'<b>你好吗</b>'|escape}<br>    //<b>你好吗</b>
日期:{$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'} //年-月-日 时:分:秒
​
|称为管道运算符,将前面的参数传递后后面的修饰器使用

自定义变量修饰器

变量修饰器存放在plugins目录中

规则:

  1. 文件的命名规则:modifier.变量修饰器名称.php
  2. 文件内方法命名规则:smarty_modifier_变量修饰器名称(形参...){}

例题

1、在plugins目录中创建modifier.修饰器名字.php页面

function smarty_modifier_修饰器名字(参数,参数,...){
    return  //做什么

2、在模板中调用

{第一个参数|修饰器名字:参数:参数}   //参数之间用冒号分隔

避免Smarty解析

smarty的定界符和css、js中的大括号产生冲突的时候,css、js中的大括号不要被smarty解析

方法一:更换定界符

方法二:左大括号后面添加空白字符

方法三:{literal} {/literal}

smarty不解析{literal} {/literal}中的内容 //推荐

缓存

缓存:页面缓存、空间缓存、数据缓存。smarty中的缓存就是页面缓存

smarty的缓存是页面缓存。

开启缓存

$smarty->caching=true|1;        //开启缓存

缓存的更新

方法一:删除缓存,系统会重新生成新的缓存文件

方法二:更新了模板文件,配置文件,缓存自动更新

方法三:过了缓存的生命周期,默认是3600秒

方法四:强制更新

$smarty->force_cache=true;  //强制更新缓存  一般设条件使用

缓存的生命周期

$smarty->cache_lifetime=-1 | 0 | N
-1:永远不过期
0:立即过期
N:有效期是N秒,默认是3600秒    //推荐

局部不缓存

局部不缓存有两种方法

1、变量不缓存    {$变量名  nocache}
2、整个块不缓存   {nocache}   {/nocache}   //中间的内容 不会被缓存

清除缓存

$smarty->clearCache(模板,[识别id])      //不知道表示符的话,看下面
$smarty->clearAllCache();   //清除所有缓存

例子 缓存分页

:通过$smarty->display(模板,识别id)。通过识别id来缓存分页、集合

<?php
require './Smarty/smarty.class.php';
$smarty=new Smarty();
$smarty->caching=1;
$smarty->display('7-demo.html',$_GET['pageno']); //后面获取的get,就是识别id

html页面

<body>
    这是第{$smarty.get.pageno}页
</body>

根据,页面请求来的不同get请求的pageno,pageno每改变一次,就会缓存一次,生成一个缓存文件,可以设置识别id(_GET['pageno']);)

后面的_GET['pageno']);就是识别id

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值