0

カテゴリとサブカテゴリのリストを示す次のマークアップがあります。

<table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr class="dataTableHeadingRow">
<td class="dataTableHeadingContent"><?php echo TABLE_HEADING_PRODUCTS; ?></td>
<td class="dataTableHeadingContent" align="right"><?php echo TABLE_HEADING_TOTAL_WEIGHT; ?>&nbsp;</td>
</tr>


<?php
function category_list( $category_parent_id = 0 )
{
    $sql  = 'select cd.categories_name,c.categories_id, c.parent_id, c.sort_order from ' . TABLE_CATEGORIES . ' c, ' . TABLE_CATEGORIES_DESCRIPTION . ' cd where c.categories_id = cd.categories_id AND c.parent_id='.$category_parent_id;
    $res  = tep_db_query( $sql );
    $cats = array();


    while ( $cat = tep_db_fetch_array( $res ) )
    {
        $cats[] = $cat;
    }

    if (count($cats) == 0)
    {
        return '';
    }

    $list_items = array();

    foreach ( $cats as $cat )
    {
        $list_items[] = '<tr class="dataTableRow"><td class="dataTableContent">'; 

        if($category_parent_id != 0) $list_items[] = '&nbsp;&nbsp;&nbsp;';
        if($category_parent_id == 0 )$list_items[] = '<b>';

        $list_items[] = $cat['categories_name'];

        if($category_parent_id == 0) $list_items[] = '</b>';
        $list_items[] = '</td><td class="dataTableContent">'; 
        $list_items[] = category_list( $cat['categories_id'] );
        $list_items[] = '</td></tr>'; 
    }
    $list_items[] = '';

    return implode( '', $list_items );
}  

echo category_list();
?>
</table>

各カテゴリは太字で表示され、サブカテゴリは少し右にインデントされて表示されます。各サブカテゴリで利用可能な製品を表示する必要があります。必要な製品フィールドをSQLクエリに追加しようとしましたが、応答しませんでした。製品を検索するために追加する必要のあるフィールドは次のとおりですproducts_id, products_name。これらはテーブルからのTABLE_PRODUCTS_DESCRIPTIONものであり、カテゴリを並べ替えるためにTABLE_PRODUCTS_TO_CATEGORIES、フィールドを持つ別のテーブルがありますproducts_id and categories_id

どうすればこれを行うことができますか?

4

2 に答える 2

0

osCommerceまたはそのフォークの1つを使用していて、各カテゴリの商品の量を表示したいようです。

実行できるカテゴリのレベルが2つしかない場合、カテゴリツリーが深くなると、osCommerceでカテゴリツリーを構築することが行われるため、これは実際のパフォーマンスキラーであることに注意してください。複雑なツリー構造。

簡単な方法は、列が現在のカテゴリIDを保持しているTABLE_PRODUCTS_TO_CATEGORIESテーブルのエントリをカウントすることです。categories_id

$query = 'SELECT COUNT(*) FROM `'.TABLE_PRODUCTS_TO_CATEGORIES.'` WHERE `categories_id` = "'.$cat['categories_id'].'"';

結果を取得すると、カウントが得られます。

ただし、このアプローチでは、tnisカテゴリに直接含まれる製品の数のみが取得され、子カテゴリに存在する製品の数は取得されません。

includes/boxes/categories.phpこれはすでにosCに組み込まれているので、ご覧になることもできます。ここで呼び出されるメソッドとtep_show_category()ここで呼び出されるメソッドtep_count_products_in_category()は、目的に使用できる可能性があるため、自分で作成する必要はありません。

于 2012-10-01T14:21:16.440 に答える
0

from2つのテーブルを結合するためのクエリの内容はあまり好きではありません。クエリを好きなように変更しました。from必要に応じて、方法に変更できます。

$sql  = 'select cd.categories_name,c.categories_id, c.parent_id, c.sort_order, pd.products_id, pd.products_name
from ' . TABLE_CATEGORIES . ' c 
inner join ' . TABLE_CATEGORIES_DESCRIPTION . ' cd on c.categories_id = cd.categories_id 
inner join '. TABLE_PRODUCTS_TO_CATEGORIES .' pc on pc.categories_id=c.categories_id 
inner join ' . TABLE_PRODUCTS_DESCRIPTION . ' pd on pd.products_id=pc.products_id
where c.parent_id='.$category_parent_id;
于 2012-10-01T14:29:31.343 に答える