thinkphp动态加载菜单的问题
程序员文章站
2024-02-09 15:16:22
...
thinkphp public function loadMenu(){
$menu=D('menu');
$lists=$menu->order('id Asc')->getField('id,menuid,menuname,parentid,URL');
foreach($lists as $key=>$value){
$lists[$key]['parentid']=$value['parentid'];
$lists[$key]['menuid']=$value['menuid'];
$lists[$key]['menuname']=$value['menuname'];
$lists[$key]['op']=array(
'delete'=>U('delete',array('menuid'=>$value['menuid'])),
'deletechildmenu'=>U('deletechildmenu1',array('menuid'=>$value['menuid'])),
);
$lists[$key]['URL']=$value['URL'];
$ids[]=$value['menuid'];
}
dump($ids);
//获取回复
$childmenu=D('childmenu');
$map['menuid']=array('in',$ids);
//dump($ids);
$childmenus=$childmenu->where($map)->order('menuid asc')->select();
//dump($childmenus);
dump($lists);
if(is_array($childmenus)){
foreach($childmenus as $key=>$value){
$value['childmenuname']=$value['childmenuname'];
$value['childmenuURL']=$value['childmenuURL'];
$value['op']=array(
'delete'=>U('deletechildmenu',array('childmenuid'=>$value['childmenuid'])),
);
//print_r($lists[$value['menuid']]['newchildmenu'][$value['childmenuid']]);
$lists[$value['menuid']]['newchildmenu'][$value['childmenuid']]=$value;
print_r($lists[$value['menuid']]['newchildmenu'][$value['childmenuid']]);
}
}
dump($lists);
//$this->assign('list',$lists);
$this->list=$lists;
$this->display('Message/lyb_leftmenu');
}
dump($lists)结果如下
array(5) {
[1] => array(7) {
["id"] => string(1) "1"
["menuid"] => string(1) "1"
["menuname"] => string(12) "系统设置"
["parentid"] => string(1) "0"
["URL"] => string(31) "/app/index.php/System/setSystem"
["op"] => array(2) {
["delete"] => string(43) "/app/index.php/Message/delete/menuid/1.html"
["deletechildmenu"] => string(53) "/app/index.php/Message/deletechildmenu1/menuid/1.html"
}
["newchildmenu"] => array(1) {
[8] => array(5) {
["childmenuid"] => string(1) "8"
["menuid"] => string(1) "1"
["childmenuname"] => string(21) "管理员密码设置"
["childmenuURL"] => string(48) "/app/index.php/Message/update_adminpassword.html"
["op"] => array(1) {
["delete"] => string(57) "/app/index.php/Message/deletechildmenu/childmenuid/8.html"
}
}
}
}
[3] => array(6) {
["id"] => string(1) "3"
["menuid"] => string(2) "10"
["menuname"] => string(12) "留言查看"
["parentid"] => string(1) "0"
["URL"] => NULL
["op"] => array(2) {
["delete"] => string(44) "/app/index.php/Message/delete/menuid/10.html"
["deletechildmenu"] => string(54) "/app/index.php/Message/deletechildmenu1/menuid/10.html"
}
}
[6] => array(6) {
["id"] => string(1) "6"
["menuid"] => string(2) "15"
["menuname"] => string(12) "菜单设置"
["parentid"] => string(1) "0"
["URL"] => NULL
["op"] => array(2) {
["delete"] => string(44) "/app/index.php/Message/delete/menuid/15.html"
["deletechildmenu"] => string(54) "/app/index.php/Message/deletechildmenu1/menuid/15.html"
}
}
[10] => array(1) {
["newchildmenu"] => array(2) {
[9] => array(5) {
["childmenuid"] => string(1) "9"
["menuid"] => string(2) "10"
["childmenuname"] => string(18) "查看所有留言"
["childmenuURL"] => string(32) "/app/index.php/Message/leaveWord"
["op"] => array(1) {
["delete"] => string(57) "/app/index.php/Message/deletechildmenu/childmenuid/9.html"
}
}
[10] => array(5) {
["childmenuid"] => string(2) "10"
["menuid"] => string(2) "10"
["childmenuname"] => string(12) "审核留言"
["childmenuURL"] => string(37) "/app/index.php/Message/checkLeaveWord"
["op"] => array(1) {
["delete"] => string(58) "/app/index.php/Message/deletechildmenu/childmenuid/10.html"
}
}
}
}
[15] => array(1) {
["newchildmenu"] => array(1) {
[11] => array(5) {
["childmenuid"] => string(2) "11"
["menuid"] => string(2) "15"
["childmenuname"] => string(18) "查看所有菜单"
["childmenuURL"] => string(4) "NULL"
["op"] => array(1) {
["delete"] => string(58) "/app/index.php/Message/deletechildmenu/childmenuid/11.html"
}
}
}
}
}
我想把查看所有留言,审核留言放在留言查看下面,为什么就是不行了?
你的代码我参考一下,我还是先用我的吧,php代码,数据表结构,html我都发了,看能不能改成我的菜单结构:
系统菜单
|--管理员密码修改
留言查看
|-查看所有留言
|-审核留言
菜单设置
|-查看所有菜单
|-添加菜单
|-删除菜单
|-编辑菜单
现在的问题是管理员密码修改菜单能放入$lists数组中,位置正确,查看所有留言和审核留言就在$lists中放错位置
$menu=D('menu');
$lists=$menu->order('id Asc')->getField('id,menuid,menuname,parentid,URL');
foreach($lists as $key=>$value){
$lists[$key]['parentid']=$value['parentid'];
$lists[$key]['menuid']=$value['menuid'];
$lists[$key]['menuname']=$value['menuname'];
$lists[$key]['op']=array(
'delete'=>U('delete',array('menuid'=>$value['menuid'])),
'deletechildmenu'=>U('deletechildmenu1',array('menuid'=>$value['menuid'])),
);
$lists[$key]['URL']=$value['URL'];
$ids[]=$value['menuid'];
}
dump($ids);
//获取回复
$childmenu=D('childmenu');
$map['menuid']=array('in',$ids);
//dump($ids);
$childmenus=$childmenu->where($map)->order('menuid asc')->select();
//dump($childmenus);
dump($lists);
if(is_array($childmenus)){
foreach($childmenus as $key=>$value){
$value['childmenuname']=$value['childmenuname'];
$value['childmenuURL']=$value['childmenuURL'];
$value['op']=array(
'delete'=>U('deletechildmenu',array('childmenuid'=>$value['childmenuid'])),
);
//print_r($lists[$value['menuid']]['newchildmenu'][$value['childmenuid']]);
$lists[$value['menuid']]['newchildmenu'][$value['childmenuid']]=$value;
print_r($lists[$value['menuid']]['newchildmenu'][$value['childmenuid']]);
}
}
dump($lists);
//$this->assign('list',$lists);
$this->list=$lists;
$this->display('Message/lyb_leftmenu');
}
dump($lists)结果如下
array(5) {
[1] => array(7) {
["id"] => string(1) "1"
["menuid"] => string(1) "1"
["menuname"] => string(12) "系统设置"
["parentid"] => string(1) "0"
["URL"] => string(31) "/app/index.php/System/setSystem"
["op"] => array(2) {
["delete"] => string(43) "/app/index.php/Message/delete/menuid/1.html"
["deletechildmenu"] => string(53) "/app/index.php/Message/deletechildmenu1/menuid/1.html"
}
["newchildmenu"] => array(1) {
[8] => array(5) {
["childmenuid"] => string(1) "8"
["menuid"] => string(1) "1"
["childmenuname"] => string(21) "管理员密码设置"
["childmenuURL"] => string(48) "/app/index.php/Message/update_adminpassword.html"
["op"] => array(1) {
["delete"] => string(57) "/app/index.php/Message/deletechildmenu/childmenuid/8.html"
}
}
}
}
[3] => array(6) {
["id"] => string(1) "3"
["menuid"] => string(2) "10"
["menuname"] => string(12) "留言查看"
["parentid"] => string(1) "0"
["URL"] => NULL
["op"] => array(2) {
["delete"] => string(44) "/app/index.php/Message/delete/menuid/10.html"
["deletechildmenu"] => string(54) "/app/index.php/Message/deletechildmenu1/menuid/10.html"
}
}
[6] => array(6) {
["id"] => string(1) "6"
["menuid"] => string(2) "15"
["menuname"] => string(12) "菜单设置"
["parentid"] => string(1) "0"
["URL"] => NULL
["op"] => array(2) {
["delete"] => string(44) "/app/index.php/Message/delete/menuid/15.html"
["deletechildmenu"] => string(54) "/app/index.php/Message/deletechildmenu1/menuid/15.html"
}
}
[10] => array(1) {
["newchildmenu"] => array(2) {
[9] => array(5) {
["childmenuid"] => string(1) "9"
["menuid"] => string(2) "10"
["childmenuname"] => string(18) "查看所有留言"
["childmenuURL"] => string(32) "/app/index.php/Message/leaveWord"
["op"] => array(1) {
["delete"] => string(57) "/app/index.php/Message/deletechildmenu/childmenuid/9.html"
}
}
[10] => array(5) {
["childmenuid"] => string(2) "10"
["menuid"] => string(2) "10"
["childmenuname"] => string(12) "审核留言"
["childmenuURL"] => string(37) "/app/index.php/Message/checkLeaveWord"
["op"] => array(1) {
["delete"] => string(58) "/app/index.php/Message/deletechildmenu/childmenuid/10.html"
}
}
}
}
[15] => array(1) {
["newchildmenu"] => array(1) {
[11] => array(5) {
["childmenuid"] => string(2) "11"
["menuid"] => string(2) "15"
["childmenuname"] => string(18) "查看所有菜单"
["childmenuURL"] => string(4) "NULL"
["op"] => array(1) {
["delete"] => string(58) "/app/index.php/Message/deletechildmenu/childmenuid/11.html"
}
}
}
}
}
我想把查看所有留言,审核留言放在留言查看下面,为什么就是不行了?
回复讨论(解决方案)
需要对子菜单排序?
这个不一定,关键是构造出来的菜单结构要符合要求,也就是对$lists有要求
你参考下
$list = array ( array ('id' => '1','menuname' => '系统设置','parentid' => '0','sort' => '0',), array ('id' => '2','menuname' => '用户管理','parentid' => '0','sort' => '1',), array ('id' => '3','menuname' => '文章管理','parentid' => '0','sort' => '2',), array ('id' => '4','menuname' => '评论管理','parentid' => '0','sort' => '3',), array ('id' => '5','menuname' => '类别管理','parentid' => '0','sort' => '4',), array ('id' => '6','menuname' => '用户列表','parentid' => '1','sort' => '0',), array ('id' => '7','menuname' => '用户审核','parentid' => '2','sort' => '2',), array ('id' => '8','menuname' => '文章新增','parentid' => '3','sort' => '3',), array ('id' => '9','menuname' => '文章审核','parentid' => '3','sort' => '4',),);function tree(&$list,$parent_id,$deep){ static $tree = array(); foreach($list as $v){ if($v['parentid'] == $parent_id){ $v['sort'] = $deep; $tree[] = $v; tree($list,$v['id'],$deep+1); } } return $tree; } $result = tree($list,0,0); // 无限极分类 echo '';print_r($result); echo ''; foreach($result as $v){ echo '|' . str_repeat('----',$v['sort']); echo $v['menuname']; echo '
'; }对于后台菜单,我是这么设计的,仅供参考
$m = M('menu');$pagedata = $m->join('left join pagemenu on pagemenu.type = menu.id')->field('pagemenu.id,menu.menuname,pagemenu.pagename,pagemenu.type,pagemenu.pageurl')->select();$res=array();foreach($pagedata as $val){ $res[$val['menuname']][]=$val;}$this->assign('res', $res);$this->display('left');
tpl
- {$key}
html
你的代码我参考一下,我还是先用我的吧,php代码,数据表结构,html我都发了,看能不能改成我的菜单结构:
系统菜单
|--管理员密码修改
留言查看
|-查看所有留言
|-审核留言
菜单设置
|-查看所有菜单
|-添加菜单
|-删除菜单
|-编辑菜单
现在的问题是管理员密码修改菜单能放入$lists数组中,位置正确,查看所有留言和审核留言就在$lists中放错位置
你看下能不能改?
上一篇: 数据库应用的linux安全等级配置