smarty模板技术分配变量的细节问题。
从php中获取数据
一句话:可以分配php支持的各种数据类型。
php: 基本数据类型 int double string bool
复合数据类型 array object
特殊数据类型 null resourse
调用从PHP分配的变量需在前加"$"符号.(译注:同php一样)
调用模板内的assign函数分配的变量也是这样.(译注:也是用$加变量名来调用)
调用模板内的assign函数分配的变量也是这样.(译注:也是用$加变量名来调用)
Variables loaded from config files
从配置文件读取的变量
从配置文件读取的变量
什么时候考虑用这个:当某个变量值,不希望写死在程序中,就可以通过配置文件来获取。(常见的就是配置样式)
先写一个配置文件(该文件有一个格式)
key = 值
比如
my.conf
my.ini
title = "这是第一个网站";
bgcolor = "pink";
然后可以直接使用了
不需要a$smarty -> assign();这个步骤
也就是不需要分配
使用方法
test.tpl
{config_load file="路径"}//路径可以使用绝对路径或者相对路径
取值:
{#key值#}
案例:
<{config_load file = '../config/my.conf'}>
<h2><{#title#}></h2>
使用{$smarty}获取保留变量
<{$smarty.get.password}><br />
<!-- <{$smarty.post.password}>
<{$smarty.server.SERVER_NAME}> -->
<{$smarty.server.SERVER_NAME}><br />
<!-- <{$smarty.post.password}>
<{$smarty.server.SERVER_NAME}> -->
<{$smarty.server.SERVER_NAME}><br />
///////附上源文件
1.TestController.php
1 <?php 2 3 //创建smarty对象 4 require_once './libs/Smarty.class.php'; 5 6 $smarty = new Smarty;//建立smarty实例对象$smarty 7 $smarty -> caching = false;//是否使用缓存 8 $smarty -> template_dir = "./templates";//设置模板目录 9 $smarty -> compile_dir = "./templates_c";//设置编译目录 10 $smarty -> cache_dir = "./smarty_cache";//缓存文件夹 11 //修改左右边界符号 12 $smarty -> left_delimiter="<{"; 13 $smarty -> right_delimiter="}>"; 14 15 /* 获取基本数据类型*/ 16 17 $smarty -> assign("aa","hello");//获取字符串 18 $smarty -> assign("bb",567);//获取整数 19 $smarty -> assign("cc",56.7);//获取小数 20 $smarty -> assign("dd",true);//boolean值 21 $smarty -> assign("ee",false);//boolean值 22 23 /* 复合数据类型 */ 24 25 //存放一维数组,数组一般是从数据库中取出 26 //这里先模拟数据 27 //1.普通的索引数组 28 $arr1 = array("北京","上海","杭州"); 29 30 //2.关联数组 31 $arr2 = array("city1"=>"北京","city2"=>"上海","city3"=>"杭州"); 32 33 //存放二维数组,一般从数据库提取,这里仅仅是模拟 34 //1.索引二维数组 35 $arr3 = array(array("北京","上海","杭州"),array("气温","房价","薪水")); 36 //2。关联二维数组(外面是索引,里面是关联) 37 $arr4 = array(array('id'=>'a001','email'=>'dada@gmail.com','age'=>25),array('id'=>'a002','email'=>'xixi@gmail.com','age'=>24)); 38 39 //3。关联二维数组(外面,里面都是关联) 40 $arr5 = array('emp1'=>array('id'=>'a001','email'=>'dada@gmail.com','age'=>25),'emp2'=>array('id'=>'a002','email'=>'xixi@gmail.com','age'=>24)); 41 42 //4。关联二维数组(外面是关联,里面是索引) 43 $arr6 = array('emp1'=>array('a001','dada@gmail.com',25),'emp2'=>array('a002','xixi@gmail.com',24)); 44 45 $smarty -> assign("ff",$arr1);// 46 $smarty -> assign("gg",$arr2);// 47 $smarty -> assign("hh",$arr3);// 48 $smarty -> assign("ii",$arr4);// 49 $smarty -> assign("jj",$arr5);// 50 $smarty -> assign("kk",$arr6);// 51 52 //对象的取法 53 54 class Master{ 55 var $name; 56 var $address; 57 } 58 //实例化 59 $master = new Master; 60 $master -> name = "dada"; 61 $master -> address = "海淀区"; 62 63 64 class Dog{ 65 var $name; 66 var $age; 67 var $color; 68 var $arr; 69 var $arr2;//二维数组 70 var $master; 71 function __construct($name,$age,$color,$arr,$arr2){ 72 $this -> name = $name; 73 $this -> age = $age; 74 $this -> color = $color; 75 $this -> arr = $arr; 76 $this -> arr2 = $arr2; 77 } 78 } 79 80 //实例化一个对象 81 82 $dog1 = new Dog("小马",4,"红色",$arr1,$arr4); 83 $dog1 -> master = $master; 84 85 $smarty -> assign("ll",$dog1);// 86 87 //希望把get/post/session/server的数据传递给tpl 88 // 传统 89 $username = $_GET['username']; 90 $smarty -> assign("username",$username); 91 //如果用smarty来写的话,可以直接去tpl页面获取 92 93 94 //指定用哪个模版显示 95 $smarty -> display("test.tpl");// 96 97 ?>
2.test.tpl
1 <{config_load file = '../config/my.conf'}> 2 <!doctype html> 3 <html lang="en"> 4 <head> 5 <meta charset="UTF-8"> 6 <title>Document</title> 7 <style type="text/css"> 8 body{ 9 2background: #ccc; 10 } 11 </style> 12 <link rel="stylesheet" href="css/css_base.css"> 13 </head> 14 <body bgcolor = '<{#bgcolor#}>'> 15 <div>***********从配置文件读取的变量*************</div> 16 <h2><{#title#}></h2> 17 <h1>获取数据</h1> 18 <div>***********取出字符串*************</div> 19 <{$aa}> 20 <div>***********取出整数*************</div> 21 <{$bb}> 22 <div>***********取出小数*************</div> 23 <{$cc}> 24 <div>***********boolean值-真*************</div> 25 <{$dd}> 26 <div>***********boolean值-假(返回是空的,在php中空本来就代表假的)*************</div> 27 <{$ee}> 28 <div>*********** 一维数组(普通的索引数组)*************</div> 29 <{$ff[0]}>||<{$ff[1]}>||<{$ff[2]}> 30 31 <div>*********** 一维数组(关联数组)***********</div> 32 <{$gg.city1}>||<{$gg.city2}>||<{$gg.city3}> 33 34 <div>*********** 二维数组(索引数组)***********</div> 35 <{* $arr3[0][0]表示取出arr3二维数组的第一个数组元素中的第一个元素 *}> 36 <{$hh[0][0]}>||<{$hh[1][0]}>||<{$hh[0][2]}> 37 38 <div>*********** 二维数组(关联数组,外面是索引,里面是关联)***********</div> 39 <{$ii[0].email}>||<{$ii[1].age}>||<{$ii[1].id}> 40 41 <div>*********** 二维数组(关联数组)***********</div> 42 <{* 关联数组应该用.来操作,索引数组用的是[]操作 *}> 43 44 <{$jj.emp1.email}>||<{$jj.emp1.age}>||<{$jj.emp2.id}> 45 46 <div>*********** 二维数组(关联数组,外面是关联,里面是索引)***********</div> 47 <{$kk.emp1[0]}>||<{$kk.emp1[1]}>||<{$kk.emp2[0]}>||<{$kk.emp2[1]}> 48 49 <{* 有多层数组嵌套的话,就不断递归处理 *}> 50 51 <div>*********** 取出对象属性的值***********</div> 52 取出对象普通属性的值:<{$ll -> name}>||<{$ll -> age}>||<{$ll -> color}><br /> 53 取出对象一维数组属性的值:<{$ll -> arr[0]}><br /> 54 取出对象二维数组属性的值:<{$ll -> arr2[0].id}><br /> 55 取出对象的对象属性的值:<{$ll -> master -> name}><br /><br /> 56 <div>***********属性必须是公开的,不然取不出来**************</div> 57 <div>***********传统方法**************</div> 58 <{$username}><br /> 59 <div>***********获取保留变量(get获取)**************</div> 60 <{$smarty.get.password}><br /> 61 <!-- <{$smarty.post.password}> 62 <{$smarty.server.SERVER_NAME}> --> 63 <{$smarty.server.SERVER_NAME}><br /> 64 <script src="js/js_base.js"></script> 65 </body> 66 </html>
3.my.conf
1 title = "这是第一个网站" 2 bgcolor = "pink"