首頁  >  文章  >  後端開發  >  php模板引擎smarty的內建函數之一

php模板引擎smarty的內建函數之一

黄舟
黄舟原創
2016-12-20 10:55:411323瀏覽

Smarty自帶一些內建函數. 
內建函數是模板語言的一部分. 
使用者不能建立名稱和內建函數一樣的自訂函數,也不能修改內建函數.
(insert 、if,elseif,else 、ldelim,rdelim、literal、php 、section,sectionelse 、strip 等內建函式請參考php模板引擎smarty的內建函數之二)
#capture函數
config_load 
foreach,foreachelse
include Type
include_n Required Default Description 
name string no default  The name of the captured block 
assign string No n/a  The variable name where to assign the captured output to
str屬性 是否必須缺少省值類型是否必須缺省值
assign string No n/a  資料收集區域在哪裡分配給變數name[待考]

capture函數的作用是捕獲模板輸出的資料並將其儲存到一個變數裡,而不是把它們輸出到頁面.

任何在{capture name="foo"}和{/capture}之間的資料將被儲存到變數$foo中,該變數由name屬性指定.
在模板中透過$smarty.capture.foo 存取該變數.
如果沒有指定name 屬性,函數預設將使用"default" 作為參數.

{capture}必須成對出現,即以{/capture}作為結尾,函數不能嵌套使用.

例:
{* 該例在擷取內容後輸出一行包含資料的表格,若沒有擷取到就什麼也不輸出*}
{capture name=banner}
{include file="get_banner.tpl"}
{/capture}
{if $smarty .capture.banner ne ""}



{$smarty.capture.banner}


{/if}


config_load
從檔案中載入變數
屬性類型是否必須缺少省值描述 file string Yes n/a  待包含的設定檔的名稱 

section string No n/a  設定檔中待載入部分的名稱 
scope string no local  載入資料的作用域,取值必須為local, parent 或global. local 說明該變數的作用域為當前模板. parent 說明該變數的作用域為當前模板和當前模板的父模板(調用當前模板的模板). global 說明該變量的作用域為所有模板.  
global boolean No No  說明載入的變數是否全域可見,等同於scope=parent. 注意: 當指定了scope 屬性時,可以設定該屬性,但模板忽略該屬性值而以scope 屬性為準。


例:
{config_load file="colors.conf"}

