Jump to content

Supprimer une liste d'articles spécifiques a partir de leur id_product


Recommended Posts

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

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 ?

  • Like 1
Link to comment
Share on other sites

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 :P :D :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

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 ;)

  • Like 1
Link to comment
Share on other sites

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

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

**********************

<?php
require(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 by turboclick (see edit history)
Link to comment
Share on other sites

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

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 :P

 

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/bash
echo "------------------------------------------------------------------------"
echo "Date : $(date)"
echo "------------------------------------------------------------------------"
echo Supprime les doublons de la base Prestashop
echo
echo


Compteur=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.csv

echo "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 3

done


echo
echo Fin du Traitement des Listes
echo
***********************************************

 

voilaaaaaaaaaaaa

Edited by turboclick (see edit history)
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...