自定义、个性化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代码
- case ‘cols’:
- $$_key = intval($_val);
- break;
修改返回值:
PHP代码
- if(!emptyempty($params['assign'])) {
- $smarty->assign($params['assign'], $_html_result);
- } else {
- if ( isset($cols) ) {
- $ret = ‘<table width=100%><tr>’;
- $_i = 0;
- foreach ($_html_result as $_val) {
- $_i++;
- $ret .= "<td>$_val</td>";
- if ($_i%$cols===0) {
- $ret .= "</tr><tr>";
- }
- }
- $ret .= "</tr></table>";
- return $ret;
- } else {
- return implode("\n",$_html_result);
- }
- }
大功告成,smarty模板文件里的调用:
XML/HTML代码
- {{html_checkboxes name="stateserve" options=$stateserve cols=8}}
解决方案二:
不直接显示,先取得返回值,再用html_table显示它:
使用html_checkboxes里的隐藏参数assign:
XML/HTML代码
- {{html_checkboxes name="stateserve" options=$stateserve cols=8 assign="checkboxes"}}
这里,相应于执行了一次
PHP代码
- $smarty->assign("checkboxes",$_html_result);
得到了$checkboxes这个smarty变量。下面用html_table显示它:
XML/HTML代码
- {{html_table loop=$checkboxes cols=8 table_attr=‘border="0"’}}
两种方案的效果一样。