PHP模板引擎Smarty中变量的使用方法示例


Posted in PHP onApril 11, 2016

本文实例讲述了PHP模板引擎Smarty中变量的使用方法。分享给大家供大家参考,具体如下:

一、概述:

Smarty 是 PHP 众多模板引擎中的一个,它是根据 PHP 编写的一个类库。
Smarty 的优点:
1、优化网站访问速度;
2、网页前端设计和程序的分离;

二、Smarty 的安装

1、需要到 Smarty 的官方网站 http://www.smarty.net/download.php 下载最新的 Smarty 版本,比如下载的版本为:Smarty-2.6.18.tar.tar;

2、解压 Smarty-2.6.18.tar.tar 压缩包,会发现都很多文件和文件夹,除了 libs 文件夹外,其他的全部删除,都没有用;

3、当调用 Smarty 模板引擎时,应先使用 PHP 的 require 语句载入 libs/Smarty.class.php 这个文件。

三、Smarty 类库的默认设置

require 进 Smarty.class.php 文件后,如果需要对 Smarty 类库中的成员进行设置,有两种方法:一种是直接在 Smarty.class.php 文件中修改;一种是在初始化类库之后进行重新指定,一般使用后者。下面对 Smarty 类库中的成员属性进行说明:

1、$template_dir:设置网站中的模板文件存放的目录,默认目录是 templates
2、$compile_dir:设置网站中编译文件存放的目录,默认目录是 templates_c
3、$config_dir:定义用于存放模板特殊配置文件的目录,默认是 configs
4、$left_delimiter:用于模板中的左结束符变量,默认是 '{'
5、$right_delimiter:用于模板中的右结束符变量,默认是 '}'

四、变量的使用:

Smarty 中所有的访问都是基于变量的,下面通过一个实例来进行说明。

实例思路:主文件通过引入模板初始化配置文件(init.inc.php)和一个类,并对模板中的变量进行赋值显示。

首先,设置 init.inc.php 文件,作为 Smarty 模板的初始化配置文件
init.inc.php

<?php
  define('ROOT_PATH', dirname(__FILE__)); //定义网站根目录
  require ROOT_PATH.'/libs/Smarty.class.php'; //载入 Smarty 文件
  $_tpl = new Smarty();      //实例化一个对象
  $_tpl->template_dir = ROOT_PATH.'/tpl/'; //重新设置模板目录为根目录下的 tpl 目录
  $_tpl->compile_dir = ROOT_PATH.'./com/'; //重新设置编译目录为根目录下的 com 目录
  $_tpl->left_delimiter = '<{';   //重新设置左定界符为 '<{'
  $_tpl->right_delimiter = '}>';    //重新设置左定界符为 '}>'
?>

主文件 index.php

<?php
  require 'init.inc.php'; //引入模板初始化文件
  require 'Persion.class.php'; //载入对象文件
  global $_tpl;
  $title = 'This is a title!';
  $content = 'This is body content!';
  /*
  * 一、从 PHP 中分配给模板变量;
  * 动态的数据(PHP从数据库或文件,以及算法生成的变量)
  * 任何类型的数据都可以从PHP分配过来,主要包括如下
  * 标量:string、int、double、boolean
  * 复合:array、object
  *   NULL
  * 索引数组是直接通过索引来访问的
  * 关联数组,不是使用[关联下标]而是使用 . 下标的方式
  * 对象是直接通过->来访问的
  * */
  $_tpl->assign('title',$title);
  $_tpl->assign('content',$content); //变量的赋值
  $_tpl->assign('arr1',array('abc','def','ghi'));  //索引数组的赋值
  $_tpl->assign('arr2',array(array('abc','def','ghi'),array('jkl','mno','pqr'))); //索引二维数组的赋值
  $_tpl->assign('arr3',array('one'=>'111','two'=>'222','three'=>'333')); //关联数组的赋值
  $_tpl->assign('arr4',array('one'=>array('one'=>'111','two'=>'222'),'two'=>array('three'=>'333','four'=>'444'))); //关联二维数组的赋值
  $_tpl->assign('arr5',array('one'=>array('111','222'),array('three'=>'333','444'))); //关联和索引混合数组的赋值
  $_tpl->assign('object',new Persion('小易', 10)); //对象赋值
  //Smarty 中数值也可以进行运算(+-*/^……)
  $_tpl->assign('num1',10);
  $_tpl->assign('num2',20);
  $_tpl->display('index.tpl');
?>

主文件 index.php 的模板文件 index.tpl(搁置在/tpl/目录下)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title><{$title}></title>
  </head>  <body>
    变量的访问:<{$content}>
    <br />
    索引数组的访问:<{$arr1[0]}> <{$arr1[1]}> <{$arr1[2]}>
    <br />
    索引二维数组的访问: <{$arr2[0][0]}> <{$arr2[0][1]}> <{$arr2[0][2]}> <{$arr2[1][0]}> <{$arr2[1][1]}> <{$arr2[1][2]}>
    <br />
    关联数组的访问:<{$arr3.one}> <{$arr3.two}> <{$arr3.three}>
    <br />
    关联二维数组的访问:<{$arr4.one.one}> <{$arr4.one.two}> <{$arr4.two.three}> <{$arr4.two.four}>
    <br />
    关联和索引混合数组的访问:<{$arr5.one[0]}> <{$arr5.one[1]}> <{$arr5[0].three}> <{$arr5[0][0]}>
    <br />
    对象中成员变量的访问:<{$object->name}> <{$object->age}>
    <br />
    对象中方法的访问:<{$object->hello()}>
    <br />
    变量的运算:<{$num1+$num2}>
    <br />
    变量的混合运算:<{$num1+$num2*$num2/$num1+44}>
    <br />
  </body>
