PHP模板引擎Smarty內(nèi)建函數(shù)詳解
本文實(shí)例講述了PHP模板引擎Smarty內(nèi)建函數(shù)。分享給大家供大家參考,具體如下:
Smarty 的內(nèi)建函數(shù):Smarty自帶一些內(nèi)建函數(shù),內(nèi)建函數(shù)是模板語(yǔ)言的一部分,用戶不能創(chuàng)建名稱和內(nèi)建函數(shù)一樣的自定義函數(shù),也不能修改內(nèi)建函數(shù)。
下面對(duì) Smarty 中的內(nèi)建函數(shù)進(jìn)行說明,并加以實(shí)例:
實(shí)例中使用到的 Smarty 模板引擎初始化文件 init.inc.php 和主文件 index.php
init.inc.php
<?php
define('ROOT_PATH', dirname(__FILE__)); //設(shè)置網(wǎng)站根目錄
require ROOT_PATH.'/libs/Smarty.class.php'; //加載 Smarty 模板引擎
$_tpl = new Smarty(); //創(chuàng)建一個(gè)實(shí)例對(duì)象
$_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 | 數(shù)據(jù)采集區(qū)域名稱 |
| assign | string | No | n/a | 數(shù)據(jù)采集區(qū)域在哪分配給變量name[待考] |
/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 函數(shù)里面的內(nèi)容,默認(rèn)是不顯示的。
<{/capture}>
<!-- 調(diào)用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 | 加載數(shù)據(jù)的作用域,取值必須為local, parent 或 global. local 說明該變量的作用域?yàn)楫?dāng)前模板. parent 說明該變量的作用域?yàn)楫?dāng)前模板和當(dāng)前模板的父模板(調(diào)用當(dāng)前模板的模板). global 說明該變量的作用域?yàn)樗心0? |
| global | boolean | No | No | 說明加載的變量是否全局可見,等同于 scope=parent. 注意: 當(dāng)指定了 scope 屬性時(shí),可以設(shè)置該屬性,但模板忽略該屬性值而以 scope 屬性為準(zhǔn)。 |
3、include
| 屬性 | 類型 | 是否必須 | 缺省值 | 描述 |
|---|---|---|---|---|
| file | string | Yes | n/a | 待包含的模板文件名 |
| assign | string | No | n/a | 該屬性指定一個(gè)變量保存待包含模板的輸出 |
| [var ...] | [var type] | No | n/a | 傳遞給待包含模板的本地參數(shù),只在待包含模板中有效 |
include 函數(shù)用于在當(dāng)前模板中包含其它模板, 當(dāng)前模板中的變量在被包含的模板中可用. 必須指定 file 屬性,該屬性指明模板資源的位置。如果設(shè)置了 assign 屬性,該屬性對(duì)應(yīng)的變量名用于保存待包含模板的輸出,這樣待包含模板的輸出就不會(huì)直接顯示了。請(qǐng)看下面的示例:
/tpl/index.tpl
{include file="header.tpl"}
{* body of template goes here *}
{include file="footer.tpl"}
4、if,elseif,else
Smarty 中的 if 語(yǔ)句和 php 中的 if 語(yǔ)句一樣靈活易用,并增加了幾個(gè)特性以適宜模板引擎. if 必須于 /if 成對(duì)出現(xiàn). 可以使用 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、==、!=、>、<、<=、>=. 使用這些修飾詞時(shí)必須和變量或常量用空格格開。
下面對(duì)這些修飾符表示的意思進(jìn)行說明:
| 條件修飾符 | 作用描述 |
| eq | == |
| ne | != |
| neq | != |
| gt | > |
| lt | < |
| lte | <= |
| le | <= |
| gte | >= |
| ge | >= |
| is even | 是否偶數(shù) |
| is odd | 是否奇數(shù) |
| is not even | 是否不是偶數(shù) |
| is not odd | 是否不是奇數(shù) |
| not | != |
| mod | 求模 |
| div by | 是否能被整除 |
| even by | 商是否是偶數(shù) |
| odd by | 商是否是奇數(shù) |
| && | 與 |
| || | 或 |
| () | 括號(hào)改變優(yōu)先級(jí) |
5、ldelim 和 rdelim
用于輸出分隔符,也就是大括號(hào) "{" 和 "}". 模板引擎總是嘗試解釋大括號(hào)內(nèi)的內(nèi)容,因此如果需要輸出大括號(hào),請(qǐng)使用此方法。請(qǐng)看下面的示例:
/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 中的一個(gè)函數(shù)。
<!-- 執(zhí)行結(jié)果: <{funcname}> 是 Smarty 中的一個(gè)函數(shù)。 -->
</body>
</html>
6、literal
literal 標(biāo)簽區(qū)域內(nèi)的數(shù)據(jù)將被當(dāng)作文本處理,此時(shí)模板將忽略其內(nèi)部的所有字符信息. 該特性用于顯示有可能包含大括號(hào)等字符信息的 javascript 腳本. 當(dāng)這些信息處于 {literal}{/literal} 標(biāo)簽中時(shí),模板引擎將不分析它們,而直接顯示,其實(shí)按照我的所有例子中的標(biāo)簽風(fēng)格(因?yàn)樵?init.inc.php 初始化文件中已經(jīng)重新設(shè)置了左定界符和右定界符),而不是 Smarty 的默認(rèn)風(fēng)格,基本上不會(huì)產(chǎn)生這種情況。關(guān)于該函數(shù)的使用,請(qǐng)看下面的示例
/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 標(biāo)簽允許在模板中直接嵌入 php 腳本,此標(biāo)簽會(huì)把標(biāo)簽內(nèi)部的內(nèi)容當(dāng)成 PHP 腳本進(jìn)行解析執(zhí)行。請(qǐng)看下面的示例
/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}>
<!-- 執(zhí)行結(jié)果: 2011-10-24 04:35:03 -->
</body>
</html>
8、strip
Web 開發(fā)者多次遇到空格和回車影響HTML輸出的情形,為了得到特定的結(jié)果,因此你不得不在模板里運(yùn)行所有的標(biāo)簽. 通常在難以理解或難以處理的模板中遇到此問題。Smarty 在顯示前將除區(qū)任何位于 {strip}{/strip} 標(biāo)記中數(shù)據(jù)的首尾空格和回車. 這樣可以保證模板容易理解且不用擔(dān)心多余的空格導(dǎo)致問題。
好了, Smarty 模板引擎中的內(nèi)建函數(shù)先總結(jié)這么多,關(guān)于內(nèi)建函數(shù)中兩個(gè)最重要的函數(shù)(foreach,foreachelse、section,sectionelse)的使用,可參考前面一篇《PHP模板引擎Smarty內(nèi)建函數(shù)foreach,foreachelse用法分析》
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《smarty模板入門基礎(chǔ)教程》、《PHP模板技術(shù)總結(jié)》、《PHP基于pdo操作數(shù)據(jù)庫(kù)技巧總結(jié)》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《PHP基本語(yǔ)法入門教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家基于smarty模板的PHP程序設(shè)計(jì)有所幫助。
相關(guān)文章
php file_get_contents抓取Gzip網(wǎng)頁(yè)亂碼的三種解決方法
用 file_get_contents() 函數(shù)抓取網(wǎng)頁(yè)會(huì)發(fā)生亂碼現(xiàn)象。有兩個(gè)原因會(huì)導(dǎo)致亂碼,一個(gè)是編碼問題,一個(gè)是目標(biāo)頁(yè)面開了Gzip,下面說的就是開了Gzip功能如何才能不亂碼的方法2013-11-11
PHP用戶注冊(cè)郵件激活賬戶的實(shí)現(xiàn)代碼
我們?cè)谧?cè)一個(gè)網(wǎng)站的賬戶時(shí),通常都會(huì)收到一封含點(diǎn)擊鏈接激活的郵件,本篇文章主要介紹了PHP郵件激活賬戶的實(shí)現(xiàn)代碼,有興趣的可以了解一下2017-05-05
ThinkPHP打開驗(yàn)證碼頁(yè)面顯示亂碼的解決方法
這篇文章主要介紹了ThinkPHP打開驗(yàn)證碼頁(yè)面顯示亂碼的解決方法,通過頭部添加自定義文件驗(yàn)證目錄并過濾BOM頭來(lái)實(shí)現(xiàn)該功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-12-12
win7計(jì)劃任務(wù)定時(shí)執(zhí)行PHP腳本設(shè)置圖解
這篇文章主要介紹了win7計(jì)劃任務(wù)定時(shí)執(zhí)行PHP腳本設(shè)置圖解,需要的朋友可以參考下2014-05-05
PHP并發(fā)場(chǎng)景的三種解決方案代碼實(shí)例
這篇文章主要介紹了PHP并發(fā)場(chǎng)景的三種解決方案代碼實(shí)例,有對(duì)這方面感興趣的同學(xué)可以借鑒參考下2021-02-02
Yii數(shù)據(jù)模型中rules類驗(yàn)證器用法分析
這篇文章主要介紹了Yii數(shù)據(jù)模型中rules類驗(yàn)證器用法,結(jié)合實(shí)例形式分析了rules類驗(yàn)證器的簡(jiǎn)單使用方法,代碼注釋中包含了相關(guān)方法的使用說明,需要的朋友可以參考下2016-07-07
phpstudy2018升級(jí)MySQL5.5為5.7教程(圖文)
這篇文章主要介紹了phpstudy2018升級(jí)MySQL5.5為5.7教程(圖文),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2018-10-10

