thinkphp动态加载菜单的问题
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 '<pre class="brush:php;toolbar:false">';print_r($result); echo '<pre class="brush:php;toolbar:false">'; foreach($result as $v){ echo '|' . str_repeat('----',$v['sort']); echo $v['menuname']; echo '<br />'; }
对于后台菜单,我是这么设计的,仅供参考
$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
<volist name="res" id="vo" key="k"> <dl> <dt> {$key} </dt> <dd> <ul> <volist name="vo" id="v"> <li><a href="__APP__/{$v.pageurl}" target="mainFrame">{$v.pagename}</a> </li> </volist> </ul> </dd> </dl> </volist>
html
你的代码我参考一下,我还是先用我的吧,php代码,数据表结构,html我都发了,看能不能改成我的菜单结构:
系统菜单
|--管理员密码修改
留言查看
|-查看所有留言
|-审核留言
菜单设置
|-查看所有菜单
|-添加菜单
|-删除菜单
|-编辑菜单
现在的问题是管理员密码修改菜单能放入$lists数组中,位置正确,查看所有留言和审核留言就在$lists中放错位置
你看下能不能改?

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸
