Itu karena nama_produk dan deskripsi_produk ada di tabel deskripsi_produk (atau lebih spesifik di TABLE_PRODUCTS_DESCRIPTION), bukan di tabel produk (TABLE_PRODUCTS).
Untuk mendapatkan semua informasi dasar (kecuali atribut) Anda harus menjalankan query berikut:
$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>';
}
Namun perhatikan bahwa kode ini TIDAK dapatkan produk dari kategori tertentu - ia mendapatkan semua produk, bahkan yang dinonaktifkan. Ada beberapa cara untuk mendapatkan produk dari kategori tertentu tetapi berbeda dalam kinerjanya. Sayangnya tidak ada cara terbaik untuk melakukan ini karena tergantung pada data. Jika produk yang ingin Anda ambil termasuk dalam kategori dengan kategori_id 5 dan itu adalah kategori utama mereka, cukup tambahkan ke kueri pertama "WHERE master_categories_id =5". Tetapi jika kategorinya bukan kategori master untuk produk-produk tersebut, semuanya menjadi sedikit lebih rumit karena Kita perlu mengakses tabel products_to_categories yang menyebabkan kinerja hit untuk situs-situs dengan banyak produk. Jika Anda tidak terlalu tahu/tidak terlalu peduli dengan performa, Anda dapat mengubah kueri pertama menjadi:(dengan asumsi Anda sudah mengetahui kategori_id kategori Anda):
$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']);
Untuk menyingkirkan produk yang tidak aktif, jalankan
$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']);
(Sebenarnya tidak perlu memeriksa pd.products_id IS NOT NULL karena Kami sudah memeriksa pd.language_id.)
EDIT Versi tanpa atribut
$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>';
}