smarty 無疑是 php 開發裡面目前最流行最出名的模板引擎了,通過使用該模板引擎,給我們的開發工作中帶來了極大的方便。下面分享一下 smarty 插件技術(以創建一個 php smarty 中文字符串截取為例),充分利用 smarty 的各種特性,使 php smarty 成為我們手中更為鋒利的利器,讓我們的工作更加快速高效。
(1) 首先我們需要了解一下 smarty 及其插件的一些知識
1. 什麼是smarty?
smarty是一個使用PHP寫出來的模板PHP模板引擎, 是php.net推薦的一個模板系統.
2. 什麼是smarty的插件?
smarty的插件是指smarty中的plugins, 是一些嵌入模板內的一些功能性控制語句, smarty中的Variable Modifiers(變量調節)實際就是一些內置的插件。
3. 插件是怎麼工作的?
在smarty模板中使用了插件調用語句時動態的載入, 你可以將你寫好的插件放入smarty目錄中的lib目錄下的plugins目錄裡面, 這樣在模板中使用這些插件時它將會被自動載入。
4. 插件有幾種類型?
smarty 插件的類型有:function, modifier, block, compiler,prefilter, postfilter, outputfilter, resource, insert,本篇文章我們只分享一下如何開發 function 類型的插件,其它類型的開發方法大同小異,大家可以模仿試試。
5. 如何命名插件?
文件名形式:
type.name.php
type指的是類型,上邊提到的幾種就是它的選擇范圍;
name: 自定義的插件名稱,本文中使用showNews來命名;
函數名稱:
smarty_type_name() smarty:固定位置的固定名稱; type與文件名的type一致, name與文件名中的name一致
(2)基礎知識明白了,下面就開始開發了。將以下代碼拷貝到文件中,命名為 modifier.truncate_cn.php 文件,然後將該文件拷貝到 smarty/lib/plugins/ 目錄下面(注意這個目錄形式不是固定的,個人根據自己的情況來,但必定是放在plugins目錄裡面)。
/* *作者:http://www.phpernote.com/ *時間:2013年1月31日06:31:52 *作用:截取中文字符串 */ function smarty_modifier_truncate_cn($string,$length=0,$ellipsis='…',$start=0){ $string=strip_tags($string); $string=preg_replace('/\n/is','',$string); //$string=preg_replace('/ | /is','',$string);//清除字符串中的空格 $string=preg_replace('/ /is','',$string); preg_match_all("/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/",$string,$string); if(is_array($string)&&!empty($string[0])){ $string=implode('',$string[0]); if(strlen($string)<$start+1){ return ''; } preg_match_all("/./su",$string,$ar); $string2=''; $tstr=''; //www.phpernote.com for($i=0;isset($ar[0][$i]);$i++){ if(strlen($tstr)<$start){ $tstr.=$ar[0][$i]; }else{ if(strlen($string2)<$length+strlen($ar[0][$i])){ $string2.=$ar[0][$i]; }else{ break; } } } return $string==$string2?$string2:$string2.$ellipsis; }else{ $string=''; } return $string; }
(3)下面就可以使用該插件了,以後在模板裡面就可以直接使用 truncate_cn 函數來進行中文字符串的截取了,比如:{$news.content|truncate_cn:'30'}
至此,php smarty 模板的一個插件就這麼完成了,是不是非常簡單,希望你能學會並將自己的 smarty 打造成一個更為個性的模板引擎。