Smarty模板快速入门


Posted in PHP onJanuary 04, 2007

在PHP的世界里已经出现了各式各样的模板类,但就功能和速度来说Smarty还是一直处于领先地位,因为Smarty的功能相对强大,所以使用起来比其他一些模板类稍显复杂了一点。现在就用30分钟让您快速入门。

一. 安装

    首先打开网页http://smarty.php.net/download.php,下载最新版本的Smarty。解压下载的文件(目录结构还蛮复杂的)。接下来我演示给大家一个安装实例,看过应该会举一反三的。
    (1) 我在根目录下建立了新的目录learn/,再在learn/里建立一个目录smarty/。将刚才解压缩出来的目录的libs/拷贝到smarty/里,再在smarty/里新建templates目录,templates里新建cache/,templates/,templates_c/, config/.

    (2) 新建一个模板文件:index.tpl,将此文件放在learn/smarty/templates/templates目录下,代码如下: 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">   
<html>   
<head>   
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">   <title>Smarty</title>   
</head>   
<body>   
{$hello}   
</body>   
</html> 

新建index.php,将此文件放在learn/下: 

<?php   
//引用类文件   
require 'smarty/libs/Smarty.class.php';   $smarty = new Smarty;   
//设置各个目录的路径,这里是安装的重点   
$smarty->template_dir = "smarty/templates/templates";   
$smarty->compile_dir = "smarty/templates/templates_c";   
$smarty->config_dir = "smarty/templates/config";   
$smarty->cache_dir = "smarty/templates/cache";    
    
//smarty模板有高速缓存的功能,如果这里是true的话即打开caching,但是会造成网页不立即更新的问题,当然也可以通过其他的办法解决   
$smarty->caching = false;   
$hello = "Hello World!";   
//赋值   
$smarty->assign("hello",$hello);   
//引用模板文件   
$smarty->display('index.tpl');   
?>
 

(3) 执行index.php就能看到Hello World!了。

二. 赋值

       在模板文件中需要替换的值用大括号{}括起来,值的前面还要加$号。例如{$hello}。这里可以是数组,比如{$hello.item1},{$hello.item2}…
       而PHP源文件中只需要一个简单的函数assign(var , value)。
       简单的例子:
       *.tpl:
       Hello,{$exp.name}! Good {$exp.time}

       *.php:
       $hello[name] = “Mr. Green”;

       $hello[time]=”morning”;
       $smarty->assign(“exp”,$hello);

       output:
       Hello,Mr.Green! Good morning

三. 引用
       网站中的网页一般header和footer是可以共用的,所以只要在每个tpl中引用它们就可以了。
       示例:*.tpl:
    {include file="header.tpl"}

       {* body of template goes here *}

       {include file="footer.tpl"}

四. 判断
       模板文件中可以使用if else等判断语句,即可以将一些逻辑程序放在模板里。"eq", "ne", "neq", "gt", "lt", "lte", "le",  "gte"  "ge", "is even", "is odd", "is not even", "is not odd", "not", "mod", "div by", "even by", "odd by","==","!=",">", "<","<=",">="这些是if中可以用到的比较。看看就能知道什么意思吧。

      示例:
      {if $name eq "Fred"}

                     Welcome Sir.

    {elseif $name eq "Wilma"}

                     Welcome Ma'am.   

    {else}
                     Welcome, whatever you are.

    {/if}

五. 循环

       在Smarty里使用循环遍历数组的方法是section,如何赋值遍历都是在模板中解决,php源文件中只要一个assign就能解决问题。
       示例:
{* this example will print out all the values of the $custid array *}

{section name=customer loop=$custid}

              id: {$custid[customer]}<br>
{/section}

OUTPUT:

id: 1000<br>
id: 1001<br>
id: 1002<br>

