PHP8.1.21版本已发布
vue8.1.21版本已发布
jquery8.1.21版本已发布

thinkphp动态加载菜单的问题

原创
2016-06-23 14:28:36 907浏览

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"
        }
      }
    }    
  }
}

我想把查看所有留言,审核留言放在留言查看下面,为什么就是不行了?

回复讨论(解决方案)

需要对子菜单排序?

这个不一定,关键是构造出来的菜单结构要符合要求,也就是对$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中放错位置

你看下能不能改?

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。