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读取javascript设置的cookies的代码
Apr 12 PHP
php批量上传的实现代码
Jun 09 PHP
使用配置类定义Codeigniter全局变量
Jun 12 PHP
php中print(),print_r(),echo()的区别详解
Dec 01 PHP
PHP实现动态web服务器方法
Jul 29 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
Mar 28 PHP
php简单备份与还原MySql的方法
May 09 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
May 27 PHP
PHP里面把16进制的图片数据显示在html的img标签上(实现方法)
May 02 PHP
PHP基于方差和标准差计算学生成绩的稳定性示例
Jul 04 PHP
ThinkPHP 3.2.3实现页面静态化功能的方法详解
Aug 03 PHP
php中错误处理操作实例分析
Aug 23 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
将兴奋、喜悦和坎加斯带到戴安娜:亚马逊公主
2020/03/03 欧美动漫
基于PHP与XML的PDF文档生成技术
2006/10/09 PHP
PHP中文URL编解码(urlencode()rawurlencode()
2010/07/03 PHP
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
Thinkphp使用mongodb数据库实现多条件查询方法
2014/06/26 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
2017/06/07 PHP
js onkeypress与onkeydown 事件区别详细说明
2012/12/13 Javascript
JavaScript作用域链使用介绍
2013/08/29 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
javascript的switch用法注意事项分析
2015/02/02 Javascript
JS实现带提示的星级评分效果完整实例
2015/10/30 Javascript
javascript实现2016新年版日历
2016/01/25 Javascript
Canvas 绘制粒子动画背景
2017/02/15 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
AngularJS封装$http.post()实例详解
2017/05/06 Javascript
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
2017/05/08 jQuery
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
2017/07/31 Javascript
前端常见跨域解决方案(全)
2017/09/19 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
基于Vue实现可以拖拽的树形表格实例详解
2018/10/18 Javascript
Vuex实现数据增加和删除功能
2019/11/11 Javascript
vue 使用v-for进行循环的实例代码详解
2020/02/19 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
python实现字符串和日期相互转换的方法
2015/05/13 Python
Python实现代码统计工具(终极篇)
2016/07/04 Python
Python中交换两个元素的实现方法
2018/06/29 Python
python获取array中指定元素的示例
2019/11/26 Python
浅谈pytorch 模型 .pt, .pth, .pkl的区别及模型保存方式
2020/05/25 Python
Python操作MySQL数据库的示例代码
2020/07/13 Python
windows10在visual studio2019下配置使用openCV4.3.0
2020/07/14 Python
美国大码时尚女装购物网站:ELOQUII
2017/12/28 全球购物
linux面试题参考答案(11)
2016/11/26 面试题
统计系教授推荐信
2014/02/28 职场文书
企业办公室岗位职责
2014/03/12 职场文书
学会用Python实现滑雪小游戏,再也不用去北海道啦
2021/05/20 Python
python四种出行路线规划的实现
2021/06/23 Python