陈力:传智播客古代 珍宝币 泡泡龙游戏开发第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模板配置及变量操作相关推荐

  1. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第47讲:PHP程序设计中的文件操作

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第47讲:PHP程序设计中的文件操作 描述:PHP程序设计语言中文件操作的函数很多,如何获取文件的信息,如果打开文件,如果关闭文件,读取文件,写入文件,复制文 ...

  2. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第35讲:PHP 抽象类与接口

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第35讲:PHP 抽象类与接口 如果一个类使用abstract 来修饰,则该类就是抽象类.抽象方法是声明为abstract的,是不需要实现的,供子类继承且实现 ...

  3. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第22讲:PHP语法、数据类型(整型、布尔型、浮点型、字符串型)

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第22讲:PHP语法.数据类型(整型.布尔型.浮点型.字符串型) PHP语法是什么样的,有哪些数据类型,有些什么变量.本文对PHP语法.数据类型(整型.布尔型 ...

  4. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第48讲:PHP绘图技术

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第48讲:PHP绘图技术 php绘图坐标体系中,坐标原点位于左上角,以像素为单位.php绘图时,要创建画布.画出各种图形.输出图形.销毁图形(释放内存资源). ...

  5. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第26讲:PHP函数

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第26讲:PHP函数 什么是PHP函数,如何通过function定义一个函数,如何理解函数的调用过程.这些问题都是网站建设中经常遇到的程序设计问题.在进行网站 ...

  6. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第28讲:PHP数组

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第28讲:PHP数组 PHP程序设计语言中的数组如何创建,一维数组的引用,PHP数组变量,foreach语句,如何对数组进行排序等等知识都是贵阳网站建设中的主 ...

  7. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第30讲:PHP多维数组

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第30讲:PHP多维数组 在PHP程序设计语言中,如何创建二维数组呢,怎样使用二维数组,这些问题在网站建设中非常重要.二维数组的基本语法为: $a=array ...

  8. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第50讲:PHP中的xml编程

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第50讲:PHP中的xml编程 Xml是extensiable markup language的简称,包括文档声明.元素.属性.注释.CDATA区.特殊字符 ...

  9. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第十讲:深入理解盒子模型

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第十讲:深入理解盒子模型 摘要:通过前节<第九讲:块元素.行内元素.标准流.盒子模型>学习了前节介绍了贵阳网站建设中的DIV+CSS中类选择器.i ...

最新文章

  1. 新年之际,最新摄影必备的无人机免费送10个给大家!
  2. PLSQL中Database怎么填
  3. 今日arXiv精选 | 23篇顶会论文:ICASSP / ICCV / CIKM / ICME / AAAI
  4. Mysql事务探索及其在Django中的实践(二)
  5. 计算机审计操作实验目的,计算机审计实验报告 满分原创!!.docx
  6. Leetcode每日一题:183.customers-who-never-order(从不订购的客户)
  7. 【最短路径】:Dijkstra算法、SPFA算法、Bellman-Ford算法和Floyd-Warshall算法
  8. java 1.5 代替for循环_J2EE 1.5 提供的另一种形式的for循环
  9. Haar特征与积分图
  10. 快速移除PDF复制到WORD中的换行符
  11. Android 开发 修改app应用的名字和图标
  12. php库函数是什么,PHP常用库函数
  13. 调用阿里云身份证识别服务识别本地图片,很详细,附工具类
  14. 群晖web文件服务器docker,群晖docker搭建数据库服务器
  15. 微信PC端浏览器内置浏览器
  16. c/c++ 洛谷 P1003 【NOIP2011 提高组】 铺地毯
  17. 0xc000007b错误、DirectX、C++组件、缺少msvcr120.dll文件等
  18. 第五次作业-需求原型改进
  19. 想搞人工智能,却又不会用Linux?GPU主机+远程调试来帮你!
  20. 如何提取谷歌地球的高程点为XYZ文本

热门文章

  1. 李雅普诺夫指数对应的特征方向
  2. 解决:springmvc中接收date数据问题
  3. 为什么浏览器扩展会如此危险?
  4. 计组 - 加法器:进位链
  5. 阿里巴巴P8架构师手码SpringCloud笔记,看完不走弯路
  6. 节日活动发布,选对H5让你在老板面前大放异彩!
  7. CuteFTP上传脚本(VBS)
  8. Qt如何在QTabWidget上绘图
  9. 《MATLAB 入门之旅》知识点总结
  10. 经典Windows编程书单