我在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
opencart
$this->model_catalog_category->getCategory()
$category = this->model_catalog_category->getCategory(5);
还处理适当的描述连接,因此您不需要直接访问它们。正如@Till Helge Helwig已经指出的那样,如果您想构建包含所有子类别的树,则需要使用递归函数。在实际的类别模块代码中可以看到这样的示例。滚动到文件catalog/controller/module/category.php
的底部,您将看到为它构建html的递归函数
您已经有一个列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为键的数组中。然后,您可以替换上面代码中的数组调用,它也可以工作。