在smarty中調(diào)用php內(nèi)置函數(shù)的方法
相信有很多朋友還不知道,可以在smarty模板里調(diào)用php的內(nèi)置函數(shù),我們一起來看看它的用法。
模板書寫:
{'param1'|functionName:'param2':'param3'}
php函數(shù)原型:
echo functionName('param1','param2','param3');
實(shí)例:
{'1234567'|substr:'1':'2'}
下面這個(gè)和函數(shù)的參數(shù)順序有關(guān)系
{'a'|str_replace:'A':'abcd'}
直接延伸到,直接在php中寫一個(gè)函數(shù)調(diào)用,不需要注冊修改器的.
更深一步的研究:發(fā)現(xiàn)數(shù)組會(huì)出錯(cuò).
分配了一個(gè)數(shù)組array給Smarty,假設(shè)Smarty的分界符為'{' 和'}'。
在很多資料上都看到,在Smarty中要求數(shù)組的長度時(shí),可以用在數(shù)組后便加|count的方法調(diào)用。即通過{array|count}獲得 array的長度。但是今天在寫模板時(shí),發(fā)現(xiàn)這樣得不到數(shù)組的長度,而只是得到一個(gè)返回的字符串Array。也就是說僅僅是返回了{(lán)array}的結(jié)果, 而沒有返回其array的長度。
查看smarty\plugins文件夾,發(fā)現(xiàn)并沒有count的相關(guān)方法,也就是說,count是直接調(diào)用了php中的方法。
后來通過網(wǎng)絡(luò)上的資料,發(fā)現(xiàn)可以在count前面加@,從而正確的獲取數(shù)組的長度。再進(jìn)一步查看Smarty的源碼,發(fā)現(xiàn)Smarty對(duì)屬性調(diào)節(jié)器后邊的 方法名進(jìn)行處理時(shí),會(huì)對(duì)前邊加@的進(jìn)行特殊處理。因此作出判斷:在Smarty中的屬性調(diào)節(jié)器中調(diào)用php中定義好的函數(shù)時(shí),可以通過加@來表示。
1、對(duì)類型為數(shù)組的方法進(jìn)行測試時(shí),發(fā)現(xiàn)不加@符號(hào)都會(huì)出錯(cuò)。比如:要對(duì)一個(gè)數(shù)組調(diào)用count方法求出數(shù)組的長度,就可以這樣調(diào)用{array|@count},而要對(duì)數(shù)組調(diào)用end方法得出數(shù)組的最后一組數(shù)據(jù)時(shí),則可以通過{array|@end}。
2、在對(duì)字符串的相關(guān)函數(shù)進(jìn)行測試,發(fā)現(xiàn)加不加@都可以正常的調(diào)用。
3、其他的尚未認(rèn)真測試。
對(duì)于在smarty中調(diào)用復(fù)雜的php函數(shù)不予鼓勵(lì),因?yàn)镾marty的本意就是要實(shí)現(xiàn)代碼和模板分離,不要偏離了人家的設(shè)計(jì)初衷。
模板書寫:
{'param1'|functionName:'param2':'param3'}
php函數(shù)原型:
echo functionName('param1','param2','param3');
實(shí)例:
{'1234567'|substr:'1':'2'}
下面這個(gè)比較怪 和函數(shù)的參數(shù)順序有關(guān)系
{'a'|str_replace:'A':'abcd'}
Smarty調(diào)用自定義函數(shù)
調(diào)用自定義函數(shù)需要用到register_function() 來注冊
這里為大家舉個(gè)例子,常見的字符串切割
函數(shù)如下
<?php
function SmartyLen($params){
extract($params);
$len=strlen($text);
$max=$length;
for ($i=0;$i<$length;$i++){
$chr=substr($text,$i,1);
if(ord($chr)>0x80)//字符是中文
{
$length++;
$i++;
$len--;
}
}
$str=substr($text,0,$length);
if($len>$max)$str.="...";
Return $str;
}
注冊函數(shù)
$smarty->register_function('len',"SmartyLen");
模板調(diào)用
{len text="測試下" length="1"} //注意這里的text和length其實(shí)是函數(shù)里的2個(gè)參數(shù)函數(shù)的參數(shù)必須要以函數(shù)內(nèi)部變量名一致,其實(shí)傳回去的的是個(gè)數(shù)組,在函數(shù)里用extract($params);把數(shù)組中的變量導(dǎo)入到當(dāng)前的符號(hào)表。
- 使用Smarty 獲取當(dāng)前日期時(shí)間和格式化日期時(shí)間的方法詳解
- php Smarty date_format [格式化時(shí)間日期]
- smarty內(nèi)部日期函數(shù)html_select_date()用法實(shí)例分析
- Smarty Foreach 使用說明
- 在smarty模板中使用PHP函數(shù)的方法
- ThinkPHP使用smarty模板引擎的方法
- smarty半小時(shí)快速上手入門教程
- PHP詳細(xì)徹底學(xué)習(xí)Smarty
- Smarty結(jié)合Ajax實(shí)現(xiàn)無刷新留言本實(shí)例
- 解析smarty模板中類似for的功能實(shí)現(xiàn)
- 解決css和js的{}與smarty定界符沖突問題的兩種方法
- Smarty日期時(shí)間操作方法示例
相關(guān)文章
推薦學(xué)習(xí)php sesson的朋友必看PHP會(huì)話(Session)使用入門
對(duì)比起 Cookie,Session 是存儲(chǔ)在服務(wù)器端的會(huì)話,相對(duì)安全,并且不像 Cookie 那樣有存儲(chǔ)長度限制,本文簡單介紹 Session 的使用。2008-08-08
php分頁查詢mysql結(jié)果的base64處理方法示例
這篇文章主要介紹了php分頁查詢mysql結(jié)果的base64處理方法,涉及php+mysql數(shù)據(jù)庫查詢及base64編碼轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2017-05-05
php中如何判斷一個(gè)網(wǎng)頁請求是ajax請求還是普通請求
以下是對(duì)php中如何判斷一個(gè)網(wǎng)頁請求是ajax請求還是普通請求的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-08-08
解析PHP將對(duì)象轉(zhuǎn)換成數(shù)組的方法(兼容多維數(shù)組類型)
本篇文章是對(duì)PHP將對(duì)象轉(zhuǎn)換成數(shù)組的方法(兼容多維數(shù)組類型)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
Windows下PHP開發(fā)環(huán)境搭建教程(Apache+PHP+MySQL)
這篇文章主要為大家詳細(xì)介紹了Windows下PHP開發(fā)環(huán)境搭建教程:Apache+PHP+MySQL,具有一定的實(shí)用性和參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06
php實(shí)現(xiàn)的后臺(tái)表格分頁功能示例
這篇文章主要介紹了php實(shí)現(xiàn)的后臺(tái)表格分頁功能,涉及php針對(duì)數(shù)據(jù)庫的連接、查詢、刪除、動(dòng)態(tài)生成表格等相關(guān)操作技巧,需要的朋友可以參考下2017-10-10
Laravel網(wǎng)站打開速度優(yōu)化的方法匯總
最近在學(xué)習(xí) Laravel 框架,自己做了個(gè)小站,總結(jié)了一些 Laravel 網(wǎng)站性能提升的方法。所以下面這篇文章主要給大家匯總介紹了關(guān)于Laravel網(wǎng)站打開速度優(yōu)化的一些方法,文中介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-07-07

