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