继续来谈smarty,这文主要是写一些比较高级点的功能。首先是smarty的数据对象,但是其实不是很推荐这个功能,首先在PHP里面定义一个对象,然后assign到模板输出,然后再模板中用->访问,还有一个是在PHP里面通过$smarty->registerObject('foobar',$myobj);来注册一个方法,然后再在模板中使用{foobar->meth1 p1='foo' p2=$bar},这个方法有一个好处,就是可以通过第三个参数(数组)来控制不想让其访问的对象方法,只有在第三个参数里面包含的方法才可以访问。
第二个就是模板继承功能,首先可以在父模板里面用{block name="xx"}{/block}定义一个内容,暂时不考虑其内容,然后再子模板中定义其内容{block name="xx"}你说需要的内容{/block},其原理和类的继承很相似,可以一直继承下去,但是子模板必须只能写这些内容
{extends file="父模板.html"}
{block name="xx"}你说需要的内容{/block}
整个HTML页面就必须是只有这些内容(block标签可以多写),其他内容写了也没是没有任何意义的,第三个就是比较有用的调节器插件开发,其实也很简单,只要研究一下smarty的源代码就知道,调节器都是放在Smarty\libs\plugins文件夹下面名字为modifier.调节器名字.php的文件里面,而里面的内容我modifier.truncate.php来做例子
function smarty_modifier_truncate( $string , $length = 80, $etc = '...' , $break_words = false, $middle = false) { if ( $length == 0) return '' ; if (Smarty:: $_MBSTRING ) { if (mb_strlen( $string , Smarty:: $_CHARSET ) > $length ) { $length -= min( $length , mb_strlen( $etc , Smarty:: $_CHARSET )); if (! $break_words && ! $middle ) { $string = preg_replace( '/\s+?(\S+)?$/' . Smarty:: $_UTF8_MODIFIER , '' , mb_substr( $string , 0, $length + 1, Smarty:: $_CHARSET )); } if (! $middle ) { return mb_substr( $string , 0, $length , Smarty:: $_CHARSET ) . $etc ; } return mb_substr( $string , 0, $length / 2, Smarty:: $_CHARSET ) . $etc . mb_substr( $string , - $length / 2, $length , Smarty:: $_CHARSET ); } return $string ; } // no MBString fallback if (isset( $string [ $length ])) { $length -= min( $length , strlen ( $etc )); if (! $break_words && ! $middle ) { $string = preg_replace( '/\s+?(\S+)?$/' , '' , substr ( $string , 0, $length + 1)); } if (! $middle ) { return substr ( $string , 0, $length ) . $etc ; } return substr ( $string , 0, $length / 2) . $etc . substr ( $string , - $length / 2); } return $string ; } 看起来很复杂是不是,其实我们需要关注的就只有红色字体内容,首先是方法名必须是这种格式smarty_modifier_调节器名称,然后参数,第一个就是传过去的变量,在模板里面你需要调节的内容,后面的参数那就可以自己来定义了,然后通过后面这些自定义参数,在函数内部对其进行一连串的操作,然后最后把这个变量返回回来输出,就是这么简单,以一个改变字体颜色的modifier_modcol.php为例子,首先在Smarty\libs\plugins里面新建这个文件modifier_modcol.php,内容为
function smarty_modifier_modcol( $string , $color ){ return