每个子类别的类别重复
Categories are repeating for each subcategory
我正在菜单中显示类别。有些类别有子类别。
获取父类别的函数
function get_parent_category(){
$query="select * from blog_categories where parent_id=0
ORDER BY
CASE id
WHEN '2' THEN 1
WHEN '1' THEN 2
WHEN '3' THEN 3
ELSE id
END";
$rows=array();
$result=$this->query($query);
while($row=$this->fetch_array($result)){
$row['url']=$this->get_cat_url($row);
$rows[]=$row;
}
return $rows;
}
子类别函数
function get_child_category(){
$query="select * from blog_categories where parent_id!=0";
$rows=array();
$result=$this->query($query);
while($row=$this->fetch_array($result)){
$row['url']=$this->get_cat_url($row);
$rows[]=$row;
}
return $rows;
}
在页面上显示为:
<ul class="nav navbar-nav">
<li><a href="<?php echo BASE_URL ?>">Home</a></li>
<?php
foreach($this->parent_category as $cat){
foreach($this->child_category as $child_cat){
if($cat['id']==$child_cat['parent_id']){
?>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#"><?php echo $cat['name'];?>
<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#"><?php echo $child_cat['name']?></a></li>
</ul>
</li>
<?php
}elseif($cat['parent_id']==0){
?>
<li><a href="<?php echo $cat['url']?>"><span><?php echo $cat['name'];?></span></a></li>
<?php
}
?>
<?php }}?>
输出和问题
红色的主要类别圆圈是 seerah,它有两个子类别。显示 两次 第一次显示下拉一个子类别,第二次显示第二个子类别。
数据库结构
我想要的:
我想不重复地显示每个父类别下的每个子类别,我该如何实现?
对我来说,您似乎没有拆分 html 并在此处正确循环:
foreach($this->parent_category as $cat){
foreach($this->child_category as $child_cat){
if($cat['id']==$child_cat['parent_id']){
?>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#"><?php echo $cat['name'];?>
<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#"><?php echo $child_cat['name']?></a></li>
</ul>
</li>
通常只要你有一个循环,你应该在任何嵌套循环开始之前有一些输出。在你的情况下,第一级循环是关于类别的,它应该成为父主菜单 <ul>
.
的 <li>
我觉得。您需要将此片段转换为:
foreach($this->parent_category as $cat){ ?>
<li ...>
...
<ul ...> <?php
foreach($this->child_category as $child_cat){ ?>
<li>...</li> <?php
} ?>
</ul>
</li> <?php
}
当你在 $rows 中没有重复值时,为什么你对 $cat['name'] 再次使用这部分?
elseif($cat['parent_id']==0){
?>
<li><a href="<?php echo $cat['url']?>"><span><?php echo $cat['name'];?></span></a></li>
<?php
}
当您在 foreach 的第一部分创建时
<a class="dropdown-toggle" data-toggle="dropdown" href="#"><?php echo $cat['name'];?>
这是我处理问题的方式
<?php
foreach($this->parent_category as $cat){
$html = '';
foreach($this->child_category as $child_cat){
if($cat['id']==$child_cat['parent_id']){
$html .= '<li><a href="'.$child_cat['url'].'">' . $child_cat['name'] . '</a></li>';
// here is all child categories are saved in var.
}
}
if ($html == '') {
?>
<li><a href="<?php echo $cat['url']?>"><span><?php echo $cat['name'];?></span></a></li>
<?php
} else {
?>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#"><?php echo $cat['name'];?>
<span class="caret"></span></a>
<ul class="dropdown-menu">
<?php echo $html; ?> // here is displayed under parent category
</ul>
</li>
<?php
}
}
?>
输出
我正在菜单中显示类别。有些类别有子类别。
获取父类别的函数
function get_parent_category(){
$query="select * from blog_categories where parent_id=0
ORDER BY
CASE id
WHEN '2' THEN 1
WHEN '1' THEN 2
WHEN '3' THEN 3
ELSE id
END";
$rows=array();
$result=$this->query($query);
while($row=$this->fetch_array($result)){
$row['url']=$this->get_cat_url($row);
$rows[]=$row;
}
return $rows;
}
子类别函数
function get_child_category(){
$query="select * from blog_categories where parent_id!=0";
$rows=array();
$result=$this->query($query);
while($row=$this->fetch_array($result)){
$row['url']=$this->get_cat_url($row);
$rows[]=$row;
}
return $rows;
}
在页面上显示为:
<ul class="nav navbar-nav">
<li><a href="<?php echo BASE_URL ?>">Home</a></li>
<?php
foreach($this->parent_category as $cat){
foreach($this->child_category as $child_cat){
if($cat['id']==$child_cat['parent_id']){
?>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#"><?php echo $cat['name'];?>
<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#"><?php echo $child_cat['name']?></a></li>
</ul>
</li>
<?php
}elseif($cat['parent_id']==0){
?>
<li><a href="<?php echo $cat['url']?>"><span><?php echo $cat['name'];?></span></a></li>
<?php
}
?>
<?php }}?>
输出和问题
红色的主要类别圆圈是 seerah,它有两个子类别。显示 两次 第一次显示下拉一个子类别,第二次显示第二个子类别。
数据库结构
我想要的:
我想不重复地显示每个父类别下的每个子类别,我该如何实现?
对我来说,您似乎没有拆分 html 并在此处正确循环:
foreach($this->parent_category as $cat){
foreach($this->child_category as $child_cat){
if($cat['id']==$child_cat['parent_id']){
?>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#"><?php echo $cat['name'];?>
<span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="#"><?php echo $child_cat['name']?></a></li>
</ul>
</li>
通常只要你有一个循环,你应该在任何嵌套循环开始之前有一些输出。在你的情况下,第一级循环是关于类别的,它应该成为父主菜单 <ul>
.
<li>
我觉得。您需要将此片段转换为:
foreach($this->parent_category as $cat){ ?>
<li ...>
...
<ul ...> <?php
foreach($this->child_category as $child_cat){ ?>
<li>...</li> <?php
} ?>
</ul>
</li> <?php
}
当你在 $rows 中没有重复值时,为什么你对 $cat['name'] 再次使用这部分?
elseif($cat['parent_id']==0){
?>
<li><a href="<?php echo $cat['url']?>"><span><?php echo $cat['name'];?></span></a></li>
<?php
}
当您在 foreach 的第一部分创建时
<a class="dropdown-toggle" data-toggle="dropdown" href="#"><?php echo $cat['name'];?>
这是我处理问题的方式
<?php
foreach($this->parent_category as $cat){
$html = '';
foreach($this->child_category as $child_cat){
if($cat['id']==$child_cat['parent_id']){
$html .= '<li><a href="'.$child_cat['url'].'">' . $child_cat['name'] . '</a></li>';
// here is all child categories are saved in var.
}
}
if ($html == '') {
?>
<li><a href="<?php echo $cat['url']?>"><span><?php echo $cat['name'];?></span></a></li>
<?php
} else {
?>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#"><?php echo $cat['name'];?>
<span class="caret"></span></a>
<ul class="dropdown-menu">
<?php echo $html; ?> // here is displayed under parent category
</ul>
</li>
<?php
}
}
?>
输出