我在php mysql中有以下表category
和category_description
。我的问题是如何使用下面的信息来创建ul
li
结构中无限量的子类别。我在这里看过各种各样的例子,但是没有多少感谢您在阅读这个问题上的时间。我期待着你的回复
Column Type Null Default
category_id int(11) No
image varchar(255) Yes NULL
parent_id int(11) No 0
top tinyint(1) No
column int(3) No
sort_order int(3) No 0
status tinyint(1) No
date_added datetime No 0000-00-00 00:00:00
date_modified datetime No 0000-00-00 00:00:00
描述存储在此表中
Column Type Null
category_id int(11) No
language_id int(11) No
name varchar(255) No
description text No
meta_description varchar(255) No
meta_keyword varchar(255) No
答案 0 :(得分:1)
您已有专栏parent_id
。用它来表示类别之间的关系。如果某个类别位于根级别,则将该列设置为NULL
。
另一种方法是将类别映射到子类别的第三个表。这将允许您从上到下以及从下到上走。取决于您的应用程序使用哪种方法。
为了处理这个层次结构,你需要编写一些递归函数,并在PHP中找到一个能够正确处理类别层次结构的正确表示。
打印某种面包屑的简单递归函数看起来像这样(我假设在这个例子中你有某种ORM):
function findWayToTop($category, $breadcrumbs = array()) {
$breadcrumbs[] = $this;
$parent = $category->getParent();
if ($parent != null) {
return findWayToTop($parent, $breadcrumbs);
} else {
return $breadcrumbs;
}
}
如果您不使用ORM,最简单的方法是从数据库中获取所有类别,并将它们存储在ID为密钥的数组中。然后你可以在上面的代码中替换数组调用,它也可以工作。
答案 1 :(得分:1)
opencart有
$this->model_catalog_category->getCategory()
方法,并将类别ID作为参数传递,例如
$category = this->model_catalog_category->getCategory(5);
它也处理适当的描述连接,因此您不需要直接访问它们。正如@Till Helge Helwig已经指出的那样,如果要构建包含所有子类别的树,则需要使用递归函数。查看示例的一个好地方是实际的类别模块代码。滚动到文件catalog/controller/module/category.php
的底部,您将看到一个为其构建html的递归函数