Jump to content

modificare query ultimi arrivi


guardiano

Recommended Posts

Salve,

nella homepage del sito ho un modulo che mi visualizza gli prodotti aggiunti a catalogo (ossia le novità).

Avrei la necessità di eliminare dalla query i prodotti che fanno parte di alcune categorie.

Ho provato ad andare nella cartella modules/nome modulo ed ho trovato una query nel file php; l'ho commentata per vedere se sul sito il modulo caricasse vuoto o per lo meno andasse in errore ma non è cambiato niente.

Purtroppo sono agli inizi e non so ancora come ragiona prestashop per certe cose.

 

Potete aiutarmi a capire dove o in che modo posso trovare la query che mi interessa?

 

Grazie.

Link to comment
Share on other sites

grazie per avermi risposto.

provengo da una lunga esperienza con il cms joomla.

Lì nel template vengono messi i file di visualizzazione per fare gli override.

Guardando nella cartella themes/nome_tema/modules/nome_modulo/.. c'è solo il file .tpl che penso abbia la funzione di override dell'aspetto del modulo (all'interno non vedo query).

Sempre confrontando con joomla, le query dovrebbero rimanere nella cartella root/modules/nome_modulo

 

per piacere confermami se le mie sensazioni sono corrette.

 

per quanto riguarda la cache devo svoutare quella del browser? se no come si svuota la cache in prestashop?

grazie.

 

ps. il prestashop che stò modificando ha la versione 1.5.6.2

Edited by guardiano (see edit history)
Link to comment
Share on other sites

ho provato a rinominare la cartella cache nella root. ho aggiornato la pagina del sito ma il risultato è lo stesso.

prestashop ha ricreato la cartella cache autonomamente.

Il template in uso è un template che fu acquistato prima che io iniziassi a metterci mani.

E' possibile che le query si trovino nella stessa cartella del template?

Link to comment
Share on other sites

Si esatto in originale.
Rinomini la vecchia in cache2 e ricarichi la nuova cartella originale. (poi elimini cache2)

Non conosco bene il  modulo nuovi prodotti, non so se conserva file di compilazione.... sono prove che dovresti fare.

 

Fai la modifica, rinomini la cartella cache, ricarichi l'originale e vedi se si vede la modifica.

Ogni volta che aggiorni con f5 è opportuno ricaricare la cache originale per assicurarsi che tutte le modifiche che hai fatto siano state ricompilate.

 

Ciao fammi sapere.

Link to comment
Share on other sites

Sei stato molto chiaro, grazie. proverò.

 

Senti .... e se volessi disattivare completamente la cache?

ho provato impostando "forza la ricompilazione", "no" su cache smarty e "no" in fondo alla pagina nella sezione cache.

 

Ritieni che sia sufficiente?

Link to comment
Share on other sites

Si va bene, però se vuoi essere sicuro di eliminare tutte le cache:

 

Svuota la cache da : Prestazioni (back office) e ricarica la cartella cache originale rinominando la vecchia.

(dopo puoi eliminare tranquillamente tutte le cartelle rinominate, o metterle tutte in una cartella chiamata cestino)

Link to comment
Share on other sites

Purtroppo no. Mi trovo in una fase di stallo. il provider mi ha detto che il problema è questa query:

 

SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity, pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`,
pl.`meta_keywords`, pl.`meta_title`, pl.`name`, MAX(image_shop.`id_image`) id_image, il.`legend`, m.`name` AS manufacturer_name,
product_shop.`date_add` > "2015-10-27" as new,
MAX(product_attribute_shop.id_product_attribute) id_product_attribute
FROM `ps_product` p
INNER JOIN ps_product_shop product_shop
ON (product_shop.id_product = p.id_product AND product_shop.id_shop = 1)
LEFT JOIN `ps_product_lang` `pl` ON
p.`id_product` = pl.`id_product`
AND pl.`id_lang` = 3 AND pl.id_shop = 1
LEFT JOIN `ps_image` `i` ON i.`id_product` = p.`id_product`
LEFT JOIN ps_image_shop image_shop
ON (image_shop.id_image = i.id_image AND image_shop.id_shop = 1 AND image_shop.cover=1)
LEFT JOIN `ps_image_lang` `il` ON i.`id_image` = il.`id_image` AND il.`id_lang` = 3
LEFT JOIN `ps_manufacturer` `m` ON m.`id_manufacturer` = p.`id_manufacturer`
LEFT OUTER JOIN `ps_product_attribute` pa ON p.`id_product` = pa.`id_product`
LEFT JOIN ps_product_attribute_shop product_attribute_shop
ON (product_attribute_shop.id_product_attribute = pa.id_product_attribute AND product_attribute_shop.id_shop = 1 AND product_attribute_shop.default_on = 1)
LEFT
JOIN ps_stock_available stock
ON (stock.id_product = p.id_product AND stock.id_product_attribute = IFNULL(`product_attribute_shop`.id_product_attribute, 0) AND stock.id_shop = 1 )
WHERE (product_shop.`active` = 1) AND (product_shop.`visibility` IN ("both", "catalog")) AND (product_shop.`date_add` > "2015-10-27") AND (p.`id_product` IN (
SELECT cp.`id_product`
FROM `ps_category_group` cg
LEFT JOIN `ps_category_product` cp ON (cp.`id_category` = cg.`id_category`)
WHERE cg.`id_group` = 1
))
GROUP BY product_shop.id_product
ORDER BY p.`date_add` DESC
LIMIT 12

Effettivamente l'ho provata nel navicat e ci mette un sacco di tempo per essere eseguita.

Adesso stò cercando di capire da dove viene questa query.

Ho trovato il file .tpl che visualizza quei dati e si trova nella cartella /themes/nome_template/modules/nome_modulo

Ho pesato quindi di cercare la query nella cartella /modules/nome_modulo/nome_modulo.php ma se la cancello, nel sito non succede niente. Viene caricato tutto comunque quindi non so se stò andando nella direzione corretta.

Link to comment
Share on other sites

Casualmente ho commentato questa query in classes/product.php dalla riga 2269 alla riga 2306 e il caricamento dell'home page è diventato molto più veloce

$sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity, pl.`description`, pl.`description_short`, MAX(product_attribute_shop.id_product_attribute) id_product_attribute,
     pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`,
     pl.`name`, MAX(image_shop.`id_image`) id_image, il.`legend`, m.`name` AS manufacturer_name,
     DATEDIFF(
      p.`date_add`,
      DATE_SUB(
       NOW(),
       INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY
      )
     ) > 0 AS new
    FROM `'._DB_PREFIX_.'product` p
    '.Shop::addSqlAssociation('product', 'p').'
    LEFT JOIN '._DB_PREFIX_.'product_attribute pa ON (pa.id_product = p.id_product)
    '.Shop::addSqlAssociation('product_attribute', 'pa', false, 'product_attribute_shop.default_on=1').'
    '.Product::sqlStock('p', 0, false, $context->shop).'
    LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (
     p.`id_product` = pl.`id_product`
     AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').'
    )
    LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product`)'.
    Shop::addSqlAssociation('image', 'i', false, 'image_shop.cover=1').'
    LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)$id_lang.')
    LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`)
    WHERE product_shop.`active` = 1
    AND product_shop.`show_price` = 1
    '.($front ? ' AND p.`visibility` IN ("both", "catalog")' : '').'
    '.((!$beginning && !$ending) ? ' AND p.`id_product` IN ('.((is_array($tab_id_product) && count($tab_id_product)) ? implode(', ', $tab_id_product) : 0).')' : '').'
    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` '.$sql_groups.'
    )
    GROUP BY product_shop.id_product
    ORDER BY '.(isset($order_by_prefix) ? pSQL($order_by_prefix).'.' : '').pSQL($order_by).' '.pSQL($order_way).'
    LIMIT '.(int)($page_number * $nb_products).', '.(int)$nb_products;
  
  $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);​

Per sicurezza ho navigato nel sito qua e là ho fatto anche un ordine ed è andato tutto bene.

poi dal backoffice ho fatto un po' di modifiche in categorie, prodotti e gestito un ordine per vedere se andava tutto bene, ed effettivamente và tutto bene.

Ho provato anche a loggarmi con gruppi clienti diversi per vedere se nel modulo ultimi arrivi cambiavano i prezzi come configurati nel backoffice nei prodotti ed è tutto ok.

Questa query poteva influire sul caricamento del modulo degli ultimi arrivi? (vi ricordo che il modulo fa parte di un template acquistato e non è nativo del prestashop. la mia versione è 1.5.6.2)?

 

Cosa ne pensate?

Edited by guardiano (see edit history)
Link to comment
Share on other sites

  • 1 month later...

Ciao a tutti, 

dovrei scrivere una query che tiri fuori i paesi con il maggior fatturato, il modulo pre-installato considera i prezzi senza sconti mentre se qualcuno ha acquistato con lo sconto non viene considerato.

Qualcuno che possa aiutarmi??

Grazie

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...