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"
