php - 动态子类别未正确显示
问题描述
我的网站中有一个侧导航,我想从我的数据库中动态显示类别和子类别的列表。我的类别可以正确显示为列表项,但我的子类别显示不正确。现在它只在最底部的类别中显示子类别,而不是在每个类别下拉列表中显示列表。我尝试将 sub_category 函数放在 DELIMETER 中,但这没有用,我查看了其他问题,但似乎没有一个符合我的需要。所以我的问题是我如何格式化这个,以便每个类别都显示一个子类别列表?这是我的功能代码:
function get_categories(){
$query = query("SELECT * FROM categories");
confirm($query);
while ($row = fetch_array($query)) {
$category_links = <<<DELIMETER
<li><a href="category.php?id={$row['cat_id']}" >{$row['cat_title']}</a>
<div class="megadrop">
DELIMETER;
echo $category_links;
}
}
function get_sub_categories(){
$query = query("SELECT * FROM sub_categories");
confirm($query);
while ($row = fetch_array($query)) {
$category_links = <<<DELIMETER
<li><a href="sub_categories.php?id={$row['cat_id']}" >{$row['sub_title']}</a></li>
DELIMETER;
echo $category_links;
}
}
这是侧面导航页面:
<div class="col-md-3">
<ul class="menu">
<?php get_categories();?>
<div class="col">
<ul>
<?php get_sub_categories(); ?>
</li>
</ul>
</div>
</li>
</ul>
</div>
感谢您的任何帮助。
解决方案
甘道夫,它不能按照你想要的方式工作,因为你是一个接一个地运行这两个循环而不是交织在一起。
这基本上是:
> get_categories()
<ul class="menu">
<li> __CAT0__
<li> __CAT1__
<li> __CAT2__
...
<div class="col">
<ul>
<li> __SUBCAT0.0__
<li> __SUBCAT0.1__
<li> __SUBCAT1.0__
<li> __SUBCAT2.0__
...
你看出它有什么缺陷了吗?答案在于创建一个适当的数据类型,它能够表示您所追求的嵌套结构(您最肯定想要的是一个多维数组)。
那么让我们看看我们能做些什么:
<?php
function get_sub_categories() {
$categories = [];
$query = query("SELECT * FROM sub_categories");
confirm($query);
while ($row = fetch_array($query)) {
$parent = $row['parent_id'];
$categories[$parent][] = $row;
}
return function($parent) use ($categories) {
return isset($categories[$parent])
? $categories[$parent]
: [];
};
};
}
function get_categories(){
$categories = [];
$query = query("SELECT * FROM categories");
confirm($query);
$findSubCategoriesFor = get_sub_categories();
while ($row = fetch_array($query)) {
$id = $row['cat_id'];
$categories[$id] = [
'category' => $row,
'children' => $findSubCategoriesFor($id),
];
}
return $categories;
}
现在,正确渲染多级导航所需要做的就是get_categories()
使用嵌套循环(即类别 -> 子项、类别 -> 子项...)一一调用和渲染每个条目
推荐阅读
- javascript - 如何从函数参数中指定的json数组中获取密钥而不循环?
- java - 使用 toString 打印结果数组
- excel - 使用单元格语法时被调用者拒绝调用
- networking - GCE 实例无法访问 - 连接:网络无法访问
- php - 生产中的 Docker + symfony 资产 404 + nginx
- jquery - 使用没有任何类的主体更改标签的颜色
- node.js - 测试完成而不运行任何断言(ava-nodejs)
- php - Laravel 删除只是不工作
- javascript - 加载资源失败:服务器响应状态为 405 ()
- ruby-on-rails - 撬显示模型命令不起作用