适用范围:省市无限级联动,商品类别无限极联动
需要使用到的jQuery插件为cxselect,ok说不清楚,还是直接上代码比较直观
HTML代码如下:
<div id="element_id" class="formControls col-xs-8 col-sm-9"> <select class="select1" id="cate" name="category[]" data-value="" data-first-title="----全部----" style="height:30px;"></select> <select class="select2" id="cate" name="category[]" data-value="" data-first-title="----全部----" style="height:30px;"></select> <select class="select3" id="cate" name="category[]" data-value="" data-first-title="----全部----" style="height:30px;"></select> <select class="select4" id="cate" name="category[]" data-value="" data-first-title="----全部----" style="height:30px;"></select> <select class="select5" id="cate" name="category[]" data-value="" data-first-title="----全部----" style="height:30px;"></select> </div>
js代码如下:
1 <script type="text/javascript" src="__STATIC__/admin/js/cxselect/jquery.cxselect.min.js"></script> 2 3 function checkForm(){ 4 var categorys = []; 5 $("#cate").each(function () { 6 var val = $(this).val(); 7 if (val != "") { 8 categorys.push(val); 9 } 10 }); 11 if (categorys.length == 0) { 12 alert("请选择类别。"); 13 return false; 14 } 15 return true; 16 } 17 18 $.cxSelect.defaults.url = '/category/category.json'; 19 $('#element_id').cxSelect({ 20 selects: ['select1', 'select2', 'select3', 'select4', 'select5'], 21 nodata: 'none', 22 required:false, 23 firstTitle:'----全部----', 24 firstValue:'' 25 });
category.json文件需要在类别管理中生成所有类别的json文件,php控制器代码如下:
1 /*生成类别json数据*/ 2 public function createJson(){ 3 $categoryModel = new CateModel(); 4 if($categoryModel->wirteJson()){ 5 echo "<script>alert('类别数据生成成功!');location.href='index';</script>"; 6 }else{ 7 echo "<script>alert('类别数据生成失败!');location.href='index';</script>"; 8 } 9 }
php模型代码如下:
1 /*生成类别JSON数据*/ 2 public function wirteJson(){ 3 $dataInfo = \think\Db::query("select id as v,name as n,pid from think_pro_category"); 4 $data = $this->getCategoryJson($dataInfo); 5 return $data; 6 } 7 8 /** 9 * 功能:无限级类别json数据生成 10 * 参数:$data 类别查询结果集 11 * 返回值:$json 递归查询排序后的json数据 12 */ 13 public function getCategoryJson($dataInfo) { 14 /*生成json数据*/ 15 foreach($dataInfo as $category) { 16 $tree[$category['v']] = $category; 17 $tree[$category['v']]['s'] = array(); 18 } 19 $content = json_encode(generateTree($tree)); 20 $content = str_replace(',"s":[]', "", $content); 21 // for( $i = 0; $i < count($dataInfo); $i++ ) { 22 // $content = str_replace('"'.$dataInfo[$i]['v'].'":', "", $content); 23 // } 24 //$content = '['.substr($content,1,strlen($content)-2).']'; 25 //return $content; 26 /*写入文件*/ 27 //文件存放路径 28 $filePath = $_SERVER['DOCUMENT_ROOT'].DS.'/category/category.json'; 29 $returnval = file_put_contents($filePath,$content); 30 // $fopen = fopen($filePath,'w+'); 31 // fwrite($fopen,$content); 32 // fclose($fopen); 33 return $returnval; 34 }
公共函数:
1 /** 2 *处理分类数组 3 **/ 4 function generateTree($items) { 5 $tree = array(); 6 foreach($items as $item){ 7 if(isset($items[$item['pid']])){ 8 $items[$item['pid']]['s'][] = &$items[$item['v']]; 9 }else{ 10 $tree[] = &$items[$item['v']]; 11 } 12 } 13 return $tree; 14 }