Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
codeigniter动态菜单创建_Codeigniter_Dynamic_Menu - Fatal编程技术网

codeigniter动态菜单创建

codeigniter动态菜单创建,codeigniter,dynamic,menu,Codeigniter,Dynamic,Menu,嗨,我正在尝试创建一个带有子菜单的动态菜单。我几乎完成了,但是循环正在重复,正如您在输出图像中看到的那样,这不应该发生。错误类似。水果主菜单正在重复。[2]。水果子类别正在拆分和显示 menu.php $where_array = array('role_id' => $currentRolename , 'active_status' => '1'); //step1 $table = 'bg_assignment'; $query = $thi

嗨,我正在尝试创建一个带有子菜单的动态菜单。我几乎完成了,但是循环正在重复,正如您在输出图像中看到的那样,这不应该发生。错误类似。水果主菜单正在重复。[2]。水果子类别正在拆分和显示

menu.php

$where_array = array('role_id' => $currentRolename , 'active_status' => '1');  //step1
        $table = 'bg_assignment';
        $query = $this->db->where($where_array)->get($table);
        foreach ($query->result() as $perm)
        { 

                $bg = $perm->bg_id;  
                $temp = '1';
                    $where_array2 = array('role_id' => $currentRolename ,  'permission' => '1');            //step2         
                    $table2 = 'role_permission';
                    $query2 = $this->db->where($where_array2)->get($table2);
                            foreach ($query2->result() as $r2)
                    {  
                     $bg_id = $r2->bg_id;

                        $where_array3 = array('bg_id' => $bg_id);                       
                        $table3 = 'bg_forms';

                        $query3 = $this->db->where($where_array3)->get($table3);
                                foreach ($query3->result() as $r3)
                                {

                        $where_array4 = array('phpfile_name' => $r3->phpfile_name);                     
                    $table4 = 'bg_forms';
                    $query4 = $this->db->where($where_array4)->get($table4);
                    foreach ($query4->result() as $r4)
                    {  
                            ?>


                            <li class="treeview <?php echo menu_li_active($r4->category_name); ?>">
                            <a href="#">
                                <i class="fa fa-sitemap"></i>
                            <span>  <?php echo ($r4->category_name); ?></span>
                                <i class="fa fa-angle-left pull-right"></i>
                            </a>    

                                    <ul class="treeview-menu">     
                                        <?php  echo menu_link($r4->controller.'/'.$r4->phpfile_name,    $r4->displayform_name); ?>                                  
                                      </ul>
                    <?php } }?> 
                        </li>
                    </li>

        <?php                                 
        }   
        }  
        ?> 
$where_array=array('role_id'=>$currentRolename,'active_status'=>'1')//步骤1
$table='bg_赋值';
$query=$this->db->where($where\u数组)->get($table);
foreach($query->result()作为$perm)
{ 
$bg=$perm->bg\u id;
$temp='1';
$where_array2=array('role_id'=>$currentRolename,'permission'=>'1');//步骤2
$table2=‘角色权限’;
$query2=$this->db->where($where\u array2)->get($table2);
foreach($query2->result()作为$r2)
{  
$bg\U id=$r2->bg\U id;
$where_array3=数组('bg_id'=>$bg_id);
$table3='bg_表格';
$query3=$this->db->where($where_array3)->get($table3);
foreach($query3->result()作为$r3)
{
$where_array4=array('phpfile_name'=>$r3->phpfile_name);
$table4='bg_表格';
$query4=$this->db->where($where\u array4)->get($table4);
foreach($query4->result()作为$r4)
{  
?>

我没有做任何测试,只是在这里提出了一些想法,我认为如果在查询中使用内部连接,将会更加容易和清晰。下面的代码可能有语法错误,我没有类似的环境来做测试

<?php
//Let me just use open query to make this clear. 
$sql_query = '
select rp.bg_id,
       bf.category_name,
       bf.controller,
       bf.phpfile_name,
       bf.displayform_name   
from bg_assignment ba
inner join Role_permission rp
on ba.role_id = rp.role_id
and ba.bg_id = rp.bg_id --You might also want this line
inner join Bg_forms bf
on bg_id = bf.bg_id
where rp.permission = 1
and ba.active_status = 1
order by rp.bg_id, bf.displayform_name
';//I missed this semicolon

//Above sql query will give you two records
//Please test above query in your mysql to see if you can get below two records
/*
bg_id  category_name  controller  phpfile_name     displayform_name
5         Fruits         Product     index            Apple
5         Frutis         Product     sales            Orange
*/

$query = $this->db->query($sql_query);
$result = $query->result_array();

if(count($result) > 0){ // We get records!
  $html = '';
  for($i = 0; $i<count($result); $i++){
        $s = $result[$i];
        //Make the first li no matter what
        if($i === 0){
            $html.= '<li class="treeview">'.menu_li_active($s->category_name);
            $html.= '<a href="#">';
            $html.= '<i class="fa fa-sitemap"></i>';
            $html.= '<span>'.$s->category_name.'</span>';
            $html.= '<i class="fa fa-angle-left pull-right"></i>';
            $html.= '</a>';
            $html.= '</li>';
            $html.= '<ul class="treeview-menu">';
            $html.= menu_link($s->controller.'/'.$s->phpfile_name, $s->displayform_name);
            if(count($result)===1){
                $html.= '</ul>';
            }
        }
        else{
            if($s->category_name === $result[$i-1]->category_name){
                //If current category is the same as previous one, we put them in one tab
              $html.= menu_link($s->controller.'/'.$s->phpfile_name, $s->displayform_name); 
            }
            else{
                //If different, create a new tab
              $html.='</ul>';
              $html.= '<li class="treeview">'.menu_li_active($s->category_name);
              $html.= '<a href="#">';
              $html.= '<i class="fa fa-sitemap"></i>';
              $html.= '<span>'.$s->category_name.'</span>';
              $html.= '<i class="fa fa-angle-left pull-right"></i>';
              $html.= '</a>';
              $html.= '</li>';
              $html.= '<ul class="treeview-menu">';
              $html.= menu_link($s->controller.'/'.$s->phpfile_name, $s->displayform_name);
            }           
        }
    }
  $html.='</li>';
  echo $html;
}
?>


您可以向我们展示您的db表结构(包括内容)吗?请检查更新的图像bg_id 5到底是什么?bg_id来自id=5且名称为“结果”的表显示我也收到了一个错误,该错误表示严重性:解析错误消息:语法错误,意外的“$query”(T_变量)。在$query=$this->db->query行($sql\u查询);是的,我漏掉了分号,仍然出现错误,如------>错误号:on子句中1052列“bg_id”不明确选择rp.bg_id、bf.category_name、bf.controller、bf.phpfile_name、bf.displayform_name来自bg_分配ba内部加入角色权限rp on ba.role_id=rp.role_id内部加入bg_表单bf on bg_id=bf.bf.bg_id其中rp.permission=1和ba.active\u status=1 order by rp.bg\u id,bf.displayform\u name…mysql查询执行中也出现了此错误。在纠正了不明确的错误后,我可以运行sql代码,但此代码给出的输出类似于5倍水果5倍蔬菜等cyep,我没有数据库结构的全貌,我只能提供一些ideas基于假设。您是否尝试直接在mysql上运行sql查询?您能否确认从sql查询中获得了2条记录?