陈力:传智播客古代 珍宝币 泡泡龙游戏开发第53讲:PHP smarty模板配置及变量操作
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第53讲:PHP smarty模板配置及变量操作
描述: smarty模板技术为PHP程序设计中处理和界面的分离提供了很大的便利。如果分配整型、小数、布尔型、数组、对象给模板呢,本文从贵阳网站建设实践出发,对加深smarty模板变量操作处理机制的了解。陈力:传智播客古代 珍宝币 泡泡龙游戏开发第53讲:PHP smarty模板配置及变量操作
一、smarty模板安装
Smarty安装前要求web服务器运行在php4.0.6及以上版本。安装过程很简单,即解压后,将libs目录放在网站一组目录中。创建templates(放模板文件)和templates_c(放编译后的文件)目录。
Smarty模板技术的分类:smarty模板是官方推荐、phplib、公司自己开发。
例子: 使用smarty 模板引擎显示 hello,world. 通过该案例说明smarty的基本原理。
在templates目录中创建hello.tpl:
<h1>test1</h1>
{$var1}
在网站目录中创建hello.php
<?PHP
Require_once ‘./libs/Smarty.class.php’;//引入smarty
$smarty=new Smarty();
$smarty->assign(“var1”,”hello,world!”);
$smarty->display(‘hello.tpl’);
?>
运行hello.php文件即可显示hello,world!
二、smarty配置
Smarty中的{修改后可以避免和CSS中的{产生冲突。替换变量的标识分隔符一般使用<{ }>。
改分隔符有两个方法:一个直接修改源码Smarty.class.php。大概在250多行。
var $left_delimiter='{';
var $right_delimiter='}';
上面这种方法不是很灵活,通过修改即固定下来了。另一个是在程序中动态修改:
$smarty=new Smarty;
$smarty->left_delimiter=”<{”;//一般都要写在Display方法之前。
$smarty->right_delimiter=”}>”;
通过这样改动后就可以避免CSS的问题。
include_once(“Smarty/Smarty.class.php”); //包含smarty类文件
$smarty = new Smarty(); //建立smarty实例对象$smarty
$smarty->caching=false; //是否使用缓存,比如像股票之类的网站不要启动。
$smarty->template_dir = "./templates"; //设置模板目录
$smarty->compile_dir = "./templates_c"; //设置编译目录
$smarty->cache_dir = "./smarty_cache"; //缓存文件夹
//----------------------------------------------------
//左右边界符,默认为{ },但实际应用当中容易与JavaScript函数和内联样式表相冲突,建议使用<{ }> 在模板中的注释可以使用 <{* *}>
//----------------------------------------------------
$smarty->left_delimiter = "{";//修改后可以避免和CSS中的{产生冲突。
$smarty->right_delimiter = "}";
三、smarty分配变量给模板
从php分配变量给模板文件时,可以分配php支持各种数据。
Php数据类型有基本数据(int double string bool)、复合数据类型(array、object)。
通常的方法为:$smarty->assign(“变量名称”,”值”);
其中的值可以是字符串,或者是数组。
指定显示模板文件名
$smarty->display(“模板文件名”)
通过smarty模板引擎,可以将php文件获取的各种数据分配给tpl模板文件:
1. 基本数据类型(标量类型) (int double bool string)。
2. 符合数据类型(array object)。
**案例如下***
test.tpl
<h1>显示数据</h1>
<br/>
<br/>********取字符串*********<br/>
<{$aa}>
<br/>
testcontroller.php:
<?PHP
require_once "./libs/smarty.class.php";
$smarty=new smarty();
$smarty->left_delimiter="<{";//一般都要写在Display方法之前。
$smarty->right_delimiter="}>";
$smarty->assign("aa","hello");
$smarty->display("test.tpl");
?>
运行显示:
显示数据
********取字符串*********
hello
演示取整数:
在testcontroller.php中加代码:
$smarty->assign("bb"789);
$smarty->display("test.tpl");
在test.tpl文件中加代码:
<br/>********取整数*********<br/>
<{$bb}>
<br/>
演示取小数:
在testcontroller.php中加代码:
$smarty->assign("cc",789.123);
$smarty->display("test.tpl");
在test.tpl文件中加代码:
<br/>********取小数*********<br/>
<{$cc}>
<br/>
演示取布尔值:
在testcontroller.php中加代码:
$smarty->assign("dd",true);
$smarty->display("test.tpl");
在test.tpl文件中加代码:
<br/>********取布尔值*********<br/>
<{$dd}>
<br/>
演示取数组:
数组一般是从数据库中取的,这里只简单模拟一下
在testcontroller.php中加代码:
$arr1=array('上海','天津','北京');
$smarty->assign("arr1",$arr1);
$smarty->display("test.tpl");
在test.tpl文件中加代码:
<br/>********取数组*********<br/>
<{$arr1[0]}>||<{$arr1[1]}>||<{$arr1[2]}>
如果下标越界,无报错。不取出。
演示取关联数组:
在testcontroller.php中加代码:
$arr2=array('city1'=>'上海','city2'=>'天津','city3'=>'北京');
$smarty->assign("arr2",$arr1);
$smarty->display("test.tpl");
在test.tpl文件中加代码:
<br/>********取一维关联数组*********<br/>
<{$arr2.city1}>||<{$arr2.city2}>||<{$arr2.city3}>
演示取索引的二组数据:
在testcontroller.php中加代码:
//索引的二组数据
$arr3=array(array('上海','天津','北京'),array('小债','老妖','财神');
$smarty->assign("arr3",$arr3);
$smarty->display("test.tpl");
在test.tpl文件中加代码:
<br/>********取二维索引数组*********<br/>
<{$arr3[0][0]}>||<{$arr3[0][1]}>||<{$arr3[0][2]}>
<{$arr3[1][0]}>||<{$arr3[1][1]}>||<{$arr3[1][2]}>
演示取关联二组数据:
在testcontroller.php中加代码:
//关联的二组数据
$arr4=array(array('id'=>'a001','email'=>'xiaoin@sqq.com','age'=>23),array('id'=>'a002','email'=>'12333@sqq.com','age'=>66));
$smarty->assign("arr4",$arr4);
$smarty->display("test.tpl");
在test.tpl文件中加代码:
<br/>********取关联二维数组*********<br/>
<{$arr4[0].email}>||<{$arr4[0].age}>
演示取关联二组数据1:
//关联的二组数据1
$arr5=array('emp1'=>array('id'=>'a001','email'=>'xiaoin@sqq.com','age'=>23),'emp2'=>array('id'=>'a002','email'=>'12333@sqq.com','age'=>66));
$smarty->assign("arr5",$arr5);
$smarty->display("test.tpl");
在test.tpl文件中加代码1:
<br/>********取关联二维数组1*********<br/>
<{$arr5.emp2.email}>||
演示取关联二组数据2 (外关联内索引:
//关联的二组数据(外关联内索引
//关联的二组数据2(外关联内索引)
$arr6=array('emp1'=>array('a001','xiaoin@sqq.com',23),'emp2'=>array('a002','12333@sqq.com',66));
$smarty->assign("arr6",$arr6);
$smarty->display("test.tpl");
在test.tpl文件中加代码1:
<br/>********取关联二维数组2 (外关联内索引*********<br/>
<br/>********取关联二维数组2(外关联内索引)*********<br/>
<{$arr6.emp1[0]}>||<{$arr6.emp1[1]}>||<{$arr6.emp1[2]}>
演示取关联三组数据
//关联的三组数据,如果要取hello2
$arr7=array('emp1'=>array(array('hello1','hello2'),'xiaoin@sqq.com',23),'emp2'=>array('a002','12333@sqq.com',66));
$smarty->assign("arr7",$arr7);
$smarty->display("test.tpl");
在test.tpl文件中加代码:
<br/>********取关联三 维数组*********<br/>
<{$arr7.emp1[0][1]}>||
四、smarty对象的分配及取值
1、演示取对象:
在testcontroller.php中加代码:
//对象的分配
class dog{
var $name;
var $age;
var $color;
function __construct($name,$age,$color)
{
$this->name=$name;
$this->age=$age;
$this->color=$color;
}
}
//实例化对象
$dog1=new dog('小黄',5,'红色');
$smarty->assign("dog1",$dog1);
在test.tpl文件中加代码:
<br/>********取对象值*********<br/>
<{$dog1->name}>||
2、演示有数组的对象:
在testcontroller.php中加代码:
//对象的分配(代数组)
class dog1{
var $name;
var $age;
var $color;
var $arr;
function __construct($name,$age,$color,$arr)
{
$this->name=$name;
$this->age=$age;
$this->color=$color;
$this->arr=$arr;
}
}
//实例化对象
$arr0=array('上海','天津','北京');
$dog2=new dog1('小黄',5,'红色',$arr0);
$smarty->assign("dog2",$dog2);
在test.tpl文件中加代码:
<br/>********取对象(带数组)*********<br/>
<{$dog2->arr[0]}>||
如果要取对象中的二维数组。
在testcontroller.php中加代码:
//对象的分配(二维数组)
class dog2{
var $name;
var $age;
var $color;
var $arr;
var $arr2;
function __construct($name,$age,$color,$arr,$arr2)
{
$this->name=$name;
$this->age=$age;
$this->color=$color;
$this->arr=$arr;
$this->arr2=$arr2;
}
}
//实例化对象
$arr00=array(array('id'=>'a001','email'=>'xiaoin@sqq.com','age'=>23),array('id'=>'a002','email'=>'12333@sqq.com','age'=>66));
$dog3=new dog2('小黄',5,'红色',$arr0,$arr00);
$smarty->assign("dog3",$dog3);
在test.tpl文件中加代码:
<br/>********取对象(二维数组)*********<br/>
<{$dog3->arr2[0].email}>||
如果要取对象中的子对象属性。
在testcontroller.php中加代码:
//对象的分配(包含子对象)
class Master{
var $name;//主人.
var $address;
}
$master=new Master;
$master->name="张飞";
$master->address="盘丝洞";
class dog3{
var $name;
var $age;
var $color;
var $arr;
var $arr2;
var $master;//主人
function __construct($name,$age,$color,$arr,$arr2)
{
$this->name=$name;
$this->age=$age;
$this->color=$color;
$this->arr=$arr;
$this->arr2=$arr2;
}
}
//实例化对象
$arr00=array(array('id'=>'a001','email'=>'xiaoin@sqq.com','age'=>23),array('id'=>'a002','email'=>'12333@sqq.com','age'=>66));
$dog4=new dog3('小黄',5,'红色',$arr0,$arr00);
$dog4->master=$master;
$smarty->assign("dog4",$dog4);
$smarty->assign("dog3",$dog3);
在test.tpl文件中加代码:
<br/>********取对象(包含子对象)*********<br/>
<{$dog4->master->name}>||
五、smarty其它案例
<h1>个人信息</h1>
名字:{<$username>}<br/>
年龄:{<$userage>}<br/>
薪水:{<$salary>}<br/>
<br/>***************<br/>
喜欢的城市有:<br/>
{$my_city[0]}--{$my_city2.bj}<br/>
{$my_city[1]}--{$my_city2.sh}<br/>
{$my_city[2]}--{$my_city2.hx}<br/>
<br/>*******取出二维数据********<br/>
{$array2[0][0]}<br/>
{$array2[1][1]}<br/>
<br/>*******取出二维数据(关联数组)********<br/>
{$array22.phone.home}<br/>
{$array22.phone.office}<br/>
<br/>*******取出dog对象*****<br/>
{$dog1->name}--{$dog1->intro}
**show.php*****
<?php
require_once 'smarty_inc.php';
$username="韩顺平";
$userage="33";
$salary="2000.56";
//喜欢旅游的城市->一维数组
$cities=array("北京","上海","火星");
$cities2=array("bj"=>"北京","sh"=>"上海","hx"=>"火星");
//二维数组
$array2=array(array("苹果","草莓","大枣"),array("大象","老狐狸"));
//二维数组的关联数组,可以类推.
$array22=array("phone"=>array("home"=>"110","office"=>"999"));
//分配对象
class Dog{
var $name;
var $intro;
public function __construct($name,$intro){
$this->name=$name;
$this->intro=$intro;
}
}
$dog1=new Dog("狼牙","好狗");
$dog2=new Dog("公主","小狗");
$smarty->assign("username",$username);
$smarty->assign("userage",$userage);
$smarty->assign("salary",$salary);
//分配数组[索引数组]
$smarty->assign("my_city",$cities);
//分配关联数组
$smarty->assign("my_city2",$cities2);
//分配二维数组[索引数组]
$smarty->assign("array2",$array2);
$smarty->assign("array22",$array22);
//分配对象
$smarty->assign("dog1",$dog1);
$smarty->display("templates/index.tpl");
?>
六、smarty从配置文件中取数据
php模板引擎smarty如何使用变量?通过smarty模板引擎,可以将配置文件的配置信息分配给tpl模板文件,步骤如下:
1、先写一个配置文件 (该文件有一个格式)
格式:key = 值
比如在网站顶层目录中建一个config目录,用于存放配置文件my.conf。
my.conf内容:
title = “这是第一个网站”;
bgcolor= “pink”;
2、编写tpl模板文件。写好my.conf后,可以直接在tpl文件使用,也就是不需要重新分配。
在test.tpl文件中使用方法:
{config_load file=”路径可以使用绝对路径或者相对路径”}
{#key值#}
test.tpl中的代码如下:
<{config_load file='../config/my.conf'}>//引入配置文件
<body bgcolor='<{#bgcolor#}>'>//使用bgcolor项目。
3、编写show.php 去使用tpl文件
$smarty->display("index.tpl");
**案例如下***
my.conf
pageTitle = "my website 2no"
bodyBgColor = "pink"
***index.tpl***
{config_load file="configs/my2.conf"}
<html>
<h1>{#pageTitle#}</h1>
<title>{#pageTitle#}</title>
<body bgcolor="{#bodyBgColor#}">
</body>
</html>
****show.php***
<?php
require_once './libs/Smarty.class.php';
$smarty->display("index.tpl");
?>
七、如何取出保留的变量
通过smarty模板引擎,可以直接在tpl模板文件中来访问PHP的保留变量,比如$_GET $_SESSION $_POSt CONST。
比如通过get 方式传参数时:
http://localhost/test.php?aa=ok
在test.php文件中通过实例化smart。
$smarty->display(“temp.tpl”);
在temp.tpl文件中显示出传过来的值。此时,通过如下可以取出。
<{* <{$username}> *}>//这是传统的方法
<{$smarty.get.username}> $_GET[‘usrname’]//这些就直接使用了。
<{$smarty.post.xx}>//获取post的数据
<{$smarty.server.SERVER_NAME}>//获取server中的变量
</body>
【推荐阅读】陈力:传智播客古代 珍宝币 泡泡龙游戏开发第53讲:PHP smarty模板配置及变量操作
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第53讲:PHP smarty模板配置及变量操作相关推荐
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第47讲:PHP程序设计中的文件操作
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第47讲:PHP程序设计中的文件操作 描述:PHP程序设计语言中文件操作的函数很多,如何获取文件的信息,如果打开文件,如果关闭文件,读取文件,写入文件,复制文 ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第35讲:PHP 抽象类与接口
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第35讲:PHP 抽象类与接口 如果一个类使用abstract 来修饰,则该类就是抽象类.抽象方法是声明为abstract的,是不需要实现的,供子类继承且实现 ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第22讲:PHP语法、数据类型(整型、布尔型、浮点型、字符串型)
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第22讲:PHP语法.数据类型(整型.布尔型.浮点型.字符串型) PHP语法是什么样的,有哪些数据类型,有些什么变量.本文对PHP语法.数据类型(整型.布尔型 ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第48讲:PHP绘图技术
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第48讲:PHP绘图技术 php绘图坐标体系中,坐标原点位于左上角,以像素为单位.php绘图时,要创建画布.画出各种图形.输出图形.销毁图形(释放内存资源). ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第26讲:PHP函数
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第26讲:PHP函数 什么是PHP函数,如何通过function定义一个函数,如何理解函数的调用过程.这些问题都是网站建设中经常遇到的程序设计问题.在进行网站 ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第28讲:PHP数组
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第28讲:PHP数组 PHP程序设计语言中的数组如何创建,一维数组的引用,PHP数组变量,foreach语句,如何对数组进行排序等等知识都是贵阳网站建设中的主 ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第30讲:PHP多维数组
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第30讲:PHP多维数组 在PHP程序设计语言中,如何创建二维数组呢,怎样使用二维数组,这些问题在网站建设中非常重要.二维数组的基本语法为: $a=array ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第50讲:PHP中的xml编程
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第50讲:PHP中的xml编程 Xml是extensiable markup language的简称,包括文档声明.元素.属性.注释.CDATA区.特殊字符 ...
- 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第十讲:深入理解盒子模型
陈力:传智播客古代 珍宝币 泡泡龙游戏开发第十讲:深入理解盒子模型 摘要:通过前节<第九讲:块元素.行内元素.标准流.盒子模型>学习了前节介绍了贵阳网站建设中的DIV+CSS中类选择器.i ...
最新文章
- 新年之际,最新摄影必备的无人机免费送10个给大家!
- PLSQL中Database怎么填
- 今日arXiv精选 | 23篇顶会论文:ICASSP / ICCV / CIKM / ICME / AAAI
- Mysql事务探索及其在Django中的实践(二)
- 计算机审计操作实验目的,计算机审计实验报告 满分原创!!.docx
- Leetcode每日一题:183.customers-who-never-order(从不订购的客户)
- 【最短路径】:Dijkstra算法、SPFA算法、Bellman-Ford算法和Floyd-Warshall算法
- java 1.5 代替for循环_J2EE 1.5 提供的另一种形式的for循环
- Haar特征与积分图
- 快速移除PDF复制到WORD中的换行符
- Android 开发 修改app应用的名字和图标
- php库函数是什么,PHP常用库函数
- 调用阿里云身份证识别服务识别本地图片,很详细,附工具类
- 群晖web文件服务器docker,群晖docker搭建数据库服务器
- 微信PC端浏览器内置浏览器
- c/c++ 洛谷 P1003 【NOIP2011 提高组】 铺地毯
- 0xc000007b错误、DirectX、C++组件、缺少msvcr120.dll文件等
- 第五次作业-需求原型改进
- 想搞人工智能,却又不会用Linux?GPU主机+远程调试来帮你!
- 如何提取谷歌地球的高程点为XYZ文本