程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP 中使用 Smarty 之六:Smarty 內建函數

PHP 中使用 Smarty 之六:Smarty 內建函數

編輯:關於PHP編程

 

 

 

 

 

 

    Smarty 的內建函數:Smarty自帶一些內建函數,內建函數是模板語言的一部分,用戶不能創建名稱和內建函數一樣的自定義函數,也不能修改內建函數。

        下面對Smarty 中的內建函數進行說明,並加以實例:

         實例中使用到的Smarty 模板引擎初始化文件init.inc.php 和主文件index.php

init.inc.php

 

 

<?php 

    define('ROOT_PATH', dirname(__FILE__));     //設置網站根目錄 

    require ROOT_PATH.'/libs/Smarty.class.php'; //加載Smarty 模板引擎 

    $_tpl = new Smarty();                       //創建一個實例對象 

    $_tpl->template_dir = ROOT_PATH.'/tpl/';    //重新指定模板目錄 

    $_tpl->compile_dir = ROOT_PATH.'./com/';    //重新指定編譯目錄 

    $_tpl->left_delimiter = '<{';               //重新指定左定界符 

    $_tpl->right_delimiter = '}>';              //重新指定右定界符 

?> 

 

index.php

 

 

 

<?php  

    require 'init.inc.php';        //引入模板初始化文件 

    global $_tpl; 

    $_tpl->display('index.tpl');   //引入模板 

?>   

 

 


 

        1、capture

屬性 類型 是否必須 缺省值 描述 name string no default 數據采集區域名稱 assign string No n/a 數據采集區域在哪分配給變量name[待考]

        capture函數的作用是捕獲模板輸出的數據並將其存儲到一個變量裡,而不是把它們輸出到頁面,任何在 {capture name="foo"}和{/capture}之間的數據將被存儲到變量$foo中,該變量由name屬性指定,在模板中通過 $smarty.capture.foo 訪問該變量。如果沒有指定 name 屬性,函數默認將使用 "default" 作為參數,{capture}必須成對出現,即以{/capture}作為結尾,該函數不能嵌套使用。請看下面的實例模板文件。

/tpl/index.tpl

 

 

<html> 

<head> 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

<title>Capture</title> 

</head> 

 

<body> 

     <!-- 定義capture --> 

     <{capture name="foo"}> 

         這裡是capture 函數裡面的內容,默認是不顯示的。 

     <{/capture}> 

      

     <!-- 調用capture,使用的是Smarty 中的保留變量{$smarty.capture} --> 

     <{$smarty.capture.foo}> 

</body> 

</html>   

    2、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 函數用於從配置文件中加載變量,關於 config_load 函數的使用,請看我的《PHP 中使用 Smarty 之二:配置文件在模板變量中的使用。

        3、include

 

屬性 類型 是否必須 缺省值 描述 file string Yes n/a 待包含的模板文件名 assign string No n/a 該屬性指定一個變量保存待包含模板的輸出 [var ...] [var type] No n/a 傳遞給待包含模板的本地參數,只在待包含模板中有效

        include 函數用於在當前模板中包含其它模板, 當前模板中的變量在被包含的模板中可用. 必須指定 file 屬性,該屬性指明模板資源的位置。如果設置了 assign 屬性,該屬性對應的變量名用於保存待包含模板的輸出,這樣待包含模板的輸出就不會直接顯示了。請看下面的示例:

 

/tpl/index.tpl

 

 

{include file="header.tpl"} 

 

{* body of template goes here *} 

 

{include file="footer.tpl"} 

 

4、if,elseif,else      

 

  Smarty 中的 if 語句和 php 中的 if 語句一樣靈活易用,並增加了幾個特性以適宜模板引擎. if 必須於 /if 成對出現. 可以使用 else 和 elseif 子句。

 

        可以使用以下條件修飾詞:eq、ne、neq、gt、lt、lte、le、gte、ge、is even、is odd、is not even、is not odd、not、mod、div by、even by、odd by、==、!=、>、<、<=、>=. 使用這些修飾詞時必須和變量或常量用空格格開。

        下面對這些修飾符表示的意思進行說明:
       

條件修飾符 作用描述 eq == ne != neq != gt > lt < lte <= le <= gte >= ge >= is even 是否偶數 is odd 是否奇數 is not even 是否不是偶數 is not odd    是否不是奇數 not != mod 求模 div by 是否能被整除 even by 商是否是偶數 odd by 商是否是奇數 && 與 || 或 () 括號改變優先級

    


 

        5、ldelim 和 rdelim 
        用於輸出分隔符,也就是大括號 "{" 和 "}". 模板引擎總是嘗試解釋大括號內的內容,因此如果需要輸出大括號,請使用此方法。請看下面的示例:

/tpl/index.tpl

 

 

 

 

<html> 

<head> 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

<title>ldelim 和rdelim</title> 

</head> 

 

<body> 

     

    <{ldelim}>funcname<{rdelim}> 是Smarty 中的一個函數。 

 

    <!-- 執行結果:<{funcname}> 是Smarty 中的一個函數。--> 

     

</body> 

</html> 

 

        6、literal

 

        literal 標簽區域內的數據將被當作文本處理,此時模板將忽略其內部的所有字符信息. 該特性用於顯示有可能包含大括號等字符信息的javascript 腳本. 當這些信息處於{literal}{/literal} 標簽中時,模板引擎將不分析它們,而直接顯示,其實按照我的所有例子中的標簽風格(因為在init.inc.php 初始化文件中已經重新設置了左定界符和右定界符),而不是Smarty 的默認風格,基本上不會產生這種情況。關於該函數的使用,請看下面的示例

/tpl/index.tpl

 

 

<html> 

<head> 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

<title>literal</title> 

</head> 

 

<body> 

     

    <{literal}> 

    <script language=javascript> 

 

         <!-- 

             window.alert(new Date()); 

          --> 

 

    </script> 

    <{/literal}> 

     

</body> 

</html> 

 

       7、php

 

        php 標簽允許在模板中直接嵌入php 腳本,此標簽會把標簽內部的內容當成PHP 腳本進行解析執行。請看下面的示例

/tpl/index.tpl

 

 

<html> 

<head> 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 

<title>php</title> 

</head> 

 

<body> 

     

    <{php}> 

        echo date("Y-m-d H:i:s"); 

    <{/php}> 

     

    <!-- 執行結果:2011-10-24 04:35:03 --> 

</body> 

</html>


        8、strip

 

        Web 開發者多次遇到空格和回車影響HTML輸出的情形,為了得到特定的結果,因此你不得不在模板裡運行所有的標簽. 通常在難以理解或難以處理的模板中遇到此問題。Smarty 在顯示前將除區任何位於 {strip}{/strip} 標記中數據的首尾空格和回車. 這樣可以保證模板容易理解且不用擔心多余的空格導致問題。

 

        好了, Smarty 模板引擎中的內建函數先總結這麼多,關於內建函數中兩個最重要的函數(foreach,foreachelse、section,sectionelse)的使用,將在下面的進行整理。

 

 

摘自:Lee.的專欄

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