无限子类别php和mysql li列表打开购物车类别

时间:2011-11-30 12:10:26

标签: php mysql opencart

我在php mysql中有以下表categorycategory_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       

2 个答案:

答案 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的递归函数