smarty的插件功能是smarty模板的精华

  1. 云栖社区>
  2. 博客列表>
  3. 正文

smarty的插件功能是smarty模板的精华

航空母舰 2016-05-12 15:18:39 浏览1211 评论1

摘要: 一,smarty插件介绍 smarty的插件放在/smarty/libs/plugins下面,它为程序的开发 提供了很大的方便,例如:{$yesterday|date_format:"%H:%M:%S"}smarty自带的日期格式化插件,对变 量$yesterday进行格式化。

一,smarty插件介绍

smarty的插件放在/smarty/libs/plugins下面,它为程序的开发 提供了很大的方便,例如:{$yesterday|date_format:"%H:%M:%S"}smarty自带的日期格式化插件,对变 量$yesterday进行格式化。在我们的php文件中,并不需要对date_format进行处理,我们只要拿来用就好了。

二,smarty插件命名规则

1,插件文件名命名规则

 

type name .php

type有以下几种

  1. function
  2. modifier
  3. block
  4. compiler
  5. prefilter
  6. postfilter
  7. outputfilter
  8. resource
  9. insert

例如:modifier .date_format .php这个就是smarty自带的日期插件的文件名

2,插件文件里面的函数命名规则

smarty_type _name ()

例如:smarty_modifier _date_format

上面的紫色字对应的是插件类型,桔黄色字对应的是插件名称

三,添加自定义插件功能

个人觉得modifier 和function 这二种类型的插件最有用,也是最常用的。所以下面我以这二个类型来举例子

1,添加modifier插件

a ),/smarty/libs/plugins下面建个文件modifier.reverse.php

Java代码  收藏代码
  1. <?php  
  2. function smarty_modifier_reverse($string)  
  3. {  
  4.  if(is_string($string)){  
  5.   return strrev($string);  
  6.  }else{  
  7.   return false;  
  8.  }  
  9. }  
  10. ?>  

 b),在调用模块的文件文件里加上

Java代码  收藏代码
  1. $this->tpl->assign("test""123456789");  

 c),在模块文件文件中加入

Java代码  收藏代码
  1. <div>reverse == {$test|reverse}</div>     

上面的这个例子是把一个字符串进行反转,结果是:987654321

2,添加function插件

a ),/smarty/libs/plugins下面建个文件function.html_lis.php

Java代码  收藏代码
  1. function smarty_function_html_lis($params, &$smarty)  
  2. {  
  3.     require_once $smarty->_get_plugin_filepath('shared','escape_special_chars');  
  4.     $class = 'li_style';  
  5.     $options = null;  
  6.     $separator = '';  
  7.     $js = '';  
  8.     $labels =true;  
  9.     $output = null;  
  10.     $extra = '';  
  11.     foreach($params as $_key => $_val) {  
  12.         switch($_key) {  
  13.             case 'class':  
  14.             case 'separator':  
  15.                 $$_key = $_val;  
  16.                 break;  
  17.   
  18.             case 'labels':  
  19.                 $$_key = (bool)$_val;  
  20.                 break;  
  21.   
  22.             case 'js':  
  23.                 $$_key = $_val;  
  24.                 break;  
  25.   
  26.             case 'options':  
  27.                 $$_key = (array)$_val;  
  28.                 break;  
  29.   
  30.             case 'output':  
  31.                 $$_key = array_values((array)$_val);  
  32.                 break;  
  33.   
  34.             case 'lis':  
  35.                 $smarty->trigger_error('html_lis: the use of the "lis" attribute is deprecated, use "options" instead', E_USER_WARNING);  
  36.                 $options = (array)$_val;  
  37.                 break;  
  38.   
  39.             default:  
  40.                 if(!is_array($_val)) {  
  41.                     $extra .= ' '.$_key.'="'.smarty_function_escape_special_chars($_val).'"';  
  42.                 } else {  
  43.                     $smarty->trigger_error("html_lis: extra attribute '$_key' cannot be an array", E_USER_NOTICE);  
  44.                 }  
  45.                 break;  
  46.         }  
  47.     }  
  48.   
  49.     if (!isset($options) && !isset($values))  
  50.         return ''/* raise error here? */  
  51.   
  52.     $_html_result = array();  
  53.   
  54.     if (isset($options)) {  
  55.   
  56.         foreach ($options as $_key=>$_val)  
  57.             $_html_result[] = smarty_function_html_lis_output($class, $_key, $_val, $extra, $separator, $labels, $js);  
  58.   
  59.     } else {  
  60.         foreach ($values as $_i=>$_key) {  
  61.             $_val = isset($output[$_i]) ? $output[$_i] : '';  
  62.             $_html_result[] = smarty_function_html_lis_output($class, $_key, $_val, $extra, $separator, $labels, $js);  
  63.         }  
  64.   
  65.     }  
  66.   
  67.     if(!empty($params['assign'])) {  
  68.         $smarty->assign($params['assign'], "<ul>".$_html_result."</ul>");  
  69.     } else {  
  70.   
  71.         return "<ul>".implode("\n",$_html_result)."</ul>";  
  72.     }  
  73. }  
  74.   
  75. function smarty_function_html_lis_output($class, $value, $output, $extra, $separator, $labels, $js) {  
  76.     $_output = '';  
  77.     if ($labels) $_output .= '';  
  78.     $_output .= '<li tip="'  
  79.         . smarty_function_escape_special_chars($value) . '"';  
  80.  if($js) $_output .= $js  ;  
  81.     $_output .= $extra . ' />' . $output;  
  82.     if ($labels) $_output .= '';  
  83.     $_output .=  $separator;  
  84.   
  85.     return $_output;  
  86. }  
  87.   
  88. ?>  

  b),在调用模块的文件文件里加上

Java代码  收藏代码
  1. $this->tpl->assign('cust_lis', array(  
  2.    "china" => '中国',  
  3.    "shanghai" => '上海',  
  4.    "heifei" => '合肥',  
  5.    "luan" => '六安'));  
  6. $this->tpl->assign("onclick""onclick=sep()");   

 c),在模块文件文件中加入

Java代码  收藏代码
  1. <div>  
  2. {html_lis  options=$cust_lis js=$onclick}  
  3. </div>  

 d),输入结果为

Java代码  收藏代码
  1. <ul><li class="li_style" tip="china" onclick=sep() />中国  
  2. <li class="li_style" tip="shanghai" onclick=sep() />上海  
  3. <li class="li_style" tip="heifei" onclick=sep() />合肥  
  4. <li class="li_style" tip="luan" onclick=sep() />六安</ul>  

 上面的例子是生成ul标签的一个smarty插件,把checkbox拿过来改一改,而成的。

【云栖快讯】你想见的Java技术专家都在这了,向大佬提问,有问题必答  详情请点击

网友评论

1F
shengnong

你好,我尝试在阿里云上使用smarty但是页面显示空白,错误为Fatal error: Uncaught --> Smarty: unable to write file ./templates_c/wrt57a0167142b3f4_93226948 <-- thrown in /var/www/html/Smarty/libs/sysplugins/smarty_internal_write_file.php on line 46

有什么方法解决吗,阿里云是不是不支持smarty的缓存?

航空母舰
文章540篇 | 关注61
关注
提供基于开源Elasticsearch及商业版X-pack插件,致力于数据分析、数据搜索等场... 查看详情
预置千套精美模板,覆盖上百行业,模板随意切换,支持6种语言,支持企业备案 查看详情
消息队列(Message Queue,简称MQ)是阿里云商用的专业消息中间件,是企业级互联网... 查看详情
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效... 查看详情
阿里云总监课正式启航

阿里云总监课正式启航