smarty模板操作變量


smarty模板技術分配變量的細節問題。
從php中獲取數據
 
一句話:可以分配php支持的各種數據類型。
php:  基本數據類型 int double string bool
          復合數據類型 array object
 
          特殊數據類型  null resourse
 
調用從PHP分配的變量需在前加"$"符號.(譯注:同php一樣)
調用模板內的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 />
 
///////附上源文件
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"

 

 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM