smarty 基本应用

Posted on Posted in thinkphp
Tips: 本文创建于2014年5月9日,已超过 2 年,内容或图片可能已经失效!

目录

smarty
模版引擎技术

模版语法TPL语法

限定符

{} eg:{$name}

设置限定符

[code lang="html"]
smarty.class.php
left_delimiter right_delimiter
$smt->left_delimiter = '{{'; / '<!--{';
$smt->right_delimiter = '}}'; / '}-->';
[/code]

注释

花括号是限定符(没改动过的)
{*注释内容*}

分配数据

[code lang="php"]
<?php
// smarty 库文件目录
require 'libs/Smarty.class.php';
// 实例化一个Smarty
$smt = new Smarty ();
// 分配变量
$smt->assign ( 'name', '张三' );
// 模版目录
$smt->setTemplateDir ( './views' );
// 编译目录
$smt->setCompileDir ( './views_c' );
// 模版文件
$smt->display ( 'hello.tpl' );
?>
[/code]

保留变量

服务器地址
{$smarty.server.SERVER_ADDR}
请求来源
{$smarty.server.HTTP_USER_AGENT}
超全局变量
$smarty.server|get|post.name
当前时间戳
$smarty.now
{$smarty.now|date_format}
访问常量
$smarty.const
$smarty.const.API
引用所有限定符
{$smarty.ldelim}$name{$smarty.rdelim} -> 输出 {$name}

变量调节器,变量修改器

