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 MSSQL 存储过程的方法
Dec 24 PHP
用PHP ob_start()控制浏览器cache、生成html实现代码
Feb 16 PHP
在PHP中养成7个面向对象的好习惯
Jul 17 PHP
php文件上传表单摘自drupal的代码
Feb 15 PHP
php设计模式 Template (模板模式)
Jun 26 PHP
php另类上传图片的方法(PHP用Socket上传图片)
Oct 30 PHP
PHP运行SVN命令显示某用户的文件更新记录的代码
Jan 03 PHP
php有道翻译api调用方法实例
Dec 22 PHP
PHP可变函数学习小结
Nov 29 PHP
Smarty实现页面静态化(生成HTML)的方法
May 23 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
Feb 28 PHP
PHP实现将标点符号正则替换为空格的方法
Aug 09 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动态创建Web站点的方法
2011/08/14 PHP
php打印输出棋盘的实现方法
2014/12/23 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
PHP生成短网址的思路以及实现方法的详解
2019/03/25 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
ie focus bug 解决方法
2009/09/03 Javascript
js下用层来实现select的title提示属性
2010/02/23 Javascript
js获取某月的最后一天日期的简单实例
2013/06/22 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
2016/11/03 Javascript
详解vue-Resource(与后端数据交互)
2017/01/16 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
vue实现提示保存后退出的方法
2018/03/15 Javascript
前后端如何实现登录token拦截校验详解
2018/09/03 Javascript
vue引入axios同源跨域问题
2018/09/27 Javascript
微信小程序仿知乎实现评论留言功能
2018/11/28 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
[01:20]2018DOTA2亚洲邀请赛总决赛战队LGD晋级之路
2018/04/07 DOTA
用python实现的去除win下文本文件头部BOM的代码
2013/02/10 Python
python+opencv实现高斯平滑滤波
2020/07/21 Python
Python 一键制作微信好友图片墙的方法
2019/05/16 Python
用python生成与调用cntk模型代码演示方法
2019/08/26 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
2020/02/25 Python
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
函授大专自我鉴定
2013/11/01 职场文书
小车司机岗位职责
2013/11/25 职场文书
学习2014年全国两会心得体会
2014/03/12 职场文书
《雕塑之美》教学反思
2014/04/24 职场文书
档案保密承诺书
2014/06/03 职场文书
大学生村官个人对照检查材料(群众路线)
2014/09/26 职场文书
2014年医院个人工作总结
2014/12/09 职场文书
《祁黄羊》教学反思
2016/02/20 职场文书
Python3中PyQt5简单实现文件打开及保存
2021/06/10 Python
Python pyecharts绘制条形图详解
2022/04/02 Python