我正在使用此类别脚本:
<?php
include("connect.php");
$nav_query = mysql_query("SELECT * FROM `categories` ORDER BY `id`");
$tree = "";
$depth = 1;
$top_level_on = 1;
$exclude = array();
array_push($exclude, 0);
while ($nav_row = mysql_fetch_array($nav_query)) {
$goOn = 1;
for ($x = 0; $x < count($exclude); $x++) {
if ($exclude[$x] == $nav_row['id']) {
$goOn = 0;
break;
}
}
if ($goOn == 1) {
$tree .= $nav_row['name'] . "<br>";
array_push($exclude, $nav_row['id']);
if ($nav_row['id'] < 6) {
$top_level_on = $nav_row['id'];
}
$tree .= build_child($nav_row['id']);
}
}
function build_child($oldID) {
global $exclude, $depth;
$child_query = mysql_query("SELECT * FROM `categories` WHERE parent_id=" . $oldID);
while ($child = mysql_fetch_array($child_query)) {
if ($child['id'] != $child['parent_id']) {
for ($c=0; $c < $depth; $c++) {
$tempTree .= " ";
}
$tempTree .= "- " . $child['name'] . "<br>";
$depth++;
$tempTree .= build_child($child['id']);
$depth--;
array_push($exclude, $child['id']);
}
}
return $tempTree;
}
echo $tree;
?>
它依赖于以下mysql数据库结构:
id | parent_id | name
1 Cats
2 1 Siamese Cats
3 2 Lilac Point Siamese Cats
4 Dogs
etc...
该脚本允许无限制的类别深度,但有一个主要的垮台。它显示前端的类别导航,如下所示:
Cats
- Siamese Cats
- Lilac Point Siamese Cats
Dogs
我怎么能让它显示如下:
Cats
- Siamese Cats
- Lilac Point Siamese Cats
Dogs
那么对于每个额外的类别深度,另一个空格是否会被添加到类别文本的开头缩进中?
答案 0 :(得分:0)
由于您已经记录了深度,因此请使用它。 E.g。
$indent = '';
for($i = 0; $i < $depth; $i++) {
$indent .= " ";
}
$tempTree .= $indent . "- " . $child['name'] . "<br>";
要使其显示您想要的方式,您可能需要使用$depth
初始化0
。
另请注意,在嵌套for
循环中执行SQL查询不是最佳方法。如果可能,请尝试减少查询次数。
例如,您可以使用类,并立即获取所有条目,然后使用对象和数组构建树结构。