date_format
date_format支持格式:

  • %a - 当前区域星期几的简写
  • %A - 当前区域星期几的全称
  • %b - 当前区域月份的简写
  • %B - 当前区域月份的全称
  • %c - 当前区域首选的日期时间表达
  • %C - 世纪值(年份除以 100 后取整,范围从 00 到 99)
  • %d - 月份中的第几天,十进制数字(范围从 01 到 31)
  • %D - 和 %m/%d/%y 一样
  • %e - 月份中的第几天,十进制数字,一位的数字前会加上一个空格(范围从 ' 1' 到 '31')
  • %g - 和 %G 一样,但是没有世纪
  • %G - 4 位数的年份
  • %h - 和 %b 一样
  • %H - 24 小时制的十进制小时数(范围从 00 到 23)
  • %I - 12 小时制的十进制小时数(范围从 00 到 12)
  • %j - 年份中的第几天,十进制数(范围从 001 到 366)
  • %k - 小时,24 小时格式,没有前导零
  • %l - 小时,12 小时格式,没有前导零
  • %m - 十进制月份(范围从 01 到 12)
  • %M - 十进制分钟数
  • %n - 换行符
  • %p - 根据给定的时间值为 `am' 或 `pm',或者当前区域设置中的相应字符串
  • %r - 用 a.m. 和 p.m. 符号的时间
  • %R - 24 小时符号的时间
  • %S - 十进制秒数
  • %t - 制表符
  • %T - 当前时间,和 %H:%M:%S 一样
  • %u - 星期几的十进制数表达 [1,7],1 表示星期一
  • %U - 本年的第几周,从第一周的第一个星期天作为第一天开始
  • %V - 本年第几周的 ISO 8601:1988 格式,范围从 01 到 53,第 1 周是本年第一个至少还有 4 天的星期,星期一作为每周的第一天。(用 %G 或者 %g 作为指定时间戳相应周数的年份组成。)
  • %w - 星期中的第几天,星期天为 0
  • %W - 本年的第几周数,从第一周的第一个星期一作为第一天开始
  • %x - 当前区域首选的时间表示法,不包括时间
  • %X - 当前区域首选的时间表示法,不包括日期
  • %y - 没有世纪数的十进制年份(范围从 00 到 99)
  • %Y - 包括世纪数的十进制年份
  • %Z - 时区名或缩写
  • %% - 文字上的 `%' 字符

[code lang="php"]
<?php
$config['date'] = '%I:%M %p';
$config['time'] = '%H:%M:%S';
$smarty->assign('config', $config);
$smarty->assign('yesterday', strtotime('-1 day'));
?>
{$smarty.now|date_format}
{$smarty.now|date_format:"%D"}
{$smarty.now|date_format:$config.date}
{$yesterday|date_format}
{$yesterday|date_format:"%A, %B %e, %Y"}
{$yesterday|date_format:$config.time}
// 输出是:
// Jan 1, 2022
// 01/01/22
// 02:33 pm
// Dec 31, 2021
// Monday, December 1, 2021
// 14:33:00
[/code]

truncate

[code lang="php"]
<?php
$smarty->assign('articleTitle', 'Two Sisters Reunite after Eighteen Years at Checkout Counter.');
?>
{$articleTitle}
{$articleTitle|truncate}
{$articleTitle|truncate:30}
{$articleTitle|truncate:30:""}
{$articleTitle|truncate:30:"---"}
{$articleTitle|truncate:30:"":true}
{$articleTitle|truncate:30:"...":true}
{$articleTitle|truncate:30:'..':true:true}
// 输出:
// Two Sisters Reunite after Eighteen Years at Checkout Counter.
// Two Sisters Reunite after Eighteen Years at Checkout Counter.
// Two Sisters Reunite after...
// Two Sisters Reunite after
// Two Sisters Reunite after---
// Two Sisters Reunite after Eigh
// Two Sisters Reunite after E...
// Two Sisters Re..ckout Counter.
[/code]

nl2br

[code lang="php"]
<?php
$smarty->assign('articleTitle',
"Sun or rain expected\ntoday, dark tonight"
);

?>
{$articleTitle|nl2br}
// 输出:
// Sun or rain expected<br />today, dark tonight
[/code]

indent

[code lang="php"]
<?php
$smarty->assign('articleTitle',
'NJ judge to rule on nude beach.
Sun or rain expected today, dark tonight.
Statistics show that teen pregnancy drops off significantly after 25.'
);
?>
{$articleTitle}
{$articleTitle|indent}
{$articleTitle|indent:10}
{$articleTitle|indent:1:"\t"}
//输出:
//NJ judge to rule on nude beach.
//Sun or rain expected today, dark tonight.
//Statistics show that teen pregnancy drops off significantly after 25.

// NJ judge to rule on nude beach.
// Sun or rain expected today, dark tonight.
// Statistics show that teen pregnancy drops off significantly after 25.

// NJ judge to rule on nude beach.
// Sun or rain expected today, dark tonight.
// Statistics show that teen pregnancy drops off significantly after 25.

// NJ judge to rule on nude beach.
// Sun or rain expected today, dark tonight.
// Statistics show that teen pregnancy drops off significantly after 25.
[/code]

escape
{$code|escape:"html"}
{$code|escape:"url"}

replace
{$sign|replace:"原内容":"替换内容"}

复合调节器
通过管道调用
{$goods|truncate:200:"...":true|nl2br}

配置系统

增加配置文件

默认的配置目录为当前下的configs目录
配置文件后缀名为.conf
$smarty->setConfigDir();
eg:peizhi.conf
bg_color="#ffffff"
page_title="PHP"

加载配置文件

{config_load file="peizhi.conf"}

使用配置项

[code lang="html"]
{config_load file="peizhi.conf"}
<title>{#page_color#}</title>
<body bgcolor="{#bg_color#}">
</body>
[/code]

配置项,也称配置变量。也可以使用变量调节器:
{#page_title#|truncate:10}

smarty函数

If elseif else
{if 条件表达式}
{elseif 条件表达式}
{else}
{/if}

Foreach foreachelse
用于遍历数组
语法如下:
{foreach }
循环体
{foreachelse}
数据存在或者为空
{/foreach}
设定数组,与值变量,键变量
{foreach $arrayvar as $itemvar}
{foreach $arrayvar as $keyvar=>$itemvar}

cycle

[code lang="html"]
{foreach $list AS $key => $value}
<tr bgcolor="{cycle values="red,yellow"}">
<td>{$value@index} - {$value@iteration}</td>
<td>{$value.Engine}</td><td>{$value['Transactions']|default:'NULL'}</td><td>{$value["Comment"]}</td>
</tr>
{foreachelse}
[/code]

smarty不解析限定符

[code lang="smarty"]
{literal}
中间内容smarty不解析
{/literal}
[/code]

» 转载请注明来源:若我若鱼 » smarty 基本应用

Leave a Reply

Your email address will not be published. Required fields are marked *

twelve − six =