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 相关文章推荐
第四节 构造函数和析构函数 [4]
Oct 09 PHP
php循环检测目录是否存在并创建(循环创建目录)
Jan 06 PHP
PHP下通过file_get_contents的代理使用方法
Feb 16 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
Nov 26 PHP
php class中self,parent,this的区别以及实例介绍
Apr 24 PHP
php指定长度分割字符串str_split函数用法示例
Jan 30 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
Apr 04 PHP
php实现支持中文的文件下载功能示例
Aug 30 PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
Apr 08 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
Sep 29 PHP
基于Laravel 多个中间件的执行顺序详解
Oct 21 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 变量定义方法
2009/06/14 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
2015/04/14 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
2015/09/22 PHP
zend framework中使用memcache的方法
2016/03/04 PHP
有效的捕获JavaScript焦点的方法小结
2009/10/08 Javascript
javascript或asp实现的判断身份证号码是否正确两种验证方法
2009/11/26 Javascript
jquery方法+js一般方法+js面向对象方法实现拖拽效果
2012/08/30 Javascript
web性能优化之javascript性能调优
2012/12/28 Javascript
jquery重新播放css动画所遇问题解决
2013/08/21 Javascript
js中文逗号转英文实现
2014/02/11 Javascript
Seajs的学习笔记
2014/03/04 Javascript
jquery trigger伪造a标签的click事件取代window.open方法
2014/06/23 Javascript
关于jQuery.ajax()的jsonp碰上post详解
2017/07/02 jQuery
vue+springmvc导出excel数据的实现代码
2018/06/27 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
浅谈vue加载优化策略
2019/03/19 Javascript
浅谈express.js框架中间件(middleware)
2019/04/07 Javascript
vue-iview动态新增和删除的方法
2020/06/17 Javascript
Vue项目配置跨域访问和代理proxy设置方式
2020/09/08 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
详解js创建对象的几种方式和对象方法
2021/03/01 Javascript
Python利用正则表达式匹配并截取指定子串及去重的方法
2015/07/30 Python
浅谈python中的面向对象和类的基本语法
2016/06/13 Python
用Python解决计数原理问题的方法
2016/08/04 Python
python 执行shell命令并将结果保存的实例
2018/05/11 Python
对numpy数据写入文件的方法讲解
2018/07/09 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
python代码能做成软件吗
2020/07/24 Python
Canvas图片分割效果的实现
2019/07/29 HTML / CSS
实用求职信范文分享
2013/12/25 职场文书
争论的故事教学反思
2014/02/06 职场文书
小学少先队活动方案
2014/02/18 职场文书
幼儿园大班见习报告
2014/10/31 职场文书
2014年学校团委工作总结
2014/12/20 职场文书
利用Python判断整数是否是回文数的3种方法总结
2021/07/07 Python