xhaxhi_eli Posted October 31, 2009 Share Posted October 31, 2009 Ciao ragazzi.Ho modificato le chiamate al database per il blocco Offerte (1 per il singolo prodotto, 1 per tutti i prodotti) e il modulo sembra funzionare bene alla limitazione.Il problema nasce quando clicco su "Tutte le offerte". Mi dice che ci sono 12 pagine contenenti i prodotti, quando la ricerca restituisce solo 16 prodotti (2 pagine). Le altre pagine vengono visualizzate con l'errore "Nessuna offerta"Le 12 pagine sarebbero corrette senza la limitazione che ho inserito io.Ce qualche possibilità che ci sia della cache da qualche parte? Se si, come la posso svuotare?GraziePs: Le modifiche alle chiamate al database consistono nella sostituzione dei valori " > 0 " in quelli voluti nelle clausole WHERE 'reduction_price' e 'reduction_percent' (mi pare si chiamino cosi) ... nient'altro è stato cambiato. Link to comment Share on other sites More sharing options...
paman Posted October 31, 2009 Share Posted October 31, 2009 Ciao prova a cancellare i file intools/smarty/cache (cancella tutto tranne index)tools/smarty/compile (cancella tutto tranne index)Ciao Link to comment Share on other sites More sharing options...
xhaxhi_eli Posted October 31, 2009 Author Share Posted October 31, 2009 Ciao paman. La cache di smarty era vuota. Ho cancellato anche i file di compile (tranne index) ma nn cambia nulla.Grazie lo stesso Link to comment Share on other sites More sharing options...
disarci Posted November 1, 2009 Share Posted November 1, 2009 Ciao,se non ci dici che file hai modificato e esattamente le pagine dove hai errore è difficile darti una risposta,tieni presente che quando clicchi su tutte le offerte vai nella pagina price-drop.php la quale ha una chiamata ad una classe diversa per gli sconti....Product::getPricesDropla quale fa il conto delle pagine. Link to comment Share on other sites More sharing options...
xhaxhi_eli Posted November 1, 2009 Author Share Posted November 1, 2009 Ciao disarci.Chiedo scusa per i non dettagli.Cmq.Spiego le 2 modifiche fatte:Per il blocco offerteMetodo Product::getRandomSpecial riga 1043 da WHERE (`reduction_price` > 0 OR `reduction_percent` > 0) è diventata WHERE (`reduction_price` > 2000 OR `reduction_percent` > 25) Per price-drop.php (Tutte le offerte)Metodo Product::getPricesDropriga 1113 la stessa identica modifica di sopra (che cmq copio) WHERE (`reduction_price` > 0 OR `reduction_percent` > 0) è diventata WHERE (`reduction_price` > 2000 OR `reduction_percent` > 25) Nessun altra modifica apportata.EDIT:Allora dando un occhiata al codice in price-drop.php intorno alla riga 7 c'è questa chiamata $nbProducts = Product::getPricesDrop(intval($cookie->id_lang), NULL, NULL, true); Facendo un echo mi restituisce il numero totale dei prodotti scontati (senza tener conto della restrizione fatta)Tale variabile viene usata per il calcolo delle pagine."Problema" trovatoQuando viene fatta quella chiamata, l'argomento true è quello del count che devia la query su questo ramo if ($count) { $sql = ' SELECT COUNT(DISTINCT p.`id_product`) AS nb FROM `'._DB_PREFIX_.'product` p WHERE p.`active` = 1 AND p.`id_product` IN ( SELECT cp.`id_product` FROM `'._DB_PREFIX_.'category_group` cg LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`) WHERE cg.`id_group` '.(!$cookie->id_customer ? '= 1' : 'IN (SELECT id_group FROM '._DB_PREFIX_.'customer_group WHERE id_customer = '.intval($cookie->id_customer).')').' )'; $result = Db::getInstance()->getRow($sql); return intval($result['nb']); } Appena trovo il modo di inserirci la restrizione posto la soluzioneEDIT 2: aggiungendolo proprio brutalmente alla query esterna il problema sembra risolto (almeno nel mio caso) if ($count) { $sql = ' SELECT COUNT(DISTINCT p.`id_product`) AS nb FROM `'._DB_PREFIX_.'product` p WHERE p.`active` = 1 AND (`reduction_price` > 2000 OR `reduction_percent` > 25) AND p.`id_product` IN ( SELECT cp.`id_product` FROM `'._DB_PREFIX_.'category_group` cg LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`) WHERE cg.`id_group` '.(!$cookie->id_customer ? '= 1' : 'IN (SELECT id_group FROM '._DB_PREFIX_.'customer_group WHERE id_customer = '.intval($cookie->id_customer).')').' )'; $result = Db::getInstance()->getRow($sql); return intval($result['nb']); } Link to comment Share on other sites More sharing options...
disarci Posted November 2, 2009 Share Posted November 2, 2009 Perfetto, hai fatto tutto da solo! Link to comment Share on other sites More sharing options...
Aquila_77 Posted November 19, 2009 Share Posted November 19, 2009 Scusate, ho lo stesso problema, mi dite dove devo applicare la modifica???Grazie Link to comment Share on other sites More sharing options...
xhaxhi_eli Posted November 19, 2009 Author Share Posted November 19, 2009 Devi semplicemente modificare il metodo getPricesDrop su classes/Product.phpIl codice ho cercato di spiegarlo su (ci sono solo un paio di modifiche non di piu. Ti allego cmq il metodo modificato.Prova a vedere cosa c'è di diverso da quello originale static public function getPricesDrop($id_lang, $pageNumber = 0, $nbProducts = 10, $count = false, $orderBy = NULL, $orderWay = NULL, $beginning = false, $ending = false) { global $link, $cookie; if (!Validate::isBool($count)) die(Tools::displayError()); if ($pageNumber < 0) $pageNumber = 0; if ($nbProducts < 1) $nbProducts = 10; if (empty($orderBy) || $orderBy == 'position') $orderBy = 'myprice'; if (empty($orderWay)) $orderWay = 'DESC'; if ($orderBy == 'id_product' OR $orderBy == 'price' OR $orderBy == 'date_add') $orderByPrefix = 'p'; elseif ($orderBy == 'name') $orderByPrefix = 'pl'; if (!Validate::isOrderBy($orderBy) OR !Validate::isOrderWay($orderWay)) die (Tools::displayError()); if ($count) { $sql = ' SELECT COUNT(DISTINCT p.`id_product`) AS nb FROM `'._DB_PREFIX_.'product` p WHERE p.`active` = 1 AND (`reduction_price` > '.intval(2000).' OR `reduction_percent` > '.intval(25).') AND p.`id_product` IN ( SELECT cp.`id_product` FROM `'._DB_PREFIX_.'category_group` cg LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`) WHERE cg.`id_group` '.(!$cookie->id_customer ? '= 1' : 'IN (SELECT id_group FROM '._DB_PREFIX_.'customer_group WHERE id_customer = '.intval($cookie->id_customer).')').' )'; $result = Db::getInstance()->getRow($sql); return intval($result['nb']); } $currentDate = date('Y-m-d'); $sql = ' SELECT p.*, pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, p.`ean13`, i.`id_image`, il.`legend`, t.`rate`, (p.`reduction_price` + (p.`reduction_percent` * p.`price`)) AS myprice, m.`name` AS manufacturer_name FROM `'._DB_PREFIX_.'product` p LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.intval($id_lang).') LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product` AND i.`cover` = 1) LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.intval($id_lang).') LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = p.`id_tax`) LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`) WHERE (`reduction_price` > '.intval(2000).' OR `reduction_percent` > '.intval(25).') '.((!$beginning AND !$ending) ? 'AND (`reduction_from` = `reduction_to` OR (`reduction_from` <= \''.pSQL($currentDate).'\' AND `reduction_to` >= \''.pSQL($currentDate).'\'))' : ($beginning ? 'AND `reduction_from` <= \''.pSQL($beginning).'\'' : '').($ending ? 'AND `reduction_to` >= \''.pSQL($ending).'\'' : '')).' AND p.`active` = 1 AND p.`id_product` IN ( SELECT cp.`id_product` FROM `'._DB_PREFIX_.'category_group` cg LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`) WHERE cg.`id_group` '.(!$cookie->id_customer ? '= 1' : 'IN (SELECT id_group FROM '._DB_PREFIX_.'customer_group WHERE id_customer = '.intval($cookie->id_customer).')').' ) ORDER BY '.(isset($orderByPrefix) ? pSQL($orderByPrefix).'.' : '').'`'.pSQL($orderBy).'`'.' '.pSQL($orderWay).' LIMIT '.intval($pageNumber * $nbProducts).', '.intval($nbProducts); $result = Db::getInstance()->ExecuteS($sql); if($orderBy == 'price') { Tools::orderbyPrice($result,$orderWay); } if (!$result) return false; return Product::getProductsProperties($id_lang, $result); } Link to comment Share on other sites More sharing options...
Aquila_77 Posted November 19, 2009 Share Posted November 19, 2009 Ho modificato il file, però adesso quando clicco per vedere tutte le offerte praticamente me ne fa vedere solo una, quando in realtà sono di piu'... Link to comment Share on other sites More sharing options...
xhaxhi_eli Posted November 19, 2009 Author Share Posted November 19, 2009 Il codice modificato, è specifico per il mio caso.Mi sono completamento scordato del dettaglio Allora, se conti le righe del metodo riga 24: AND (`reduction_price` > '.intval(2000).' OR `reduction_percent` > '.intval(25).') riga 43: WHERE (`reduction_price` > '.intval(2000).' OR `reduction_percent` > '.intval(25).') modifica i due valori. 2000 sta per 2000 euro di scontoil 25 sta per 25% di sconto Link to comment Share on other sites More sharing options...
Aquila_77 Posted November 20, 2009 Share Posted November 20, 2009 Ciao al posto di 2000 ho messo 0 e al posto del 25 ho messo 0, sembra funzionare perfettamente...Grazie ancora... Link to comment Share on other sites More sharing options...
xhaxhi_eli Posted November 20, 2009 Author Share Posted November 20, 2009 Ma se metti 0 vuol dire che rimani all'impostazione di default Link to comment Share on other sites More sharing options...
Aquila_77 Posted November 20, 2009 Share Posted November 20, 2009 ma intanto funziona bohhh! Link to comment Share on other sites More sharing options...
xhaxhi_eli Posted November 20, 2009 Author Share Posted November 20, 2009 Il blocco offerte deve funzionare con le impostazioni di default. La modifica di sopra, è per chi come me, ha bisogno di considerare offerte solo prodotti scontati oltre ad una certa soglia. Link to comment Share on other sites More sharing options...
Aquila_77 Posted November 20, 2009 Share Posted November 20, 2009 Ah! ok..ma siccome funziona non lo tocco piu'.... Link to comment Share on other sites More sharing options...
Aquila_77 Posted November 21, 2009 Share Posted November 21, 2009 e invece qualche problema lo da,praticamente se faccio lo sconto in percentuale funziona benissimo, ma se faccio uno sconto in bae all'ammontare riduzione non mi fa vedere l'importo scontato...come mai?? Link to comment Share on other sites More sharing options...
Aquila_77 Posted November 21, 2009 Share Posted November 21, 2009 Forse ho risolto ho messo in entrambi i valori (1 al posto di 2000 e 1 al posto di 25) Link to comment Share on other sites More sharing options...
monkie Posted June 22, 2011 Share Posted June 22, 2011 Le modifiche segnalate non sembrano più valide con la version 1.4...Ho risolto aggiungendo la seguente condizione: AND p.`id_product` IN ( SELECT sp.`id_product` FROM `'._DB_PREFIX_.'specific_price` sp WHERE sp.`reduction` > '.floatval(0.25).' ) per avere, ad esempio, la sezione speciali filtrata per gli sconti superiori al 25%... 1 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now