</html>

Persion.class.php

<?php
  class Persion {
   public $name; //为了访问方便,设定为public
   public $age;
   //定义一个构造方法
   public function __construct($name,$age) {
     $this->name = $name;
     $this->age = $age;
   }
   //定义一个 hello() 方法,输出名字和年龄
   public function hello() {
     return '您好!我叫'.$this->name.',今年'.$this->age.'岁了。';
   }
 }
?>

执行结果:

变量的访问:This is body content!
索引数组的访问:abc def ghi
索引二维数组的访问: abc def ghi jkl mno pqr
关联数组的访问:111 222 333
关联二维数组的访问:111 222 333 444
关联和索引混合数组的访问:111 222 333 444
对象中成员变量的访问:小易 10
对象中方法的访问:您好!我叫小易,今年10岁了。
变量的运算:30
变量的混合运算:94

希望本文所述对大家基于smarty模板的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP生成Flash动画的实现代码
Mar 12 PHP
简单的php数据库操作类代码(增,删,改,查)
Apr 08 PHP
PHP列出MySQL中所有数据库的方法
Mar 12 PHP
php内嵌函数用法实例
Mar 20 PHP
PHP汉字转换拼音的函数代码
Dec 30 PHP
WordPress过滤垃圾评论的几种主要方法小结
Jul 11 PHP
thinkPHP5.0框架环境变量配置方法
Mar 17 PHP
PHP 实现从数据库导出到.csv文件方法
Jul 06 PHP
PHP智能识别收货地址信息实例
Jan 05 PHP
Laravel 创建可以传递参数 Console服务的例子
Oct 14 PHP
Laravel 实现Controller向blade前台模板赋值的四种方式小结
Oct 22 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
Dec 25 PHP
php实现生成验证码实例分享
Apr 10 #PHP
PHP实现简单实用的分页类代码
Apr 08 #PHP
PHP文件上传类实例详解
Apr 08 #PHP
PHP实现基于mysqli的Model基类完整实例
Apr 08 #PHP
php生成带logo二维码方法小结
Apr 08 #PHP
PHP使用PDO操作数据库的乱码问题解决方法
Apr 08 #PHP
PHP中__autoload和Smarty冲突的简单解决方法
Apr 08 #PHP
You might like
让CodeIgniter的ellipsize()支持中文截断的方法
2014/06/12 PHP
PHP页面转UTF-8中文编码乱码的解决办法
2015/10/20 PHP
分享一个漂亮的php验证码类
2016/09/29 PHP
Nigma vs AM BO3 第一场2.13
2021/03/10 DOTA
jQuery点击tr实现checkbox选中的方法
2013/03/19 Javascript
jquery中的事件处理详细介绍
2013/06/24 Javascript
js 三级关联菜单效果实例
2013/08/13 Javascript
基于javascript实现简单计算器功能
2016/01/03 Javascript
JS日期对象简单操作(获取当前年份、星期、时间)
2016/10/26 Javascript
Javascript 跨域知识详细介绍
2016/10/30 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
2017/05/03 Javascript
JavaScript中的一些隐式转换和总结(推荐)
2017/12/22 Javascript
AjaxUpLoad.js实现文件上传功能
2018/03/02 Javascript
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
Python 自动化表单提交实例代码
2017/06/08 Python
简单谈谈python中的语句和语法
2017/08/10 Python
Python基于jieba库进行简单分词及词云功能实现方法
2018/06/16 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
python json.loads兼容单引号数据的方法
2018/12/19 Python
python画图的函数用法以及技巧
2019/06/28 Python
Python 获取ftp服务器文件时间的方法
2019/07/02 Python
Django 开发环境配置过程详解
2019/07/18 Python
django使用F方法更新一个对象多个对象字段的实现
2020/03/28 Python
在pycharm创建scrapy项目的实现步骤
2020/12/01 Python
深入浅析css3 中display box使用方法
2015/11/25 HTML / CSS
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
华为消费者德国官方网站:HUAWEI德国
2020/11/03 全球购物
医生自荐信
2013/10/11 职场文书
家电业务员岗位职责
2014/03/10 职场文书
物业保安员岗位职责
2014/03/14 职场文书
教师个人培训总结
2015/02/11 职场文书
具结保证书范本
2015/05/11 职场文书
教育教学工作反思
2016/02/24 职场文书
送给自己的励志语句:要安静的优秀,悄无声息的坚强
2019/11/26 职场文书
微信小程序和php的登录实现
2021/04/01 PHP
详解Java分布式事务的 6 种解决方案
2021/06/26 Java/Android