表结构如下,父类和子类是存在一张表中的,然后需要在前台完成树状展示
需要完成的展示效果如下:
实现方式:
控制器代码:
public function goodsadd(){
$catModel=D('Cat');
//数组¥arr装父类
$arr=$catModel->where('parent_id=0 and cat_id<>0')->order('cat_id,parent_id asc')->select();
//数组$arr1 装 子类
$arr1=$catModel->where("parent_id<>0")->order('cat_id asc')->select();
//新建数组 $arr0 ,将父类和子类根据父子关系装进去
for($key=0;$key<count($arr);$key++){
$arr0[]=array('cat_id'=>$arr[$key]['cat_id'],
'pcat_name'=>$arr[$key]['cat_name'],
'ccat_name'=>'',
'parent_id' =>$arr[$key]['parent_id']);
for ($k=0;$k<count($arr1);$k++){
$pid=$arr1[$k]['parent_id'];
if($arr[$key]['cat_id']==$pid)
{
$arr0[]=array('cat_id'=>$arr1[$k]['cat_id'],
'pcat_name'=>'',
'ccat_name'=>$arr1[$k]['cat_name'],
'parent_id'=>$arr1[$k]['parent_id']);
}
}
}
$this->assign('catlist',$arr0);
$this->display();
}
}
通过以上遍历arr0 的结构如下,这是一个二维数组
Array
(
[0] => Array
(
[cat_id] => 10
[pcat_name] => 手机
[ccat_name] =>
[parent_id] => 0
)
[1] => Array
(
[cat_id] => 6
[pcat_name] =>
[ccat_name] => 华为mate2
[parent_id] => 10
)
[2] => Array
(
[cat_id] => 14
[pcat_name] =>
[ccat_name] => 魅族手机
[parent_id] => 10
)
[3] => Array
(
[cat_id] => 11
[pcat_name] => 电脑
[ccat_name] =>
[parent_id] => 0
)
[4] => Array
(
[cat_id] => 15
[pcat_name] =>
[ccat_name] => 联想电脑
[parent_id] => 11
)
[5] => Array
(
[cat_id] => 12
[pcat_name] => 配件
[ccat_name] =>
[parent_id] => 0
)
[6] => Array
(
[cat_id] => 7
[pcat_name] =>
[ccat_name] => 蓝精灵充电器
[parent_id] => 12
)
[7] => Array
(
[cat_id] => 8
[pcat_name] =>
[ccat_name] => 南孚电池
[parent_id] => 12
)
[8] => Array
(
[cat_id] => 13
[pcat_name] => 充值卡
[ccat_name] =>
[parent_id] => 0
)
[9] => Array
(
[cat_id] => 16
[pcat_name] =>
[ccat_name] => 电信充值卡
[parent_id] => 13
)
)
VIEW 里面下拉列表显示代码如下:
<tr>
<td class="label">商品分类:</td>
<td><select name="cat_id">
<option ></option>
<volist name="catlist" id='vo'>
<if condition="$vo.parent_id eq 0">
<!-- 如果是父类,则该项不能选择 -->
<option value={$vo.cat_id} disabled >{$vo.pcat_name}</option>
<else/>
<!-- 如果是子类,则该项缩进2个空格,展示层次-->
<option value={$vo.cat_id}> {$vo.ccat_name}</option>
</if>
</volist>
</select>
</td>
</tr>