{#pageTitle#}








First Last Address




設定檔有可能包含多個部分,此時可以使用附加屬性section 指定從哪一部分中取得變數.
註:設定檔中的section 和模板內建函數section 只是命名相同,毫不相干。
例:
{config_load file="colors.conf" section="Customer"}

{#pageTitle#}






First Last td>
Address




foreach,foreachelse

foreach 是除section 之外處理循環的另一種方案(根據不同需要選擇不同的方案).
foreach 用於處理簡單數組(數組中的元素的類型一致),它的格式比section 簡單許多,缺點是只能處理簡單數組.
foreach 必須和/foreach 成對使用,且必須指定from 和item 屬性.
name 屬性可以任意指定(字母、數字和下劃線的組合).
foreach 可以嵌套,但必須保證嵌套中的foreach 名稱唯一.
from 屬性(通常是數組)決定循環的次數.
foreachelse 語句在from 變數沒有值的時候被執行.
屬性類型是否必須缺少省值描述 
from string Yes n/a待循環陣列的名稱 
item string Yes n/a  目前處理元素的變數名稱 
key string No n/a  目前處理元素的鍵名
 
name string No n/a  一個循環的名稱,用於存取該循跡

name string No n/a 

例1:
{* 此例將輸出陣列$custid 中的所有元素的值*}
{foreach from=$custid item=curr_id}
id: {$curr_id}

{/foreach}
id: {$curr_id}

{/foreach}
輸出結果:
id: 1000

id: 1001

id: 1002

例2: 
$smarty->assign("contacts", array(array("phone" => "1" , "fax" => "2", "cell" => "3"),
array("phone" => "555-4444", "fax" => "555-3333", "cell" => "760-1234")));
*}
{* 鍵就是數組的下標,請參考關於數組的解釋*}
{foreach name=outer item=contact from=$contacts}
{foreach key=key=key item=item from=$contact}
{$key}: {$item}

{/foreach}
{/foreach}
輸出結果:
phone: 1

fax: 2

cell: 3

phone: 555-4444

fax: 555-3333

cell: 760-1234


foreach 循環有自己的變數名稱,使用該變數名稱可以存取該變數循環. 使用方法為{$smarty.foreach.foreachname.varname},其中foreachname 即在foreach 中指定的name 屬性.
include
Include 標籤用於在當前模板中包含其它模板. 當前模板中的變量在被包含的模板中可用. 必須指定file 屬性,該屬性指明模板資源的位置.
如果設定了assign 屬性,該屬性對應的變數名稱用於保存待包含模板的輸出,這樣待包含模板的輸出就不會直接顯示了。
屬性類型是否必須缺少省值描述 
file string Yes n/a  待包含的模板檔名 

assign string No n/a  此屬性指定一個變數保存待包含模板的輸出 

[var ...] [var type ] No n/a  傳遞給待包含模板的本地參數,只在待包含模板中有效

例1 include 函數示範 
{include file="header.tpl"}

{* body of template goes here *}

{include file="footer.tpl"}

例2帶傳遞參數的include 函數示範 
{include file="header.tpl" title="Main Menu" table_bgcolor="#c0c0c0"}

{* body of template goes here *}

{include file="footer.tpl" logo="http://www.php118.com/php118.gif"}

例3使用外部模板資源的include 函數示範 
{* absolute filepath * }
{include file="/usr/local/include/templates/header.tpl"}
{* absolute filepath (same thing) *}
{include file="file:/usr/local/include/templates/header .tpl"}
{* windows absolute filepath (MUST use "file:" prefix) *}
{include file="file:C:/www/pub/templates/header.tpl"}

{* include from template resource named "db" *}🎜{include file="db:header.tpl"}🎜

include_php
inluce_php 函數用於在模板中包含php 腳本. 如果設定了安全模式,被包含的腳本必須位於$trusted_dir 路徑下. include_php 函數必須設定file 屬性,該屬性指明被包含php 檔案的路徑,可以是$trusted_dir 的相對路徑,也可以是絕對路徑.
include_php 是解決模板部件化的好方法,它使得php 程式碼從模板檔案中被分離出來. 舉個例子:假設有一個從資料庫中動態取出資料用於顯示網站導航的模板,你可以將得資料內容的php 邏輯部分分離出來保存在一個單獨的資料夾下,並在模板開始的位置包含該php 腳本. 那麼就可以在任何地方包含此模板而不用擔心之前資料庫資訊是否已被程式取出.
即使是在模板中多次地調用php 文件,默認情況下它們只被包含一次. 你可以設置once 屬性從而指明每次調用都重新包含該文件. 如果將once屬性設定為false,每次呼叫該檔案都會被重新包含.
如果設定了assign 屬性,該屬性對應的變數名稱用於保存待包含php 的輸出,這樣待包含php 檔案的輸出就不會直接顯示了。
在待包含php 文件中可以通過$this 訪問smarty 對象.
屬性類型是否必須缺省值描述 
file string Yes n/a  待包含php文件的名稱 
once boolean No true  如果待包含php文件已被包含是否仍包含(類似php中的include_once函數) 
assign string No n/a  此屬性指定一個變數保存待包含php檔案的輸出

例 
// load in variables from a mysql db and assign them
// load in variables from a mysql db and assign them to the template
// 從mysql資料庫取得數據,將資料賦給模板變數require_once("MySQL.class.php");
$sql = new MySQL;
$sql->query("select * from site_nav_sections order by name",SQL_ALL);
$this->assign('sections',$sql->record);

?>


index.tpl
---------
{* absolute path, or relative to $trusted_dir *}
{* 絕對路徑或$trusted_dir 的相對路徑*}
{include_php file="/path/to/load_nav.php"}
{foreach item="curr_section" from=$sections} {/foreach}

以上就是php模板引擎smarty的內建函數之一的內容,更多相關內容請關注PHP中文網(www.php. cn)! 


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn