很多開源的程序系統都有自定義表單功能,比如織夢和帝國;他們的自定義表單是創建了一個新的表,這是一種實現方式,但是有的時候我們可能需要一些附屬的內容,或並不需要建多個表,只希望通過一個字段來存放我們附加的這些內容,這時候我們就可以通過下面這種實現方式來實現。
先看一下實現效果:
我們可以設置他的提示文字,字段,類型,默認值,參數,排序,是否在列表顯示。當然我們還可以增加一些類似的展現方式,是否加亮等等。其類型有文本、下拉,單選,復選,多行文本等類型。看一下表結構:
Id不用說了,name就是表單提示文字,也就是比如姓名,性別等,qian和ziduan 是結合用的,為了就是好區分,用一個前綴和字段來組成自定義的字段標簽,比較容易區分,type就是類型,value就是默認值,whcs就是參數,這個參數是默認在其類型是文本或多行文本才起作用,文本時第一個參數限制最大字節數,第二個限制長度。Role就是排序,yesno就是是否在前台顯示。
代碼就不用細說了吧,在設置這個自定義表單的時候比較簡單,就是遍歷一下,根據其type組合。
我給大家看一下這個地方的代碼。
[php] view plaincopyprint? //獲取參數配置信息
$system = $this->tmp_mod->getAllSystem();
if($system){
foreach($system as $key=>$val){
if($val['name']&&$val['ziduan']){
$zhu = '';
if($val['value']){
$value = @explode(',',$val['value']);
}
if($val['whcs']){
$whcs = @explode('$',$val['whcs']);
}
if(2==$val['type']){
$zhu = '<select name="'.$val['qian'].$val['ziduan'].'">';
foreach($value as $k=>$v){
$zhu .='<option value="'.$v.'">'.$v.'</option>';
}
$zhu .='</select>';
}elseif(3==$val['type']){
foreach($value as $k=>$v){
$check='';
if('0'==$k){
$check = 'checked';
}
$zhu .='<input type="radio" name="'.$val['qian'].$val['ziduan'].'" '.$check.' value="'.$v.'">'.$v;
}
}elseif(4==$val['type']){
foreach($value as $m=>$n){
$zhu .='<input type="checkbox" name="'.$val['qian'].$val['ziduan'].'[]" value="'.$n.'">'.$n;
}
}
$biao[$key]['name'] = $val['name'];
switch ($val['type']){
case '1':$biao[$key]['value']='<input type="text" id="'.$val['qian'].$val['ziduan'].'" name="'.$val['qian'].$val['ziduan'].'"
maxlength="'.$whcs[0].'" style="width:'.$whcs[1].'px" value="'.$val['value'].'" />';break;
case '2':$biao[$key]['value']=$zhu;break;
case '3':$biao[$key]['value']=$zhu;break;
case '4':$biao[$key]['value']=$zhu;break;
case 5:$biao[$key]['value']='<textarea id="'.$val['qian'].$val['ziduan'].'" style="width:'.$whcs[0].'px;height:'.$whcs[1].'px" name="'.$val['qian'].$val['ziduan'].'">'.$val['value'].'</textarea>';break;
default:;
}
}
}
}