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 相关文章推荐
使用MaxMind 根据IP地址对访问者定位
Oct 09 PHP
深入了解php4(1)--回到未来
Oct 09 PHP
一个PHP的QRcode类与大家分享
Nov 13 PHP
PHP 使用pcntl和libevent 实现Timer功能
Oct 27 PHP
mac下安装nginx和php
Nov 04 PHP
php 检查电子邮件函数(自写)
Jan 16 PHP
二进制交叉权限微型php类分享
Feb 07 PHP
PHP用反撇号执行外部命令
Apr 14 PHP
Yii2增删改查之查询 where参数详细介绍
Aug 08 PHP
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
Jul 10 PHP
PHP设计模式之简单工厂和工厂模式实例分析
Mar 25 PHP
Laravel框架Blade模板简介及模板继承用法分析
Dec 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分页函数
2006/07/08 PHP
PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
2007/02/15 PHP
php foreach 使用&amp;(与运算符)引用赋值要注意的问题
2010/02/16 PHP
探讨php中防止SQL注入最好的方法是什么
2013/06/10 PHP
php启用zlib压缩文件的配置方法
2013/06/12 PHP
php 不使用js实现页面跳转
2014/02/11 PHP
php实现字符串反转输出的方法
2015/03/14 PHP
学习ExtJS table布局
2009/10/08 Javascript
Jquery替换已存在于element上的event的方法
2010/03/09 Javascript
Jquery + Ajax调用webService实例代码(asp.net)
2010/08/27 Javascript
JavaScript中两种链式调用实现代码
2011/01/12 Javascript
node.js中的dns.getServers方法使用说明
2014/12/08 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
2016/01/10 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
ES6新特性七:数组的扩充详解
2017/04/21 Javascript
利用百度echarts实现图表功能简单入门示例【附源码下载】
2019/06/10 Javascript
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
2019/07/03 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
2019/07/05 Javascript
vue接口请求加密实例
2020/08/11 Javascript
Python函数参数匹配模型通用规则keyword-only参数详解
2019/06/10 Python
最新2019Pycharm安装教程 亲测
2020/02/28 Python
HTML5获取当前地理位置并在百度地图上展示的实例
2020/07/10 HTML / CSS
威尔逊皮革:Wilsons Leather
2018/12/07 全球购物
高性能装备提升营地:Kammok
2019/02/27 全球购物
局域网标准
2016/09/10 面试题
教师党员思想汇报
2014/01/06 职场文书
小学运动会广播稿200字(十二篇)
2014/01/14 职场文书
2014年党员自我评议总结
2014/09/23 职场文书
单位单身证明样本
2014/10/11 职场文书
庐山导游词
2015/02/03 职场文书
酒店服务员岗位职责
2015/02/09 职场文书
幼儿教师继续教育培训心得体会
2016/01/19 职场文书
《童年》读后感(三篇)
2019/08/27 职场文书
创业计划书之服装
2019/10/07 职场文书
SpringBoot整合RabbitMQ的5种模式实战
2021/08/02 Java/Android