0

次のテーブルがcategoryありcategory_description、php mysql. 私の質問は、以下の情報を使用して、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       
4

2 に答える 2

1

すでに列がありますparent_id。これを使用して、カテゴリ間の関係を表します。カテゴリがルートレベルにある場合は、その列をに設定しますNULL

別のアプローチは、カテゴリをサブカテゴリにマップする3番目のテーブルです。これにより、上から下へ、および下から上へと歩くことができます。使用するアプローチはアプリケーションによって異なります。

この階層を処理するには、いくつかの再帰関数を記述し、カテゴリ階層を適切に処理できる適切な表現をPHPで見つける必要があります。

ある種のブレッドクラムを印刷するための単純な再帰関数は、次のようになります(この例では、ある種のORMが配置されていると想定しています)。

function findWayToTop($category, $breadcrumbs = array()) {
    $breadcrumbs[] = $this;
    $parent = $category->getParent();
    if ($parent != null) {
        return findWayToTop($parent, $breadcrumbs);
    } else {
        return $breadcrumbs;
    }
}

ORMを使用しない場合、最も簡単な方法は、データベースからすべてのカテゴリをフェッチし、IDがキーである配列にそれらを格納することです。次に、上記のコードで配列呼び出しを置き換えることができ、それも機能します。

于 2011-11-30T12:21:58.583 に答える
1

opencartには

$this->model_catalog_category->getCategory()

メソッドで、次のようにカテゴリ ID をパラメーターとして渡します。

$category = this->model_catalog_category->getCategory(5);

また、適切な説明の結合も処理するため、それらに直接アクセスする必要はありません。@Till Helge Helwigがすでに指摘しているように、すべてのサブカテゴリでこれらのツリーを構築する場合は、再帰関数を使用する必要があります。この例を見るのに適した場所は、実際のカテゴリ モジュール コードです。ファイルの一番下までスクロールするとcatalog/controller/module/category.php、html を構築する再帰関数が表示されます。

于 2011-11-30T16:12:19.170 に答える