2017-02-14 118 views
0

嗨我想创建一个动态菜单与子菜单。我差不多完成了,但循环正在重复,正如你在输出图像中看到的那样,这不应该发生。错误类似1。水果主菜单正在重复。[2]。水果子类别正在分割和显示。codeigniter动态菜单创建

error output

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         
     } 
     } 
     ?> 
+0

你能告诉我们你的数据库表结构,包括内容吗? – sintakonte

+0

请检查更新后的图片 –

+0

bg_id 5究竟是什么? – sintakonte

回答

0

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

<?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; 
} 
?> 
+0

我收到它说的错误严重度:分析错误 消息:语法错误,意想不到 '$查询'(T_VARIABLE)。在线路$查询= $这个 - > DB->查询($ sql_query); –

+0

是的,我错过了分号 – Jaaaaaaay

+0

仍然得到错误,如----->错误编号:1052 列 'bg_id' 在条款不明确 选择rp.bg_id,bf.category_name,bf.controller,BF。 phpfile_name,bf.displayform_name from bg_assignment ba内部连接role_permission rp在ba.role_id = rp.role_id内部连接bg_forms bf在bg_id = bf.bg_id其中rp.permission = 1和ba.active_status = 1由rp.bg_id,bf命令。 displayform_name ....这个错误是越来越mysql执行查询也 –