最近这个项目里,涉及到很多表单的处理,select, radio, checkbox等等。而且这些都是动态生成的,所以就必须得找一个好办法处理这些表单元素。
由于系统采用smarty,所以首先考虑用smarty自带的表单处理函数,html_checkboxes,html_options, html_radios,html_select_date,html_select_time,html_select_time等。。
但是在使用的过程中,html_checkboxes却很讨厌。只有一个separator方法,要么弄成一行,要么弄成一列,元素一多了都很丑。比不上用表格控制。
解决方案一:给smarty的源文件动了一下小手术。
先加一个参数:
case 'cols':
$$_key = intval($_val);
break;
修改返回值:
if(!emptyempty($params['assign'])) {
$smarty->assign($params['assign'], $_html_result);
} else {
if ( isset($cols) ) {
$ret = '';
$_i = 0;
foreach ($_html_result as $_val) {
$_i++;
$ret .= "$_val";
if ($_i%$cols===0) {
$ret .= "";
}
}
$ret .= "";
return $ret;
} else {
return implode("\n",$_html_result);
}
}
大功告成,smarty模板文件里的调用:
html_checkboxes name="stateserve" options=$stateserve cols=8
解决方案二:
不直接显示,先取得返回值,再用html_table显示它:
使用html_checkboxes里的隐藏参数assign:
html_checkboxes name="stateserve" options=$stateserve cols=8 assign="checkboxes"
这里,相应于执行了一次
$smarty->assign("checkboxes",$_html_result);
得到了$checkboxes这个smarty变量。下面用html_table显示它:
html_table loop=$checkboxes cols=8 table_attr='border="0"'
两种方案的效果一样。