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 相关文章推荐
PHP5 面向对象程序设计
Feb 13 PHP
php &amp;&amp; 逻辑与运算符使用说明
Mar 04 PHP
一篇有意思的技术文章php介绍篇
Oct 26 PHP
DEDE采集大师官方留后门的删除办法
Jan 08 PHP
php中常用字符串处理代码片段整理
Nov 07 PHP
zf框架的校验器InArray使用示例
Mar 13 PHP
ThinkPHP中的常用查询语言汇总
Aug 22 PHP
php查询相似度最高的字符串的方法
Mar 12 PHP
PHP编写daemon process详解及实例代码
Sep 30 PHP
PHP 实现页面静态化的几种方法
Jul 23 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
Sep 20 PHP
php解决crontab定时任务不能写入文件问题的方法分析
Sep 16 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
有关php运算符的知识大全
2011/11/03 PHP
PHP filter_var() 函数 Filter 函数
2012/04/25 PHP
php添加文章时生成静态HTML文章的实现代码
2013/02/17 PHP
PHP5.3安装Zend Guard Loader图文教程
2014/09/29 PHP
php获取从html表单传递数组的方法
2015/03/20 PHP
JavaScript 事件记录使用说明
2009/10/20 Javascript
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
JS解析XML文件和XML字符串详解
2015/04/17 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
Angular简单验证功能示例
2017/12/22 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
JS Web Flex弹性盒子模型代码实例
2020/03/10 Javascript
JS操作JSON常用方法(10w阅读)
2020/12/06 Javascript
[01:22:42]2014 DOTA2华西杯精英邀请赛 5 24 DK VS LGD
2014/05/26 DOTA
尝试用最短的Python代码来实现服务器和代理服务器
2016/06/23 Python
Django项目中model的数据处理以及页面交互方法
2018/05/30 Python
python利用百度AI实现文字识别功能
2018/11/27 Python
利用setuptools打包python程序的方法步骤
2020/01/18 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
Python基于paramunittest模块实现excl参数化
2020/04/26 Python
python 牛顿法实现逻辑回归(Logistic Regression)
2020/10/15 Python
SVG实现多彩圆环倒计时效果的示例代码
2017/11/21 HTML / CSS
美国男女折扣服饰百货连锁店:Stein Mart
2017/05/02 全球购物
Kidsroom台湾:来自德国的婴儿用品
2017/12/11 全球购物
国贸专业毕业求职信
2014/06/11 职场文书
投标承诺函范文
2015/01/21 职场文书
副总经理岗位职责范本
2015/04/08 职场文书
2015年医务科工作总结范文
2015/05/26 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
幼儿园音乐教学反思
2016/02/18 职场文书
HTML5中的DOCUMENT.VISIBILITYSTATE属性详解
2023/05/07 HTML / CSS