【问题标题】:codeigniter dynamic menu creationcodeigniter 动态菜单创建
【发布时间】:2017-08-14 13:28:11
【问题描述】:

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

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

【问题讨论】:

  • 你能告诉我们你的数据库表结构包括内容吗?
  • 请查看更新后的图片
  • bg_id 5 到底是什么?
  • bg_id 来自 id=5 且名称为 Fruits 的表
  • 请也给我看看

标签: codeigniter dynamic menu


【解决方案1】:

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

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

【讨论】:

  • 我收到一个错误,上面写着严重性:解析错误消息:语法错误,意外 '$query' (T_VARIABLE).at line $query = $this->db->query($sql_query) ;
  • 是的,我错过了分号
  • 仍然出现错误,例如----->错误编号:1052 on 子句中的列 'bg_id' 不明确选择 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 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 ... .这个错误也出现在mysql查询执行中
  • 在纠正不明确的错误后,我可以运行 sql 代码,但此代码给出的输出类似于 5 倍水果 5 倍蔬菜等
  • 是的,我没有你的数据库结构的全貌,我只能提供一些基于假设的想法。您是否尝试过直接在 mysql 上运行 sql 查询?你能确认你从 sql 查询中得到了 2 条记录吗?
猜你喜欢
  • 2023-01-30
  • 2018-10-07
  • 2015-04-08
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
相关资源
最近更新 更多