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"

 

 
 
 
 
posted @ 2013-07-03 19:09  snowinmay  阅读(9989)  评论(2编辑  收藏  举报