Това е така, защото products_name и products_description са в таблицата products_description (или по-конкретно в TABLE_PRODUCTS_DESCRIPTION), а не в продуктите за таблица (TABLE_PRODUCTS).
За да получите цялата основна информация (с изключение на атрибути), трябва да изпълните следната заявка:
$q = $db->Execute("SELECT * FROM " . TABLE_PRODUCTS . " p LEFT JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd ON(p.products_id = pd.products_id) WHERE language_id = " . (int)$_SESSION['languages_id']);
$items = array();
while(!$q->EOF) {
// let's get all attribues for product
$productInfo = $q->fields;
$qattr = $db->Execute("SELECT * FROM " . TABLE_PRODUCTS_ATTRIBUTES . " WHERE products_id = " . (int)$q->fields['products_id']);
$attr = array();
while(!$qattr->EOF) {
$attr[] = $qattr->fields;
$qattr->MoveNext();
}
$productInfo['attributes'] = $attr;
$items[] = $productInfo;
$q->MoveNext();
}
// now let's output it
foreach($items as $item) {
echo '<p><a href="index.php?main_page=product_info&products_id='. $item['products_id'] .'"><img src="images/'. $item['products_image'].'" alt="'. $item['products_name'].'" title="'. $items['products_name'].'" /></a>';
echo $items['products_price'] . '</p>';
}
Имайте предвид обаче, че този код НЕ вземете продукти от конкретна категория - получава всички продукти, дори тези, които са деактивирани. Има няколко начина да получите продукти от конкретна категория, но те се различават по производителност. За съжаление няма най-добрия начин да направите това, защото зависи от данните. Ако продуктите, които искате да извлечете, принадлежат към категория с идентификатор на категориите от 5 и това е основната им категория, достатъчно е да добавите към първата заявка „КЪДЕ master_categories_id =5“. Но ако категорията не е главна категория за тези продукти, нещата стават малко по-сложни, защото трябва да имаме достъп до таблицата products_to_categories, която причинява удар на производителността за сайтове с много продукти. Ако не знаете/не ви пука за ефективността, можете да промените първата заявка на:(ако приемем, че вече знаете category_id на вашата категория):
$q = $db->Execute("SELECT * FROM " . TABLE_PRODUCTS . " p LEFT JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd ON(p.products_id = pd.products_id LEFT JOIN " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c ON(p.products_id = p2c.products_id AND p2c.categories_id = YOUR_CATEGORY_ID) WHERE pd.products_id IS NOT NULL AND p2c.products_id IS NOT NULL AND language_id = " . (int)$_SESSION['languages_id']);
За да се отървете от неактивни продукти, изпълнете
$q = $db->Execute("SELECT * FROM " . TABLE_PRODUCTS . " p LEFT JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd ON(p.products_id = pd.products_id LEFT JOIN " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c ON(p.products_id = p2c.products_id AND p2c.categories_id = YOUR_CATEGORY_ID) WHERE products_status = 1 AND pd.products_id IS NOT NULL AND p2c.products_id IS NOT NULL AND language_id = " . (int)$_SESSION['languages_id']);
(Всъщност проверка на pd.products_id IS NOT NULL не е необходима, защото вече проверяваме pd.language_id.)
РЕДАКТИРАНЕ Версия без атрибути
$q = $db->Execute("SELECT * FROM " . TABLE_PRODUCTS . " p LEFT JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd ON(p.products_id = pd.products_id) WHERE language_id = " . (int)$_SESSION['languages_id']);
$items = array();
while(!$q->EOF) {
$items[] = $q->fields;
$q->MoveNext();
}
// now let's output it
foreach($items as $item) {
echo '<p><a href="index.php?main_page=product_info&products_id='. $item['products_id'] .'"><img src="images/'. $item['products_image'].'" alt="'. $item['products_name'].'" title="'. $items['products_name'].'" /></a>';
echo $items['products_price'] . '</p>';
}