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 相关文章推荐
linux下为php添加curl扩展的方法
Jul 29 PHP
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
Jul 31 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
Apr 22 PHP
以文件形式缓存php变量的方法
Jun 26 PHP
php提高网站效率的技巧
Sep 29 PHP
学习php设计模式 php实现建造者模式
Dec 07 PHP
Yii配置与使用memcached缓存的方法
Jul 13 PHP
php操作access数据库的方法详解
Feb 22 PHP
php从数据库中获取数据用ajax传送到前台的方法
Aug 20 PHP
yii框架结合charjs实现统计30天数据的方法
Apr 04 PHP
浅析PHP中json_encode与json_decode的区别
Jul 15 PHP
浅谈如何提高PHP代码质量之单元测试
May 28 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与MongoDB简介|安全|M+PHP应用实例详解
2013/06/17 PHP
php如何连接sql server
2015/10/16 PHP
全面解析PHP面向对象的三大特征
2017/06/10 PHP
YII分模块加载路由的实现方法
2018/10/01 PHP
php中yii框架实例用法
2020/12/22 PHP
ASP小贴士/ASP Tips javascript tips可以当桌面
2009/12/10 Javascript
原生js实现查找/添加/删除/指定元素的class
2013/04/12 Javascript
js跳转页面方法总结
2014/01/29 Javascript
js实现的复制兼容chrome和IE
2014/04/03 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
[01:02:10]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第一局
2016/02/26 DOTA
[52:22]EG vs VG Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
python文件读写操作与linux shell变量命令交互执行的方法
2015/01/14 Python
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
python解决汉字编码问题:Unicode Decode Error
2017/01/19 Python
Python常用内置模块之xml模块(详解)
2017/05/23 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
python实现Dijkstra静态寻路算法
2019/01/17 Python
python模块之subprocess模块级方法的使用
2019/03/26 Python
python实现画循环圆
2019/11/23 Python
NFL墨西哥官方商店:Tienda NFL
2017/11/28 全球购物
Interhome丹麦:在线预订度假屋和公寓
2019/07/18 全球购物
枚举和一组预处理的#define有什么不同
2016/09/21 面试题
办公室副主任岗位职责
2013/11/25 职场文书
施工材料员岗位职责
2014/02/12 职场文书
学生实习证明模板汇总
2014/09/25 职场文书
《黄道婆》教学反思
2016/02/22 职场文书
2016年六一儿童节开幕词
2016/03/04 职场文书
导游词之秦皇岛燕塞湖
2020/01/03 职场文书
python 进阶学习之python装饰器小结
2021/09/04 Python
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android
索尼ICF-36收音机评测
2022/04/30 无线电
Mysql中的触发器定义及语法介绍
2022/06/25 MySQL