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 相关文章推荐
一个程序下载的管理程序(二)
Oct 09 PHP
了解Joomla 这款来自国外的php网站管理系统
Mar 11 PHP
php INI配置文件的解析实现分析
Jan 04 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
Jan 07 PHP
php实现递归与无限分类的方法
Feb 16 PHP
php类常量用法实例分析
Jul 09 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
Feb 26 PHP
PHP6新特性分析
Mar 03 PHP
如何判断php mysqli扩展类是否开启
Dec 24 PHP
Yii 2.0中场景的使用教程
Jun 02 PHP
PHP设计模式之模板模式定义与用法详解
Dec 20 PHP
php精度计算的问题解析
Jun 21 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
如何限制访问者的ip(PHPBB的代码)
2006/10/09 PHP
基于mysql的bbs设计(三)
2006/10/09 PHP
20个2014年最优秀的PHP框架回顾
2014/10/22 PHP
PHP屏蔽过滤指定关键字的方法
2014/11/03 PHP
PHP中strpos、strstr和stripos、stristr函数分析
2016/06/11 PHP
PHP 表单提交及处理表单数据详解及实例
2016/12/27 PHP
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
2012/03/01 Javascript
jquery实现漂浮在网页右侧的qq在线客服插件示例
2013/05/13 Javascript
轻松学习Javascript闭包函数
2015/12/15 Javascript
jquery对象访问是什么及使用方法介绍
2016/05/03 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
详解Vue爬坑之vuex初识
2017/06/14 Javascript
React学习笔记之条件渲染(一)
2017/07/02 Javascript
jquery实现侧边栏左右伸缩效果的示例
2017/12/19 jQuery
详解ES6通过WeakMap解决内存泄漏问题
2018/03/09 Javascript
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
判断iOS、Android以及PC端的示例代码
2018/11/15 Javascript
JS/jQuery实现简单的开关灯效果【案例】
2019/02/19 jQuery
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
[01:16:28]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第二场 2月23日
2021/03/11 DOTA
python爬虫之urllib,伪装,超时设置,异常处理的方法
2018/12/19 Python
python之pexpect实现自动交互的例子
2019/07/25 Python
python plotly画柱状图代码实例
2019/12/13 Python
TensorFlow命名空间和TensorBoard图节点实例
2020/01/23 Python
python 元组的使用方法
2020/06/09 Python
java字符串格式化输出实例讲解
2021/01/06 Python
HTML5 Canvas draw方法制作动画效果示例
2013/07/11 HTML / CSS
英国在线药房:Express Chemist
2019/03/28 全球购物
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
美国亚洲时尚和美容产品的一站式网上商店:Stylevana
2019/09/05 全球购物
小班重阳节活动方案
2014/02/08 职场文书
大学生应聘求职信
2014/05/26 职场文书
2015年环境监察工作总结
2015/07/23 职场文书
javascript拖曳互换div的位置实现示例
2021/06/28 Javascript