程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> smarty section、foreach 學習筆記

smarty section、foreach 學習筆記

編輯:PHP基礎知識
 

section循環

section的運用了解:
1、循環一個簡單的一維數組:
Example 7-30. Looping a simple array with {section}

<?php
$data = array(1000,1001,1002);
$smarty->assign('custid',$data);
?>

//customer和下面的foo可以隨便命名,作用其實僅僅是一個index下標,用來引用數組中的元素
{section name=customer loop=$custid}
id: {$custid[customer]}<br />
{/section}
<hr />

{section name=foo loop=$custid step=-1}
{$custid[foo]}<br />
{/section}

//輸出
id: 1000<br />
id: 1001<br />
id: 1002<br />
<hr />
id: 1002<br />
id: 1001<br />
id: 1000<br />

2、不用assign數組直接在smarty中循環:
Example 7-31. {section} without an assigned array

//特別地設置了start,step屬性用來控制循環
//$smarty.section.section的名字.index是一個特殊變量,用來顯示當前循環的位置
{section name=foo start=10 loop=20 step=2}
{$smarty.section.foo.index}
{/section}
<hr />
{section name=bar loop=21 max=6 step=-2}
{$smarty.section.bar.index}
{/section}

//輸出:
10 12 14 16 18
<hr />
20 18 16 14 12 10

3、section的name的值是隨你定的
Example 7-32. Naming a {section}

{section name=anything loop=$myArray}
{$myArray[anything].foo}
{$name[anything]} //這種用法目前還沒怎麼用過,也不太清楚
{$address[anything].bar} //這種也是
{/section}

4、遍歷一個關聯數組,嵌套的數組

<?php
$data = array(
array('name' => 'John Smith', 'home' => '555-555-5555',
'cell' => '666-555-5555', 'email' => '[email protected]'),
array('name' => 'Jack Jones', 'home' => '777-555-5555',
'cell' => '888-555-5555', 'email' => '[email protected]'),
array('name' => 'Jane Munson', 'home' => '000-555-5555',
'cell' => '123456', 'email' => '[email protected]')
);
$smarty->assign('contacts',$data);
?>

//section不用嵌套,因為只有一個數組,數組內部用$contacts[customer]得到
//每個數組,再用.鍵名來得到鍵值
{section name=customer loop=$contacts}
<p>
name: {$contacts[customer].name}<br />
home: {$contacts[customer].home}<br />
cell: {$contacts[customer].cell}<br />
e-mail: {$contacts[customer].email}
</p>
{/section}

The above example will output:

<p>
name: John Smith<br />
home: 555-555-5555<br />
cell: 666-555-5555<br />
e-mail: [email protected]
</p>
<p>
name: Jack Jones<br />
home phone: 777-555-5555<br />
cell phone: 888-555-5555<br />
e-mail: [email protected]
</p>
<p>
name: Jane Munson<br />
home phone: 000-555-5555<br />
cell phone: 123456<br />
e-mail: [email protected]
</p>
5、從數據庫查詢記錄顯示,實際上是顯示二維數組,其實同上例一樣
<?php
$sql = 'select id, name, home, cell, email from contacts '
."where name like '$foo%' ";
$smarty->assign('contacts', $db->getAll($sql));
?>

//結果:

<table>
<tr><th>&nbsp;</th><th>Name></th><th>Home</th><th>Cell</th><th>Email</th></tr>
{section name=co loop=$contacts} //第一維
<tr>
<td><a href="view.php?id={$contacts[co].id}">view<a></td> //第二維用.號來引用
<td>{$contacts[co].name}</td>
<td>{$contacts[co].home}</td>
<td>{$contacts[co].cell}</td>
<td>{$contacts[co].email}</td>
<tr>
{sectionelse}
<tr><td colspan="5">No items found</td></tr>
{/section}
</table>

6、嵌套的section
<?php

$id = array(1001,1002,1003);
$smarty->assign('custid',$id);

$fullnames = array('John Smith','Jack Jones','Jane Munson');
$smarty->assign('name',$fullnames);

$addr = array('253 N 45th', '417 Mulberry ln', '5605 apple st');
$smarty->assign('address',$addr);

$types = array(
array( 'home phone', 'cell phone', 'e-mail'),
array( 'home phone', 'web'),
array( 'cell phone')
);
$smarty->assign('contact_type', $types);

$info = array(
array('555-555-5555', '666-555-5555', '[email protected]'),
array( '123-456-4', 'www.example.com'),
array( '0457878')
);
$smarty->assign('contact_info', $info);

?>

{section name=customer loop=$custid}
<hr>
id: {$custid[customer]}<br />
name: {$name[customer]}<br />
address: {$address[customer]}<br />
{section name=contact loop=$contact_type[customer]}
{$contact_type[customer][contact]}: {$contact_info[customer][contact]}<br />
{/section}
{/section}

The above example will output:

<hr>
id: 1000<br />
name: John Smith<br />
address: 253 N 45th<br />
home phone: 555-555-5555<br />
cell phone: 666-555-5555<br />
e-mail: [email protected]<br />
<hr>
id: 1001<br />
name: Jack Jones<br />
address: 417 Mulberry ln<br />
home phone: 123-456-4<br />
web: www.example.com<br />
<hr>
id: 1002<br />
name: Jane Munson<br />
address: 5605 apple st<br />
cell phone: 0457878<br />

smarty section 用法

{section loop = $varName[, start = $start, step = $step, max = $max, show = true]}

name: section的名稱,不用加$
$loop: 要循環的變量,在程序中要使用assign對這個變量進行操作。
$start: 開始循環的下標,循環下標默認由0開始
$step: 每次循環時下標的增數
$max: 最大循環下標
$show: boolean類型,決定是否對這個塊進行顯示,默認為true

這裡有個名詞需要說明:
循環下標:實際它的英文名稱為index,是索引的意思,這裡我將它譯成"下標",主要是為了好理解。它表示在顯示這個循環塊時當

前的循環索引,默認從0開始,受$start的影響,如果將$start設為5,它也將從5開始計數,在模板設計部分我們使用過它,這是當前

{section}的一個屬性,調用方式為Smarty.section.sectionName.index,這裡的sectionName指的是函數原型中的name屬性。
{section}塊具有的屬性值,分別為:
1. index: 上邊我們介紹的"循環下標",默認為0
2. index_prev: 當前下標的前一個值,默認為-1
3. index_next: 當前下標的下一個值,默認為1
4. first: 是否為第一下循環
5. last: 是否為最後一個循環
6. iteration: 循環次數
7. rownum: 當前的行號,iteration的另一個別名
8. loop: 最後一個循環號,可用在section塊後統計section的循環次數
9. total: 循環次數,可用在section塊後統計循環次數
10. show: 在函數的聲明中有它,用於判斷section是否顯示


*foreach循環

1. foreach:用於循環簡單數組,它是一個選擇性的section循環,它的定義格式為:

{foreach from=$array item=array_id}
{foreachelse}
{/foreach}
其中,from 指出要循環的數組變量,item為要循環的變量名稱,循環次數由from所指定的數組變量的個數所決定。{foreachelse}用來當程序中傳遞過來的數組為空時的處理,下面是一個簡單的例子:
===========================================
example6.tpl
===========================================
<html>
<head><title>這是一個foreach使用的例子</title></head>
<body>
這裡將輸出一個數組:<br>
<{foreach from=$newsArray item=newsID}>
新聞編號:<{$newsID.newsID}><br>
新聞內容:<{$newsID.newsTitle}><br><hr>
<{foreachelse}>
對不起,數據庫中沒有新聞輸出!
<{/foreach}>
</body>
</html>
 

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved