-
Content Count
5 -
Joined
-
Last visited
Community Reputation
0 NeutralAbout Florian Lemaitre
-
Rank
PrestaShop Newbie
Profile Information
-
Location
France
-
First Name
Florian
-
Last Name
Lemaitre
-
Bonjour Cyssoo, Côté Apache, le serveur se la coule douce à 10% de CPU et de RAM. Côté MySQL le serveur est un peu plus en panique et je viens d'en trouver la cause... la fonction "updatePhysicalProductQuantity" qui prend de plus en plus de temps à s'exécuter au fur et à mesure des commandes. Vu que je ne gère pas les stocks sur mon site, un petit "return true;" avant l'appel de cette fonction a permis de gagner énormément de temps dans le traitement des créations de commandes. A savoir que le site a un taux de conversion proche de 100%, la validation de commande est le point qui génère le plus de charge. Aussi je te rejoins sur la POO, malheureusement Prestashop a encore un long chemin à faire de ce côté là... Vivement le full Doctrine ;). Cordialement,
- 2 replies
-
- commandes
- transactions
-
(and 3 more)
Tagged with:
-
Bonjour, Je me suis toujours demandé pourquoi Prestashop ne gérait pas les transactions SQL pour la création de ses commandes. Malheureusement hier j'en ai fait les frais pour la première fois. Le serveur SQL qui sature et les tables qui se retrouvent en Deadlocks résultant en des commandes à moitié créées sur le site. Sur un site à 300/600 commandes l'heure je vous laisse imaginer les dégâts si je n'avais pas réagit dans les 5 minutes pour passer le site en maintenance. Je me demande pour quelle raison Prestashop ne met pas en place un système plus robuste de transaction pour s'assurer qu'une commande ne soit jamais corrompue en base de données ? Il me semble que l'intégrité des données est un point primordiale pour un système de vente en ligne ? Au plaisir de vous lire
- 2 replies
-
- commandes
- transactions
-
(and 3 more)
Tagged with:
-
Forgot password page - Undefined index: notifications
Florian Lemaitre replied to benw 's topic in 1.7.2.x [Current]
Here is the solution I adopted for this specific page (all other controllers use notifications). In a custom module I hooked on "displayHeader" with the following code : if (Context::getContext()->controller->php_self === "password") { $this->context->smarty->assign(array( 'notifications' => array( 'error' => Context::getContext()->controller->errors, 'warning' => Context::getContext()->controller->warning, 'success' => Context::getContext()->controller->success, 'info' => Context::getContext()->controller->info, ) )); } A dirty hack but less dirty than the original code from Prestashop (we are used to it...) -
Hi, When creating a new theme we can define Image Type sizes. We can create different stores on a same Prestashop installation. Each store can have its own theme. But... ImageType class isn't multistore. So when you install a new theme with funny Image sizes it overrides the Image sizes of the other stores. I can't believe nobody got into that problem unltill now and this behavior is still present in 1.7. Could someone please look into this issue ? Thanks
-
Bonjour, En installant les tâches cron du module Blocklayered je me suis rendu compte que par défaut l'url proposé dans la configuration du module dans le backoffice contient le paramètre "truncate=1". Ce paramètre a pour effet d’exécuter une requête "TRUNCATE" sur la table 'layered_friendly_url' avant de reconstruire entièrement l'index. Sur un site comportant des centaines de catégories et des milliers de produits l’exécution de cette tâche prend quasiment une heure. Je me demande donc si on peut appeler cette tâche avec le paramètre "truncate=0" et si cela risque de poser un problème par la suite. Et si oui pourquoi ne pas le mettre par défaut dans les urls données dans la configuration du module. Merci par avance.
-
[FREE TUTORIAL] Show the lowest price (from xx$) in product list
Florian Lemaitre replied to NemoPS 's topic in Core developers
On Prestashop 1.6.5 you can use "hookActionProductListModifier" in your module. This way, it's also working with Blocklayered module. public function hookActionProductListModifier($params) { if (isset($params['cat_products']) && ! empty($params['cat_products'])) { $id_customer = (isset($this->context->customer) ? (int)$this->context->customer->id : 0); $id_group = (isset($this->context->customer) ? $this->context->customer->id_default_group : _PS_DEFAULT_CUSTOMER_GROUP_); $id_country = (int)$id_customer ? Customer::getCurrentCountry($id_customer) : Configuration::get('PS_COUNTRY_DEFAULT'); $id_currency = (int)$this->context->cookie->id_currency; $id_shop = $this->context->shop->id; foreach ($params['cat_products'] as $key => $product) { $prices_array = array(); /* For each product, grab quantity discounts */ $quantity_discounts = SpecificPrice::getQuantityDiscounts($product['id_product'], $id_shop, $id_currency, $id_country, $id_group, null, true); if ($quantity_discounts) { foreach ($quantity_discounts as $qkey => $discount) { if (!(float)$discount['reduction']) { $price = $discount['price']; } else { if ($discount['reduction_type'] == 'percentage') { $price = $product['price_without_reduction'] - ($product['price_without_reduction'] * $discount['reduction']); } else { $price = $product['price_without_reduction'] - $discount['reduction']; } } $prices_array[] = $price; } $params['cat_products'][$key]['price_tax_exc'] = min($prices_array); $params['cat_products'][$key]['qt_disc'] = true; } } } }
