Tag Archives: smarty

自定义、个性化smarty里的html_checkboxes

最近这个项目里,涉及到很多表单的处理,select, radio, checkbox等等。而且这些都是动态生成的,所以就必须得找一个好办法处理这些表单元素。

由于系统采用smarty,所以首先考虑用smarty自带的表单处理函数,html_checkboxes,html_options, html_radios,html_select_date,html_select_time,html_select_time等。。

但是在使用的过程中,html_checkboxes却很讨厌。只有一个separator方法,要么弄成一行,要么弄成一列,元素一多了都很丑。比不上用表格控制。

解决方案一:给smarty的源文件动了一下小手术。

先加一个参数:

PHP代码
  1. case ‘cols’:  
  2.     $$_key = intval($_val);  
  3.     break;  

修改返回值:

PHP代码
  1. if(!emptyempty($params[‘assign’])) {  
  2.     $smarty->assign($params[‘assign’], $_html_result);  
  3. else {  
  4.     if ( isset($cols) ) {  
  5.         $ret = ‘<table width=100%><tr>’;  
  6.         $_i = 0;  
  7.         foreach ($_html_result as $_val) {  
  8.             $_i++;  
  9.             $ret .= "<td>$_val</td>";  
  10.             if ($_i%$cols===0) {  
  11.                 $ret .= "</tr><tr>";  
  12.             }  
  13.         }  
  14.         $ret .= "</tr></table>";  
  15.         return $ret;  
  16.     } else {  
  17.         return implode("\n",$_html_result);  
  18.     }  
  19.       
  20. }  

大功告成,smarty模板文件里的调用:

XML/HTML代码
  1. {{html_checkboxes name="stateserve" options=$stateserve cols=8}}  

解决方案二:
不直接显示,先取得返回值,再用html_table显示它:
使用html_checkboxes里的隐藏参数assign:

XML/HTML代码
  1. {{html_checkboxes name="stateserve" options=$stateserve cols=8 assign="checkboxes"}}  

这里,相应于执行了一次

PHP代码
  1. $smarty->assign("checkboxes",$_html_result);  

得到了$checkboxes这个smarty变量。下面用html_table显示它:

XML/HTML代码
  1. {{html_table loop=$checkboxes cols=8 table_attr=‘border="0"’}}  

两种方案的效果一样。