文章出處

一、遍歷循環

ThinkPHP 內置標簽提供了 Volist 標簽、Foreach 標簽和 For 標簽

 Home/controller/UserController.class.php 中插入一下代碼

 

1 class UserController extends Controller {
2         public function index() {
3             $user = M('User');            
4             $this->assign('data',$user->select());
5             $this->display();
6         }    
7 }

 

 

Volist 標簽:通常用于查詢數據集的結果輸出,通過 select()方法返回的是一個二
維數組,可以直接使用 volist 標簽進行輸出。

然后在 View/User/index.html 中的代碼:

1 <ul>
2     <volist name="data" id="arr">
3         <li>{$arr.id}--${$arr.user}--${$arr.email}</li>
4     </volist>
5 </ul>

PS:這里的 name="data"中的 data 是控制器給模版定義的數據變量,要對應;這里
id="arr"中的 arr 是將要遍歷循環的數組名,可以自定義

得到的結果為在瀏覽器中輸出為:

 

offset 從第幾條開始,起始值 0,length 共多少條

1 <ul>
2     <volist name="data" id="arr" offset="2" length="10">
3         <li>{$arr.id}--${$arr.user}--${$arr.email}</li>
4     </volist>
5 </ul>

 

mod 求當前余數,當前 index 除以 2 余 1,輸出偶數

1 <ul>
2     <volist name="data" id="arr" mod="2">
3         <eq name="mod" value="1">
4         <li>{$arr.id}--${$arr.user}--${$arr.email}</li>
5     </volist>
6 </ul>

因為數據庫開始是從0開始,所以除以2余1的為偶數

 

沒有數據的情況下使用 empty 填充

1 <ul>
2     <volist name="data" id="arr" empty="沒有任何數據">
3         <li>{$arr.id}--${$arr.user}--${$arr.email}</li>
4     </volist>
5 </ul>

empty 屬性不支持 HTML 直接輸入,但可以通過變量輸出

但可以在 Home/controller/UserController.class.php 中設定:

1 class UserController extends Controller {
2         public function index() {
3             $user = M('User1');        
4             $this->assign('empty','<span style="color:red">沒有任何數據</span>');
5             $this->assign('data',$user->select());
6             $this->display();
7         }    
8 }

然后在 View/User/index.html 中的代碼為:

1 <ul>
2     <volist name="data" id="arr" empty="$empty">
3         <li>{$arr.id}--${$arr.user}--${$arr.email}</li>
4     </volist>
5 </ul>

注意這時的ematy的屬性是從 Home/controller/UserController.class.php 中繼承過來的 ,  empty="$empty" 。

 

通過 key 輸出循環遍歷的變量

1 <ul>
2     <volist name="data" id="arr" key="k">
3         <li>{$k}--{$arr.id}--${$arr.user}--${$arr.email}</li>
4     </volist>
5 </ul>

輸出的結果為:

沒有指定 k,也可以用 i 變量輸出

1 <ul>
2     <volist name="data" id="arr" >
3         <li>{$i}--{$arr.id}--${$arr.user}--${$arr.email}</li>
4     </volist>
5 </ul>

結果和通過 key 輸出循環遍歷的變量的結果是一樣的。

 

key 變量,可以直接輸出索引值,從 0 開始

1 <ul>
2     <volist name="data" id="arr" >
3         <li>{$key}--{$arr.id}--${$arr.user}--${$arr.email}</li>
4     </volist>
5 </ul>

 

Foreach 標簽和 Volist 標簽類似,只不過 Foreach 標簽更加簡單,沒有額外屬性。

1 <ul>
2     <foreach name="data" item="arr"  >
3         <li>{$arr.id}--${$arr.user}--${$arr.email}</li>
4     </foreach>
5 </ul>

主要注意的是,這里是 item="arr" ,不再是 id="arr" 

 

foreach只支持 key 屬性,但{$key}變量支持,兩個的結果是一樣的

支持{$key}變量

1 <ul>
2     <foreach name="data" item="arr"  >
3         <li>{$key}--{$arr.id}--${$arr.user}--${$arr.email}</li>
4     </foreach>
5 </ul>

支持key屬性

