$data = db::name('AuthRule')->select();
$data = list_to_tree2($data,'id','pid');//aaa($data);
// halt($data);
$this->assign("nodeList", $data);
return $this->fetch();
/** * 把返回的数据集转换成Tree * @access public * @param array $list 要转换的数据集 * @param string $pid parent标记字段 * @param string $level level标记字段 * @return array */ function list_to_tree2($list, $pk='id',$pid = 'pid',$child = '_child',$root=0) { // 创建Tree $tree = array(); if(is_array($list)) { // 创建基于主键的数组引用 $refer = array(); foreach ($list as $key => $data) { $refer[$data[$pk]] =& $list[$key];//取出每个栏目id作为键名, } foreach ($list as $key => $data) {//开始循环,key从0开始一个一个往下走0123.。。 // 判断是否存在parent $parentId = $data[$pid];//echo $parentId.'|';//0|112|116|117|112输出每个数组里的pid if ($root == $parentId) {//key从0开始循环,如果是一级栏目pid==0 $tree[] =& $list[$key]; //用连接符,吧数组放到tree里面 }else{ //如果pid不是0,那就是二级栏目 if (isset($refer[$parentId])) { $parent =& $refer[$parentId];//用pid去refer数组,匹配出父栏目数组,用连接符拼接到这里 $parent[$child][] =& $list[$key];aaa($parent);//将当前二级栏目放到父栏目下,拼接成二维数组 } //仔细看list数组数据格式,第一遍key是0开始循环走的是tree哪里, //第二遍从1开始走,走到parent这里, } } } return $tree; }
打印出的数据格式:
$list = Array
(
[0] => Array
(
[id] => 112
[name] => /Admin
[title] => 后台
[type] => 1
[node_icon] =>
[class_icon] =>
[status] => 1
[condition] =>
[sort] => 0
[pid] => 0
[level] => 1
[update_time] => 1532081114
[create_time] => 1510821470
[is_display] => 1
)
[1] => Array
(
[id] => 117
[name] => /Admin/Index/index
[title] => 后台首页
[type] => 1
[node_icon] =>
[class_icon] =>
[status] => 1
[condition] =>
[sort] => 0
[pid] => 116
[level] => 3
[update_time] => 1510821714
[create_time] => 1510821714
[is_display] => 1
)
}
$refer = Array
(
[112] => Array
(
[id] => 112
[name] => /Admin
[title] => 后台
[type] => 1
[node_icon] =>
[class_icon] =>
[status] => 1
[condition] =>
[sort] => 0
[pid] => 0
[level] => 1
[update_time] => 1532081114
[create_time] => 1510821470
[is_display] => 1
)
[117] => Array
(
[id] => 117
[name] => /Admin/Index/index
[title] => 后台首页
[type] => 1
[node_icon] =>
[class_icon] =>
[status] => 1
[condition] =>
[sort] => 0
[pid] => 116
[level] => 3
[update_time] => 1510821714
[create_time] => 1510821714
[is_display] => 1
)
)
$tree = Array
(
[0] => Array
(
[id] => 112
[name] => /Admin
[title] => 后台
[type] => 1
[node_icon] =>
[class_icon] =>
[status] => 1
[condition] =>
[sort] => 0
[pid] => 0
[level] => 1
[update_time] => 1532081114
[create_time] => 1510821470
[is_display] => 1
)
)
$parent = Array
(
[id] => 116
[name] => /Admin/Index
[title] => 首页
[type] => 1
[node_icon] =>
[class_icon] =>
[status] => 1
[condition] =>
[sort] => 1
[pid] => 112
[level] => 2
[update_time] => 1510821685
[create_time] => 1510821685
[is_display] => 1
[is_status] => 1
[_child] => Array
(
[0] => Array
(
[id] => 117
[name] => /Admin/Index/index
[title] => 后台首页
[type] => 1
[node_icon] =>
[class_icon] =>
[status] => 1
[condition] =>
[sort] => 0
[pid] => 116
[level] => 3
[update_time] => 1510821714
[create_time] => 1510821714
[is_display] => 1
[is_status] => 1
)
)
)
页面:
<dt>管理权限</dt>
<dd>
<table width="100%" border="0" cellspacing="0" cellpadding="0" class="tab rules-data" data-rules="{present name ="$info['rules']"}{$info['rules']}{/present}">
{foreach name="nodeList" item="level1"}
<tr>
<td style="font-size: 14px;"><label><input name="rules[]" level="1" type="checkbox" obj="node_{$level1.id}" value="{$level1.id}" data="{$level1.id}:1:0" data-id="{$level1.id}" data-pid="0"/> <b class="mac-size">[项目]</b> {$level1.title}</label></td>
</tr>
{present name="level1['_child']"}
{foreach name="level1['_child']" item="level2" }
<tr>
<td style="padding-left:60px; font-size: 14px;"><label><input name="rules[]" level="2" type="checkbox" obj="node_{$level1.id}_{$level2.id}" value="{$level2.id}" data="{$level2.id}:2:{$level2.pid}" data-id="{$level2.id}" data-pid="{$level2.pid}"/> <b class="mac-size">[模块]</b> {$level2.title}</label></td>
</tr>
{present name="$level2['_child']"}
{volist name="level2['_child']" id="level3"}
<tr ><td style="padding-left: 120px;">
<label><input name="rules[]" level="3" type="checkbox" obj="node_{$level1.id}_{$level2.id}_{$level3.id}" value="{$level3.id}" data="{$level3.id}:3:{$level3.pid}" data-id="{$level3.id}" data-pid="{$level3.pid}"/> <b class="mac-size">[操作]</b>{$level3.title}</label>
</td></tr>
{present name="$level3['_child']"}
<tr>
<td style="padding-left: 160px;">
{foreach name="level3['_child']" item="level4" key="k" }
{if condition="$level4.is_display eq 1"}| {/if}
<label>
<input name="rules[]" level="4" type="checkbox" obj="node_{$level1.id}_{$level2.id}_{$level3.id}_{$level4.id}" value="{$level4.id}" data="{$level4.id}:4:{$level4.pid}" data-id="{$level4.id}" data-pid="{$level4.pid}"/> {$level4.title}
</label>
{/foreach}
</td>
</tr>
{/present}
{/volist}
{/present}
{/foreach}
{/present}
{/foreach}