下面來看一個關于利用jqgrid+加mysql的text類型實現簡單自定義數據模型例子,希望對各位有幫助.
有的時候,我們做東西可能速度和安全在前期并不是我們考慮的重點,數據的靈活性可能對于一個不成熟的系統更加重要,這里我使用thinkphp+mysql+jqgrid做了一個簡單的自定義數據模型,簡單總結一下.
以前我也寫過一個自定義模型:php一種不增加字段的自定義表單實現,但是當時因為沒有jqgrid這樣比較好用的工具,所以當時那個還是比較麻煩,這次當然也是不增加字段的,利用數據的text類型加json數據,實現虛擬的“表”,聽到這里,有的同學應該知道,如果我們使用mongodb其實做起來就更加的靈活和簡便,但是,因為這個東西比較小,就先這樣用著了.
首先功能特點,通過配置文件,動態配置字段的key,類型,排序,顯示,是否必填等等,比如圖片類型,定義為image即可,看一下配置文件,代碼如下:
- return array(
- //包名前綴
- 'pack_pre' => 'Pack_',
- //商品管理字段配置
- /**
- * key為字段索引、存儲字段
- * name為字段顯示名稱
- * required是否必填1是0不是
- * hidden:列表是否顯示,1隱藏,0顯示,此選項會影響搜索,但不影響編輯
- * type類型:<img,url,text>三種類型
- * 字段顯示順序與key的順序一致
- */
- 'goodsfield' => array(
- //id為系統保留字段
- //商品名
- 'title' =>array(
- 'name' =>'商品名',
- 'hidden' =>0,
- 'required'=>1,
- 'type' =>'text',
- ),
- //spu
- 'spu' =>array(
- 'name' =>'spu',
- 'hidden' =>0,
- 'required'=>1,
- 'type' =>'text',
- ),
- //圖片地址
- 'image' =>array(
- 'name' =>'圖片地址',
- 'hidden' =>0,
- 'required'=>1,
- 'type' =>'img',
- ),
- //url
- 'url' =>array(
- 'name' =>'詳情地址',
- 'hidden' =>0,
- 'required'=>1,
- 'type' =>'url',
- ),
- ),
- //以下兩個映射針對goodsfield而言
- //goods_info api map,無映射即使用原字段
- 'goodsinfomap'=>array(
- ),//開源代碼Vevb.com
- //pack post api map,商品包下發amc字段映射無映射即使用原字段
- 'map'=>array(
- ),
- );
可以通過配置,非常方便修改,并一改全改,增刪改.
2,html的jqgrid代碼,代碼如下:
- jQuery("#goodsList").jqGrid({
- url:'__APP__?m=Home&a=getList',
- datatype: "json",
- mtype: 'POST',
- colNames:['ID',<{$feildname}>,'修改時間','操作'],
- colModel:[
- {name:'id',width:25,index:'id',setGridHeight:"auto"},
- <{$feildmap}>
- {name:'lastdotime',sortable:true},
- {name:'edit',search:false,sortable:false},
- ],
- rowNum:10,
- rowList:[10,20,30],
- multiselect:true, //復選框
- pager: '#goodsPager',
- sortname: 'lastdotime',
- viewrecords: true,
- sortorder: "desc",
- editurl:'__APP__?m=Home&a=oper',//添加修改操作url
- autowidth:true,
- height:'100%'
- });
3,三個比較重要的函數,代碼如下:
- //獲取字段名稱
- function feild_name($feild){
- $fields = C($feild);
- $feild = '';
- foreach($fields as $val){
- $feild .="'".$val['name']."',";
- }
- $feild = rtrim($feild,',');
- return $feild;
- }
- //獲取字段字典
- function feild_map($feild){
- $fields = C($feild);
- $feildmap ='';
- foreach($fields as $key=>$val){
- $feildmap .= '{name:\''.$key.'\',sortable:false,editable:true';
- if(1==$val['hidden']){
- $feildmap .=',hidedlg:true,hidden:true,editrules:{edithidden:true,';
- }else{
- $feildmap .= ',editrules:{';
- }
- if(1==$val['required']){
- $feildmap .='required:true}';
- }else{
- $feildmap .='required:false}';
- }
- $feildmap .= '},'."\n";
- }
- return $feildmap;
- }
- //獲取字段列表
- function feild_list($feild,$array=array(),$row=array()){
- $row = json_decode($row['value'],true);
- $fields = C($feild);
- foreach($fields as $key=>$val){
- switch($val['type']){
- case 'url':$array[]='<a href="'.$row[$key].'" style="color:#0018D1" target="_blank">'.$row[$key].'</a>';break;
- case 'img':$array[]='<img src="'.$row[$key].'" width="60" />';break;
- default:$array[] = $row[$key];
- }
- }
- return $array;
- }
代碼沒有什么,就是通過json對象動態配置.
新聞熱點
疑難解答