1 <ul>
2     <foreach name="data" item="arr" key="k"  >
3         <li>{$k}--{$arr.id}--${$arr.user}--${$arr.email}</li>
4     </foreach>
5 </ul>

 

For標簽就是簡單的循環標簽

從 1 到 99 循環

1 <for start="1" end="100">
2     {$i}<br/>
3 </for>

這里不是1到100,而是1到99

 

 

除了start和end必須值,還有三個可選值。comparison是大于還是小于,默認值為lt
(<);name是循環變量名,默認值為i;step是步進值,默認為1。

1 <for start="1" end="100" comparison="lt" step="3" name="b">
2     {$b}<br/>
3 </for>

 

三.其他標簽

ThinkPHP 模版中還有一些其他標簽。

在模版中定義變量,value 值可以為變量($user)或系統變量($Think.get.user)

1 <assign name="var" value="124" />
2 {$var}

這時輸出結果為: 124 ;

 $Think.get.user 可以從url的最后中的user的值來獲取,這個在原先講過,這里就不贅述了。

 

在模版中定義常量,value 值可以為變量($user)或系統變量($Think.get.user)

1 <define name="MY_NAME" value="563" />
2     {$Think.const.MY_NAME}

這時輸出結果為: 563 ,需要注意的是,這時候不能在輸出的時候直接用 $MY_NAME ,直接用這個的話沒有任何輸出結果。

 

import 導入標簽可以智能的導入 js 和 css 文件

常規引入方法,在 View/User/index.html 中的引入為:

1 <html>
2 <head></head>
3 <script type="text/javascript" src="__PUBLIC__/js/index.js"></script>
4 <link rel="stylesheet" type="text/css" href="__PUBLIC__/css/index.css"/>
5 <body>
6 </body>
7 </html>    

這里的 __PUBLIC__ 就是主目錄下的public文件夾,如下圖:

 

 

使用 import 導入,js 和 css 是目錄

1 <html>
2 <head></head>
3 <import type="js" file="js.index" />
4 <import type="css" file="css.index" />
5 <body>
6 </body>
7 </html>    

file里的第一個js是public下的js文件夾,后面那個index是js文件的名字,不用帶上js這個后綴名

 

使用 import 導入,basepath 修改默認路徑

 

1 <html>
2 <head></head>
3 <import type="js" file="js.index" basepath="./Common" />
4 <import type="css" file="css.index" basepath="./Common" />
5 <body>
6 </body>
7 </html>    

 

 

 

load 加載標簽可以智能的加載 js 和 css 文件

1 <html>
2 <head></head>
3 <load href="__PUBLIC__/js/index.js" />
4 <load href="__PUBLIC__/css/index.css" />
5 <body>
6 </body>
7 </html>    

 

系統還提供了專用 js 和 css 標簽,專門用于加載

1 <html>
2 <head></head>
3 <js href="__PUBLIC__/js/index.js" />
4 <css href="__PUBLIC__/css/index.css" />
5 <body>
6 </body>
7 </html>    

 

PHP 代碼可以和標簽在模版文件中混合使用,可以在模版文件里面書寫任意的 PHP 語句代碼。

使用php標簽:

 

 1 <html>
 2 <head></head>
 3 
 4 <body>
 5 
 6 <php>
 7 $a=1;
 8 $b=2;
 9 echo $c=$a+$b;
10 </php>
11 
12 </body>
13 </html>    

 

使用php語法:

 1 <html>
 2 <head></head>
 3 
 4 <body>
 5 
 6 <?php
 7 $a=1;
 8 $b=2;
 9 echo $c=$a+$b;
10 ?>
11 
12 </body>
13 </html>    

這兩個輸出的結果都是直接為“3”。

 

如果想原樣輸出標簽極其內容,可以使用 literal 標簽

 

 1 <html>
 2 <head></head>
 3 
 4 <body>
 5 
 6 <literal>
 7     <php>echo 123;</php>
 8 </literal>
 9 
10 </body>
11 </html>    

 

這時輸出結果為: echo 123; 為什么沒有連 <php></php> 一起輸出呢?因為這里  <php></php> 是相當于標簽來用的。


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()