在搞项目时遇到的无限级分类思路
分类信息表:
模型里的方法:
public function reSort($data, $parent_id=0, $level=0){
//存排序好之后的数据
static $ret = array();
foreach ($data as $k => $v){
if($v['parent_id'] == $parent_id){
$v['level'] = $level;
$ret[] = $v;
// 把这条 记录从原数组中删除掉,下次再循环时不用再循环判断这条记录
unset($data[$k]);
// 找当前这条记录的子类
$this->reSort($data, $v['id'], $level+1);
}
}
return $ret;
}
public function search(){
$data = $this->select();
$data = $this->reSort($data);
return array(
'page' => '',
'data' => $data,
);
}
控制器里的方法:
public function lst(){
$model = D('Category');
$data = $model->search();
$this->assign('data', $data['data']);
$this->assign('page', $data['page']);
$this->display();
}
视图:
<?php foreach ($data as $k => $v): ?>
<tr level="<?php echo $v['level']; ?>">
<td align="center"><?php echo $v['id']; ?></td>
<td> <a class="expend" href="javascript:void(0);">[-]</a> <?php echo str_repeat('-', $v['level'] * 2) . $v['cat_name']; ?></td>
<td align="center">
<a href="__CONTROLLER__/save?id=<?php echo $v['id']; ?>" title="编辑">编辑</a> |
<a οnclick="return confirm('确定要删除吗?');" href="__CONTROLLER__/del?id=<?php echo $v['id']; ?>" title="编辑">移除</a>
</td>
</tr>
<?php endforeach; ?>
结果为: