turboclick Posted July 12, 2016 Share Posted July 12, 2016 Bonjour, J'ai une liste d'environ 150 articles que je souhaiterai supprimer mais à la main, cela prend une éternité par la GUI. Quelqu'un pourrait-il me dire dans quelles tables je dois taper pour les supprimer sans passer par l'interface à partir de requetes sql ? Je pensais les supprimer des tables : ps_product ps_product_shop, ps_category_product, ps_stock sachant que mes produits n'ont pas de déclinaisons mais seulement des caractéristiques, pensez-vous que cela sera suffisant ? Si bien sûr, l'un d'entre vous a un script ou un module à me conseiller pour le faire, je suis preneur Je vous remercie d'avance Link to comment Share on other sites More sharing options...
ChDUP Posted July 12, 2016 Share Posted July 12, 2016 La liste est sous quelle forme ? Un petit script à base d'une boucle sur $product = new Product($id); $product->delete(); me semblerait le plus efficace. Mais il faut que le produit n'ait pas de stock. Autrement, pourquoi ne pas utiliser StoreCommander ? 1 Link to comment Share on other sites More sharing options...
turboclick Posted July 12, 2016 Author Share Posted July 12, 2016 Bonsoir et Merci de ton aide. Je ne pensais pas à un script php mais à un delete brutal dans la base. Je ne veux pas faire de script parce que premièrement, je ne sais pas le faire et deuxièmement, je ne sais pas le faire :P :D Ceci étant, je suis développeur c++ à la base et si tu as un exemple de script, un lien vers un tuto ou un exemple d'appel de procédure quel qu'il soit, je saurai l'adapter, je l'ai déjà fait pour intégrer mes articles en automatique dans la base en appelant la fonction d'import. J'avoue que je pensais plus à une procédure de delete brutal dans la base. Je sais que cela ne supprimera pas les images mais j'ai prévu d'installer un module qui va les supprimer. J'en ai vu quelques un dans le store. Pour ce qui est de Store Commander, je l'ai installé mais je trouve qu'il est aussi lent que la GUI original. Il faut dire que j'ai plus de 30 000 références produits avec au total plus de 4000 caractéristiques, ce qui fait ramer l'ensemble comme pas possible. Voila, je suis désolé mais je ne suis pas un pro de prestashop, je suis développeur c++ / SQL à la base mais j'apprend assez vite Link to comment Share on other sites More sharing options...
Johann Posted July 12, 2016 Share Posted July 12, 2016 c'est pas UN delete brutal qu'il faudrait faire en base, à cause des multiples relations avec d'autres tables que la table ps_product. Le C++ et le PHP sont très proches au niveau syntaxe, c'est l'occasion d'ajouter une ligne de compétences à ton CV un truc comme ça devrait aller, dans un fichier toto.php que tu colles à la racine : <?php require(dirname(__FILE__).'/config/config.inc.php'); $listeProduits = array(1,2,3,4); foreach ($listeProduits as $id) { $product = new Product($id); $product->delete(); } ?> Evidemment, dans le tableau, tu mets la liste des ID de produits à virer 1 Link to comment Share on other sites More sharing options...
turboclick Posted July 13, 2016 Author Share Posted July 13, 2016 Bonjour, Merci beaucoup de votre aide. Je vais essayer ça cet aprem et si ça marche, je vous ferai des poutous tous pleins et je mettrai résolu en sujet. Plus sérieusement, merci beaucoup, cela va vraiment m'aider. A bientôt Link to comment Share on other sites More sharing options...
turboclick Posted July 14, 2016 Author Share Posted July 14, 2016 (edited) Bonjour, désolé j'ai été un peu trop vite, finalement, cela ne fonctionne pas super bien. La procédure s'arrete toujours avant d'avoir fini et je suis obligé constamment de la relancer plusieurs fois. J'ai écrit cela ********************** <?phprequire(dirname(__FILE__).'/config/config.inc.php'); $listeProduits = array(137463,137467,137468,137469,137471); echo "début de la procédure <br> <br>"; foreach ($listeProduits as $id) { $product = new Product($id); $product->delete(); echo "suppression de l article ".$id." effectuee<br>"; } echo "début de la procédure <br> <br>"; ?> ****************** Ce qui est étrange c'est que meme le texte "début de la procédure" ne s'affiche pas. Il n'apparait que lorsque tous les produits ont été supprimé avec le texte dans la boucle aussi. Je ne sais pas si j'ai été assez clair. En gros, j'ai une page blanche a chaque plantage mais lorsque tous les produits ont été supprimé apres x lancement (ctrl+f5) j'ai le texte entier qui s'affiche Je comprend pas... Merci de votre aide précieuse Edited July 14, 2016 by turboclick (see edit history) Link to comment Share on other sites More sharing options...
Johann Posted July 14, 2016 Share Posted July 14, 2016 que ça ne s'affiche qu'à la fin c'est normal, on n'écrit pas dans un navigateur comme sur un client lourd. Au pire, tu peux faire un flush (recherche la syntaxe) pour vider l'affichage au fur et à mesure Et tes produits sont bien supprimés, au final ? Link to comment Share on other sites More sharing options...
turboclick Posted July 14, 2016 Author Share Posted July 14, 2016 (edited) Bonsoir, Comme php est nouveau pour moi, j'ai préféré déplacer le travail du coté linux meme si c'était plus loud. J'ai écrit un script qui décompose la liste et qui appelle le script en lui passant en paramètre l'id à supprimer. Ca me permet de pouvoir afficher la progression sur le terminal. Je sais que cela fait du travail en plus mais cela me permet de naviguer en environnement connu ^^ Je met les deux scripts au cas ou quelqu'un serait interessé. Il peuvent être optimisé mais je les ai fait à l'arrache parce que j'ai adapté celui que j'ai fait pour injecter des articles dans la base. Ils ont le mérite de fonctionner Le fichier contenant les id à supprimer est mis dans le repertoire /root/SupprimeDoublons/FichierDoublons/ et s'appelle a_supprimer.csv Il contient 1 numéro par ligne. Si vous avez des suggestions, n'hésitez pas mais en tout cas, je vous remercie infiniment pour votre aide. Sans vous, j'aurai galéré. ********************** fichier php *********************************** <?php require(dirname(__FILE__).'/config/config.inc.php'); echo "suppression \n"; $product = new Product($argv[1]); echo "ligne new passee \n"; $product->delete(); echo "suppression de l article ".$argv[1]." effectuee\n";?>**************************************************************************** Pour ce qui est du script bash, il s'agit du suivant pour le cas où quelqu'un serait interessé : ************************ fichier linux ************************************** #!/bin/bashecho "------------------------------------------------------------------------"echo "Date : $(date)"echo "------------------------------------------------------------------------"echo Supprime les doublons de la base PrestashopechoechoCompteur=0;Compteur2=0;chaine="/var/www/monsite.fr/web/supprime.php?id=";chaine2="vide"split -l 1 /root/SupprimeDoublons/FichierDoublons/a_supprimer.csv /root/SupprimeDoublons/FichierDoublons/fichier_Compteur="$(find . -type f -printf x | wc -c)"rm /root/SupprimeDoublons/FichierDoublons/a_supprimer.csvecho "il y a " $Compteur " à traiter"for file2 in /root/SupprimeDoublons/FichierDoublons/fichier_*do ((Compteur2++)) chaine="/var/www/monsite.fr/web/supprime.php " echo -n "injection de l article " $Compteur2 "/" $Compteur echo -n " - id_product a traiter : " | cat - $file2 chaine2=`cat $file2` echo "valeur de chaine2 :" $chaine2 chaine=$chaine$chaine2 echo "$chaine" php -f $chaine sleep 3doneechoecho Fin du Traitement des Listesecho*********************************************** voilaaaaaaaaaaaa Edited July 14, 2016 by turboclick (see edit history) 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