本帖最后由 xuzuning 于 2014-02-04 10:45:49 编辑

解决方案 »

  1.   

    CREATE TABLE IF NOT EXISTS `think_menu` (
      `id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
      `menuid` varchar(5) NOT NULL,
      `menuname` varchar(255) NOT NULL,
      `parentid` smallint(5) DEFAULT NULL,
      `childid` smallint(255) DEFAULT NULL,
      `URL` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;
      

  2.   

    推荐版主的帖子:http://bbs.csdn.net/topics/390524563
      

  3.   

    在thinkphp中不好调用吧,如果是pathinfo模式,该怎么调用了?如果是
    Tree($praentid,$childid,$deep)
    http://localhost/app/index.php/Message/Tree后面应该怎么写呢?
      

  4.   

    1、从你的代码中看不出你打算做什么
    2、如果外层循环是父菜单,那么内层循环就是为了组装父菜单项的子菜单数据
    如果是这样,那么你的代码效率太低了
    tp 提供了关联查询,并返回巢状数组的功能,并不需要你太费脑筋
    3、传递的参数很自然的是父节点的id,这样就可以顺利的获取该id下的一级子节点的数据了
      

  5.   

    1 是将我上面的表menu拆分成两个表进行关联查询吗?
    select menuid from think_menu where menuid in (select parentid from think_menu)?   
    还是建两个表think_menu,think_childmenu 代码如下
    public function loadMenu(){
    $menu=D('menu');
    $lists=$menu->order('id Asc')->getField('id,menuid,menuname,parentid,URL');
    foreach($lists as $key=>$value){
    $lists[$key]['menuid']=$value['menuid'];
    $lists[$key]['menuname']=$value['menuname'];
    $lists[$key]['parentid']=$value['parentid'];
    $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'];

    }
    $childmenu=D('childmenu');
    $map['menuid']=array('in',$ids);
    $childmenus=$childmenu->where($map)->order('menuid asc')->select();
    dump($childmenus);
    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'])),
    );
    $lists[$value['menuid']]['newchildmenu'][$value['childmenuid']]=$value;
    //print_r($lists[$value['menuid']]['newchildmenu'][$value['childmenuid']]);
    }
    }
    dump($lists);
    $this->assign('list',$lists);
    $this->display('Message/lyb_leftmenu');
    }
    $lists数据不对啊