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 相关文章推荐
经典的PHPer为什么被认为是草根?
Apr 02 PHP
PHP 字符串 小常识
Jun 05 PHP
PHP迅雷、快车、旋风下载专用链转换代码
Jun 15 PHP
浅谈PHP强制类型转换,慎用!
Jun 06 PHP
ThinkPHP自动填充实现无限级分类的方法
Aug 22 PHP
ThinkPHP静态缓存简单配置和使用方法详解
Mar 23 PHP
Zend Framework框架实现类似Google搜索分页效果
Nov 25 PHP
php+ajax无刷新上传图片的实现方法
Dec 06 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
Dec 08 PHP
Laravel框架路由设置与使用示例
Jun 12 PHP
tp5实现微信小程序多图片上传到服务器功能
Jul 16 PHP
PHP的imageTtfText()函数深入详解
Mar 03 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实现检查文章是否被百度收录
2015/01/27 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
jQuery数组处理方法汇总
2011/06/20 Javascript
如何在指定的地方插入html内容和文本内容
2013/12/23 Javascript
JS实现跟随鼠标立体翻转图片的方法
2015/05/04 Javascript
JS实现的N多简单无缝滚动代码(包含图文效果)
2015/11/06 Javascript
详解AngularJS中的filter过滤器用法
2016/01/04 Javascript
javascript事件绑定学习要点
2016/03/09 Javascript
javascript实现不同颜色Tab标签切换效果
2016/04/27 Javascript
用js读写cookie的简单方法(推荐)
2016/08/08 Javascript
js实现漫天星星效果
2017/01/19 Javascript
Javascript实现跨域后台设置拦截的方法详解
2017/08/04 Javascript
JS实现的视频弹幕效果示例
2018/08/17 Javascript
vue.js实现二级菜单效果
2019/10/19 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
2020/08/05 Javascript
python数据结构之二叉树的统计与转换实例
2014/04/29 Python
python套接字流重定向实例汇总
2016/03/03 Python
Python3如何解决字符编码问题详解
2017/04/23 Python
Django实现分页功能
2018/07/02 Python
详解Python 正则表达式模块
2018/11/05 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
2019/03/14 Python
Python中 CSV格式清洗与转换的实例代码
2019/08/29 Python
详解Python3 pickle模块用法
2019/09/16 Python
Python实现代码块儿折叠
2020/04/15 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
2020/04/30 Python
详解如何修改python中字典的键和值
2020/09/29 Python
毕业研究生的自我鉴定
2013/11/30 职场文书
尽职尽责村干部自我鉴定
2014/01/23 职场文书
应届毕业生如何写求职信
2014/02/16 职场文书
财务总经理岗位职责
2014/02/16 职场文书
2015年六一儿童节活动总结
2015/02/11 职场文书
2015年毕业生个人自荐书
2015/03/24 职场文书
终止劳动合同通知书
2015/04/16 职场文书
单位收入证明范本
2015/06/18 职场文书
Go语言切片前或中间插入项与内置copy()函数详解
2021/04/27 Golang
VMware虚拟机安装 Windows Server 2022的详细图文教程
2022/09/23 Servers