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 相关文章推荐
BBS(php &amp; mysql)完整版(四)
Oct 09 PHP
逐步提升php框架的性能
Jan 10 PHP
linux系统上支持php的 iconv()函数的方法
Oct 01 PHP
coreseek 搜索英文的问题详解
Jun 08 PHP
php使用curl发送json格式数据实例
Dec 17 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
Aug 04 PHP
php实现文本数据导入SQL SERVER
May 17 PHP
PHP查看当前变量类型的方法
Jul 31 PHP
PHP递归遍历多维数组实现无限分类的方法
May 06 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
PHP操作路由器实现方法示例
Apr 27 PHP
PHP使用QR Code生成二维码实例
Jul 07 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
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
PHP实现多关键字加亮功能
2016/10/21 PHP
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
Javascript开发之三数组对象实例介绍
2012/11/12 Javascript
js Dialog 去掉右上角的X关闭功能
2014/04/23 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
JavaScript编程中容易出BUG的几点小知识
2015/01/31 Javascript
nodejs事件的监听与触发的理解分析
2015/02/12 NodeJs
JavaScript实现自动对页面上敏感词进行屏蔽的方法
2015/07/27 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
学习javascript面向对象 javascript实现继承的方式
2016/01/04 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
JavaScript实现区块链
2018/03/14 Javascript
Bootstrap开发中Tab标签页切换图表显示问题的解决方法
2018/07/13 Javascript
Vue路由history模式解决404问题的几种方法
2018/09/29 Javascript
微信小程序使用 vant Dialog组件的正确方式
2020/02/21 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
pycharm远程linux开发和调试代码的方法
2018/07/17 Python
基于Python实现定时自动给微信好友发送天气预报
2018/10/25 Python
python paramiko利用sftp上传目录到远程的实例
2019/01/03 Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
2020/01/23 Python
Python TestSuite生成测试报告过程解析
2020/07/23 Python
世界上最大的字体市场:MyFonts
2020/01/10 全球购物
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
幼儿园校车司机的岗位职责
2014/01/30 职场文书
大课间活动实施方案
2014/03/06 职场文书
小班评语大全
2014/05/04 职场文书
讲解员培训方案
2014/05/04 职场文书
借款担保书范文
2014/05/13 职场文书
质量标语大全
2014/06/12 职场文书
先进学校事迹材料
2014/12/30 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书
mysql sock文件存储了什么信息
2022/07/15 MySQL