2012-10-01 41 views
0

我有以下標記表示類別和子類別的列表:表示產品PHP的

<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

我該怎麼做呢?

回答

0

看起來您正在使用osCommerce或其中一種叉子,並且您希望顯示每個類別的產品數量。

如果你只有兩個級別的類別可以做,如果你的類別樹進一步深入,應該警告這是一個真正的性能殺手,因爲在osCommerce中構建類別樹已經完成了,比方說,不是真正的性能優化,特別是對於複雜的樹結構。

的直接的方法是,計算在TABLE_PRODUCTS_TO_CATEGORIES表,其中列categories_id保持當前的類別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()可能是你的目的,所以沒必要把它寫自己使用本文。

0

我不太喜歡加入2個表的查詢中的from事情。我改變了我喜歡的方式查詢。如果您願意,您可以將其更改爲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; 
+0

雖然這並沒有給他查詢產品類別的計數,但是呢? – MiDo