Jump to content

jweill.info

Members
  • Posts

    7
  • Joined

  • Last visited

jweill.info's Achievements

Newbie

Newbie (1/14)

  • Week One Done Rare
  • One Month Later Rare
  • One Year In Rare

Recent Badges

0

Reputation

  1. Bonjour, merci pour vos réponses, pourtant ils vantaient cette gestion de cache améliorée sur la 1.6.1 (lors du prestashop day et sur http://build.prestashop.com/news/prestashop-1-6-1-0-performances/ ) J'ai donc espéré pourvoir l'utiliser quitte à débugger un petit peu la feature, mais ce problème d'invalidation des requêtes sql que j'ai évoqué me semble encore bien énorme... (notre 1.6.1.4 est blindée d'overrides pour corriger d'autres fonctions inachevées ou buggées...) En espérant que la team nous écoute et propose un peu plus de corrections / optimisations qui seront valables sur des boutiques en production (car même si la 1.7 semble prometteuse sur certains points il faudra attendre encore pas mal de versions voir la 1.8 avant d'envisager une upgrade en prod)
  2. Bonjour, pour optimiser les performances de notre Prestashop 1.6.1.4 il nous est conseillé d'utiliser le cache memcache (ou autre) par contre lorsqu'on l'active les résultats sont inutilisables en production. Après analyse du code, il s'avère que les requêtes sql sont cachées par la classe DB, donc la fonction executeS est utilisée principalement avec le paramètre par défaut $use_cache = true. Un exemple concret serait celui de la création d'une adresse par un client : La fonction getAddresses() dans Customer.php enregistre le résultat de la requête dans une clé de cache du type 'Customer::getAddresses1234-2-0' public function getAddresses($id_lang) { $share_order = (bool)Context::getContext()->shop->getGroup()->share_order; $cache_id = 'Customer::getAddresses'.(int)$this->id.'-'.(int)$id_lang.'-'.$share_order; if (!Cache::isStored($cache_id)) { $sql = 'SELECT DISTINCT a.*, cl.`name` AS country, s.name AS state, s.iso_code AS state_iso FROM `'._DB_PREFIX_.'address` a LEFT JOIN `'._DB_PREFIX_.'country` c ON (a.`id_country` = c.`id_country`) LEFT JOIN `'._DB_PREFIX_.'country_lang` cl ON (c.`id_country` = cl.`id_country`) LEFT JOIN `'._DB_PREFIX_.'state` s ON (s.`id_state` = a.`id_state`) '.($share_order ? '' : Shop::addSqlAssociation('country', 'c')).' WHERE `id_lang` = '.(int)$id_lang.' AND `id_customer` = '.(int)$this->id.' AND a.`deleted` = 0'; $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); Cache::store($cache_id, $result); return $result; } return Cache::retrieve($cache_id); } par contre cette clé ne me semble pas invalidée lorsque le client ajoute ou supprime une adresse... ensuite, la requête $sql ci dessus en elle même est cachée par la fonction executeS($sql) dans Db.php public function executeS($sql, $array = true, $use_cache = true) { if ($use_cache && $this->is_cache_enabled && $array) { $this->last_query_hash = Tools::encryptIV($sql); if (($result = Cache::getInstance()->get($this->last_query_hash)) !== false) { $this->last_cached = true; return $result; } } ... $this->last_cached = false; if ($use_cache && $this->is_cache_enabled && $array) { Cache::getInstance()->setQuery($sql, $result); } return $result; } la clé de cache étant l'encryptage de la requête qu'il voit passer, une requête du type : SELECT DISTINCT a.*, cl.`name` AS country, s.name AS state, s.iso_code AS state_iso FROM `ps_address` a LEFT JOIN `ps_country` c ON (a.`id_country` = c.`id_country`) LEFT JOIN `ps_country_lang` cl ON (c.`id_country` = cl.`id_country`) LEFT JOIN `ps_state` s ON (s.`id_state` = a.`id_state`) INNER JOIN ps_country_shop country_shop ON (country_shop.id_country = c.id_country AND country_shop.id_shop = 1) WHERE `id_lang` = 1 AND `id_customer` = 1 AND a.`deleted` = 0 tant que cette clé précise n'est pas invalidée ou que tant que la requête est identique (ce qui est la cas), le résultat retourné est le résultat qui a été mis en cache précédemment... Soit, lorsqu'un client ajoute une adresse il ne peut pas la voir apparaître dans la liste de ses adresses... et ce comportement peut se constater sur une grande partie de ces requêtes dont le cache n'est pas invalidé correctement (la requête dans Product.php getImages() par exemple etc.) Est-ce que quelqu'un utilise le cache sans rencontrer ces problèmes ? Est-ce que vous avez une astuce pour les régler autre que simplement s'asseoir sur cette fonctionnalité pourtant prometteuse ? Je vous remercie d'avance
  3. Bonjour, je vois que les modules de paiement sont mis à jour en ajoutant un nouveau hook AdvancedPaymentApi. Je n'arrive pas à saisir leur finalite : a quoi servent-ils ou serviront-ils ? (il en va de même pour le hookDisplayPaymentEU qui est modifié pour accueillir le nouveau) en vous remerciant
  4. Hi, i just encountered this issue, so if you're still on it here's the fix for prestashop 1.4.9 : Open prestashop/js/attributesBack.js The error is on line 271 (empty cell) Replace html += '<td>' + i18n_tax_exc + ' <input id="related_to_price_impact_' + id + '" class="price_impact" style="width:50px" type="text" value="' + price + '" name="price_impact_' + id + '" onkeyup="calcPrice($(this), false)"></td>'; html += '<td> </td>'; html += '<td><input style="width:50px" type="text" value="' + weight + '" name="weight_impact[' + id + ']"></td>'; by html += '<td>'+i18n_tax_exc+' <input id="related_to_price_impact_ti_'+id+'" class="price_impact" style="width:50px" type="text" value="'+price+'" name="price_impact_'+id+'" onkeyup="calcPrice($(this), false)"></td>'; html += '<td>'+i18n_tax_inc+' <input id="related_to_price_impact_'+id+'" class="price_impact_ti" style="width:50px" type="text" value="" name="price_impact_ti_'+id+'" onkeyup="calcPrice($(this), true)"></td>'; html += '<td><input style="width:50px" type="text" value="'+weight+'" name="weight_impact['+id+']"></td>'; and it will be fixed
  5. Bonjour, j'ai rencontré le même bug, voici le correctif pour la version 1.4.9.0 : ouvrez le fichier : prestashop/js/attributesBack.js le problème se situe a la ligne 271 ou le contenu de la cellule est vide par rapport aux précédentes versions Remplacer html += '<td>' + i18n_tax_exc + ' <input id="related_to_price_impact_' + id + '" class="price_impact" style="width:50px" type="text" value="' + price + '" name="price_impact_' + id + '" onkeyup="calcPrice($(this), false)"></td>'; html += '<td> </td>'; html += '<td><input style="width:50px" type="text" value="' + weight + '" name="weight_impact[' + id + ']"></td>'; par html += '<td>'+i18n_tax_exc+' <input id="related_to_price_impact_ti_'+id+'" class="price_impact" style="width:50px" type="text" value="'+price+'" name="price_impact_'+id+'" onkeyup="calcPrice($(this), false)"></td>'; html += '<td>'+i18n_tax_inc+' <input id="related_to_price_impact_'+id+'" class="price_impact_ti" style="width:50px" type="text" value="" name="price_impact_ti_'+id+'" onkeyup="calcPrice($(this), true)"></td>'; html += '<td><input style="width:50px" type="text" value="'+weight+'" name="weight_impact['+id+']"></td>'; et les deux cases apparaîteront à nouveau et le bug corrigé
  6. Bonjour, vous comptez utiliser le module "Programme de fidélité" sur une boutique active et désirez attribuer de façon rétroactive des points de fidélité aux commandes antérieures à l'activation de votre programme de fidélité ? dans ce but, je vous présente donc un nouveau module vous permettant d'attribuer les points de fidélité aux commandes passées avant l'activation du module "Programme de fidélité". A l'aide de ce module, vous pouvez attribuer les points de fidélité à une commande précise, un client précis ou à l'intégralité des commandes non associées à des points de fidélité. * Commande validée et livrée => points disponibles * Commande validée non livrée => points validés * Commande annulée ou remboursée => points annulés le nombre de points de fidélité attribués le sont en fonction du montant de la commande ainsi que des paramètres définis dans la configuration du module "Programme de fidélité" Attention : Vous devez utiliser le module natif de prestahop "Programme de fidélité" pour pouvoir utiliser celui ci Voir la page du module
  7. J'ai eu le même souci, merci pour le patch ca fonctionne "à merveille" now !
×
×
  • Create New...