六. 常见问题

       Smarty将所有大括号{}里的东西都视为自己的逻辑程序,于是我们在网页中想插入javascript函数就需要literal的帮忙了,literal的功能就是忽略大括号{}。
       示例:
{literal} 
       <script language=javascript> 

             function isblank(field) { 

                       if (field.value == '')  
                               { return false; } 

                       else 
                               { 

                               document.loginform.submit(); 
                               return true; 

                               } 

             } 

       </script> 
{/literal} 

PHP 相关文章推荐
PHP 组件化编程技巧
Jun 06 PHP
php 用checkbox一次性删除多条记录的方法
Feb 23 PHP
php 智能404跳转代码,适合换域名没改变目录的网站
Jun 04 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
Dec 18 PHP
PHP转盘抽奖接口实例
Feb 09 PHP
PHP 设计模式系列之 specification规格模式
Jan 10 PHP
php利用header函数下载各种文件
Aug 24 PHP
PHP下的浮点运算不准的解决方法
Oct 27 PHP
注释PHP和html混合代码的小技巧(分享)
Nov 03 PHP
thinkPHP线上自动加载异常与修复方法实例分析
Dec 01 PHP
微信封装的调用微信签名包的类库
Jun 08 PHP
php中Swoole的热更新实现代码实例
Mar 04 PHP
菜鸟学PHP之Smarty入门
Jan 04 #PHP
推荐php模板技术[转]
Jan 04 #PHP
推荐个功能齐全的发送PHP邮件类
Jan 03 #PHP
php和js交互一例-PHP教程,PHP应用
Jan 03 #PHP
URL Rewrite的设置方法
Jan 02 #PHP
DISCUZ 分页代码
Jan 02 #PHP
帖几个PHP的无限分类实现想法~
Jan 02 #PHP
You might like
php网页后退不再出现过期
2007/03/08 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
2013/06/05 PHP
PHP读取文件内容后清空文件示例代码
2014/03/18 PHP
使用ob系列函数实现PHP网站页面静态化
2014/08/13 PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
2014/08/18 PHP
Fleaphp常见函数功能与用法示例
2016/11/15 PHP
php批量转换文件夹下所有文件编码的函数类
2017/08/06 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
jquery实现的网页自动播放声音
2014/04/30 Javascript
node.js集成百度UE编辑器
2015/02/05 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
Angularjs根据json文件动态生成路由状态的实现方法
2017/04/17 Javascript
slideToggle+slideup实现手机端折叠菜单效果
2017/05/25 Javascript
微信小程序车牌号码模拟键盘输入功能的实现代码
2018/11/11 Javascript
微信小程序开发摇一摇功能
2019/11/22 Javascript
js实现单元格拖拽效果
2020/02/10 Javascript
解决ant design vue 表格a-table二次封装,slots渲染的问题
2020/10/28 Javascript
[07:49]2014DOTA2国际邀请赛 Newbee夺冠后采访xiao8坦言奖金会上交
2014/07/23 DOTA
Python中列表的一些基本操作知识汇总
2015/05/20 Python
Python3实现的回文数判断及罗马数字转整数算法示例
2019/03/27 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
2019/05/21 Python
numpy库与pandas库axis=0,axis= 1轴的用法详解
2019/05/27 Python
Python利用Scrapy框架爬取豆瓣电影示例
2020/01/17 Python
pycharm设置当前工作目录的操作(working directory)
2020/02/14 Python
浅谈Keras中shuffle和validation_split的顺序
2020/06/19 Python
基于CSS3制作立体效果导航菜单
2016/01/12 HTML / CSS
美国Randolph太阳镜官网:美国制造的飞行员太阳镜和射击眼镜
2018/06/15 全球购物
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
行政办公室岗位职责
2014/03/18 职场文书
服务质量承诺书
2014/03/27 职场文书
机关办公室岗位职责
2014/04/16 职场文书
司法局群众路线教育实践活动开展情况总结
2014/10/25 职场文书
2014年保险公司工作总结
2014/11/22 职场文书
乡镇法制宣传日活动总结
2015/05/05 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书
Java完整实现记事本代码
2022/06/16 Java/Android