Je me suis pris la tête dernièrement sur le module interne d’importation de produit de Prestashop (version > 1.5). Vous trouverez l’histoire sur le forum d’OVH.
Le problème
L’importation d’environ 1400 produits (sans photo) prenait plus d’une heure à se faire. Oui oui, c’est extrêmement long. Je ne vous parle même pas du temps de l’importation des déclinaisons …
La solution
Après avoir cherché du coté de MySQL, voir PHP, il s’est avéré que cela provenait de Memcache que j’avais activé « pour voir ». Après la désactivation de Memcache, je suis passé à une importation en 8 minutes !! Youhouu. Mais c’est encore long …
Améliorer encore le temps d’importation
En réglant un paramètre dans la configuration de MySQL (innodb_flush_log_at_trx_commit) avec la valeur 0, je suis passé à 12 secondes pour l’importation. Le problème, c’est que laissé ainsi, il y a un risque de perte de données sur une coupure brusque du serveur. À la valeur 0, les données ne sont pas écrites sur le disque en temps réel mais toutes les secondes à peu prêt. Et ce, sur toutes les bases de données …
Je laisse donc la valeur par défaut (1) pour sécuriser l’enregistrement des données.
Il ne reste plus qu’une solution, c’est modifier le code d’importation de Prestashop. Pour laisser le code propre, nous allons simplement étendre le contrôleur concerné.
Dans le dossier override/controllers/admin (créer le si inexistant), créer un fichier appelé : AdminImportController.php
Dans ce fichier, coller le code si dessous:
<?php class AdminImportController extends AdminImportControllerCore { public function postProcess() { if (_PS_MODE_DEMO_ || !Tools::getValue('import') || !Tools::getValue('csv')) { parent::postProcess(); return; } $db = Db::getInstance(); $db->query("SET AUTOCOMMIT = 0"); $db->query("START TRANSACTION"); parent::postProcess(); $db->query("COMMIT"); } }
Supprimer le fichier cache/class_index.php afin de prendre en compte votre code.
Le code consiste à encapsuler le code d’importation (parent::postProcess()) dans une transaction SQL.
La transaction va provoquer l’enregistrement des modifications de la base de données en mémoire et ne seront réellement enregistrées que quand la requête COMMIT sera effectuée.
Avec cette modification, l’importation de mes produits passe à 12 secondes et les déclinaisons en un peu moins de 1 minute.
je voulais que les utilisateurs de mon site puissent télécharger des fichiers correctement !! mais je n ‘arrive pas a faire ce-ci !!
J’ai besoin d’aide SVP 🙂 merci d’avance
mercii
Bonjour, je sais que ce n’est pas le sujet mais je rencontre des difficultés pour l’import de mes déclinaisons : seules les images s’importent mais pas les attributs et valeurs … Avez vous un fichier type qui pourrait m’aider ?
Merci bcp
Big Up !
Et un grand merci.