smarty是php開發中非常流行的一個模板,以前曾發過一篇文章php smarty中文截取插件開發示例是說明如何開發smarty插件的,這篇文章將分享一下如何為smarty模板做一個for循環的擴展插件,方面我們日常的程序開發。
首先說說這個for循環擴展是做什麼用的吧。今天在改以前的一個網站的時候,由於一些特定的原因需要在smarty模板中做一個for循環,雖然smarty是可以在模板中以{php}......{/php}標簽的形式來直接書寫php語句語法的。但由於循環中要用到模板中的變量的值,而在模板中直接寫的php語句沒辦法獲取到模板變量中的值,所以這個想法就行不通了,最後就想到是不是也可以實現在smarty模板中直接使用for循環呢?
下面是作者為smarty增加一個for循環擴展插件的具體步驟。
(1)在smarty模板的安裝目錄下的plugins目錄內新建一個文件,命名為 block.for.php ,然後在這個文件裡面輸入如下代碼:
<?php function smarty_block_for($params,$content,&$smarty){ if(is_null($content)){ return; } $start=0; $to=0; $step=1; foreach($params as $k=>$v){ switch($k){ case 'start': case 'to': case 'step': $$k=(int)$v; break; default: $smarty->trigger_error("textformat: 未知屬性:'$k'"); } } $_output=''; for($_x=$start;$_x<=$to;$_x+=$step){ $_output.=$content."\n\r"; } return $_output; }
(2)然後就可以直接在smarty模板中使用for循環了,作者的使用案例如下:
php文件部分代碼:
$vote='[[[';//我要在模板中將這三個符號轉變為三個五角星圖片 $smarty->assign('vote',$vote);
smarty模板文件部分代碼:
{if false!==$vote|@stripos:'['} {for start=1 to=$vote|@strlen step=1} <img src="http://www.phpernote.com/images/xing.gif" /> {/for} {/if}
ok,以上問題解決。大同小異,如果你還需要為smarty擴展更多功能,方法同上,基本上都可以實現。