Pagina 1 di 1

Vetrina specifica per una categoria

Inviato: 16/09/2008, 22:43
da uzumaki
Un saluto a tutti, sto cercando di capire come si può far puntare la vetrina della home page solo ad una categoria specifica. Ho trovato una contribution (display_category, in realtà è una semplice mod del file new_products.php), che riesce a far sì che la vetrina "randomizzi" una categoria per volta.

Purtroppo non mi basta, mi serve che la vetrina punti soltanto ad una categoria specifica, ignorando le altre, ad esempio inserendo il suo ID. Riporto qui il codice ottenuto dopo la mod di cui sopra, per chiedervi cortesemente come posso intervenire sul codice per soddisfare questo requisito.

Il p.products_quantity l'ho aggiunto io, visto che la mod originariamente ignorava del tutto le quantità disponibili, sbattendo in vetrina anche i prodotti terminati. Questione comunque risolta per l'appunto con l'aggiunta di "p.products_quantity" nella query.

Codice: Seleziona tutto

if ( (!isset($new_products_category_id)) || ($new_products_category_id == '0') ) {
	$category_query = tep_db_query("select distinct categories_id from ". TABLE_PRODUCTS_TO_CATEGORIES );
	$cids = array();
	while ($categories = tep_db_fetch_array($category_query)) {
		array_push($cids, $categories["categories_id"]);
	}
	$cid = $cids[rand(0, count($cids) - 1)];

	  // removed order by p.products_date_added desc
	  
	$new_products_query = tep_db_query(
		"select p.products_id, p.products_quantity, p.products_image, p.products_tax_class_id, " .
			"if(s.status, s.specials_new_products_price, p.products_price) as products_price " .
		"from " . TABLE_PRODUCTS . " p left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id " .
		", ". TABLE_PRODUCTS_TO_CATEGORIES . " p2c " .
		"where p.products_id = p2c.products_id and products_status = '1' and p2c.categories_id = $cid " .
		"order by rand() limit " . MAX_DISPLAY_NEW_PRODUCTS);
  } else {
    $new_products_query = tep_db_query("select distinct p.products_id, p.products_quantity, p.products_image, p.products_tax_class_id, if(s.status, s.specials_new_products_price, p.products_price) as products_price from " . TABLE_PRODUCTS . " p left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_CATEGORIES . " c where p.products_id = p2c.products_id and p2c.categories_id = c.categories_id and c.parent_id = '" . (int)$new_products_category_id . "' and p.products_status = '1' order by rand() limit " . MAX_DISPLAY_NEW_PRODUCTS);
  }

Inviato: 17/09/2008, 11:59
da uzumaki
Sto facendo qualche tentativo, facendo un progresso significativo ma purtroppo non definitivo. Applicando infatti queste modifiche:

Codice: Seleziona tutto

"where p.products_id = p2c.products_id and products_status = '1' and p2c.categories_id = $cid and p.products_quantity >0 and categories_id = '1' " .
Ho ottenuto che in vetrina vadano effettivamente i prodotti appartenenti alla categoria "1", ma il problema è che il controllo viene fatto dopo, ovvero la query va a prendersi comunque i prodotti random, poi SE appartengono alla categoria "1" li pubblica in vetrina, altrimenti ecco una bella vetrina vuota.

Suggerimenti ? Possibile che nessuno abbia mai sentito l'esigenza di avere una vetrina dedicata solo ad una categoria specifica ? :shock: :P