Jump to content
Sign in to follow this  
marider

[Résolu] Activation et désactivation des produits en masse

Recommended Posts

Bonjour à tous
Est-il possible de créer un bouton de désactivation et d’activation des produits en masse car c’est vrai, on a qu’un seul bouton : qui est "supprimer la sélection" assez radical. Il serait bien pratique de pourvoir cocher plusieurs produits et cliquer sur un bouton activé ou désactivée la sélection des produits.
Cela oblige t'il un nouveau module ou cette fonction qui serait bien pratique peut être envisageable en retouchant le fichier AdminProducts.php
Quelqu'un aurait il la solution ?

Share this post


Link to post
Share on other sites

C'est faisable il y a bulkProduct qui fait sa mais c'est un module payant et puis pour moi a la base ne fonctionnait pas j'ai du changer une ligne je croit mais le but etait de pouvoir changer le prix , les reductions , et les date de reductions en masse donc il suffit d'isoler le Active dans la base donnée et creer un champ ou checkbox ou radio enfin comme tu veux pour pouvoir changer sa valeur entre 0 et 1.

Tout sa coupler avec une liste de produit bien ranger sa déchire ^^

Share this post


Link to post
Share on other sites

Bonjour,

je viens de mettre en place cette option sur un site de test, je préfère vous le dire tout de suite, c'est pas si simple...
Mais bon, je vais essayer de vous détailler tout ça :

On commence par le fichier "AdminTab.php" du dossier "classes", recherchez cette ligne /* Delete multiple objects */ qui devrait se trouver vers la ligne numéro 475, et juste avant, intégrez ceci :

elseif (Tools::isSubmit('submitDis'.$this->table)) //ADD BY BVINCE
{
   if ($this->tabAccess['delete'] === '1')
   {
       if (isset($_POST[$this->table.'Box']))
       {
           $object = new $this->className();
           if (isset($object->noZeroObject) AND
                   / Check if all object will be deleted
               (sizeof(call_user_func(array($this->className, $object->noZeroObject))) <= 1 OR sizeof($_POST[$this->table.'Box']) == sizeof(call_user_func(array($this->className, $object->noZeroObject)))))
               $this->_errors[] = Tools::displayError('you need at least one object').' '.$this->table.''.Tools::displayError(', you cannot delete all of them');
           else
           {
               if ($object->disableSelection($_POST[$this->table.'Box']))
                   Tools::redirectAdmin($currentIndex.'&conf=2&token;='.$token);
               $this->_errors[] = Tools::displayError('an error occurred while disable selection');
           }
       }
       else
           $this->_errors[] = Tools::displayError('you must select at least one element to delete');
   }
   else
       $this->_errors[] = Tools::displayError('You do not have permission to disable here.');
}



ensuite, recherchez toujours dans le même fichier, la fonction "displayListFooter", et remplacez la par celle-ci :

public function displayListFooter($token = NULL)
{
   echo '';
   //MODIFY BY BVINCE
   if ($this->delete)
       echo '
'.($this->table=='product' ? '<input type="submit" class="button" name="submitDis'.$this->table.'" value="'.$this->l('Disable selection').'" onclick="return confirm(\''.$this->l('Disable selected items?', __CLASS__, TRUE, FALSE).'\');" /> ' : false).'<input type="submit" class="button" name="submitDel'.$this->table.'" value="'.$this->l('Delete selection').'" onclick="return confirm(\''.$this->l('Delete selected items?', __CLASS__, TRUE, FALSE).'\');" />';
   echo '



   <input type="hidden" name="token" value="'.($token ? $token : $this->token).'" />
   </form>';
   if (isset($this->_includeTab) AND sizeof($this->_includeTab))
       echo '

';
}



Ensuite, nous allons ouvrir le fichier "ObjectModel.php" du dossier "classes", nous allons lui ajouter 2 fonctions :

public function disableSelection($selection)
{
   if (!is_array($selection) OR !Validate::isTableOrIdentifier($this->identifier) OR !Validate::isTableOrIdentifier($this->table))
   die(Tools::displayError());
   $result = true;
   foreach ($selection AS $id)
   {
       $this->id = intval($id);
       $result = $result AND $this->disable();
   }
   return $result;
}



et

public function disable()
{
    if (!Validate::isTableOrIdentifier($this->identifier) OR !Validate::isTableOrIdentifier($this->table))
        die(Tools::displayError());

   /* Database disable */
   $result = Db::getInstance()->Execute('UPDATE `'.pSQL(_DB_PREFIX_.$this->table).'` SET active=0 WHERE `'.pSQL($this->identifier).'` = '.intval($this->id));
   if (!$result)
       return false;
   return $result;
}



Normalement, vous allez voir apparaître le bouton correspondant en pied de liste produits...

Share this post


Link to post
Share on other sites

Bonjour Vincent
Franchement tu es une bête et toujours aussi soucieux de nos problèmes. J'attaque de suite je te tiens au courant dès que j'ai fini le test.
Merci encore

Share this post


Link to post
Share on other sites

Merci, je ne suis pas une bête, j'ai appris à lire un code et à le comprendre, c'est tout...
mais merci...

PS : cette modification ne concerne que l'intégration d'un bouton "DISABLE", si besoin je pourrais ajouter le tutoriel du bouton "ENABLE"

Share this post


Link to post
Share on other sites

Vincent SVP besoin d'aide les 2 fonctions tu les rajoutes à quel endroit dans le code

Share this post


Link to post
Share on other sites

Tu peux ajouter

disableSelection() après la fonction deleteSelection()

et

disable() après la fonction delete()

comme ça c'est plus propre...

Share this post


Link to post
Share on other sites

Arff la misère cela fonctionne pas j'ai plus ma page dans le BO quand j'insère les codes pourtant je les met au bonne endroit

Share this post


Link to post
Share on other sites

Si la page n'apparaît plus il faut tout reprendre au début car tu as du intercaler certaines informations où il ne fallait pas....
Envoies moi des accès FTP, je te fais ça en 2 minutes...

Share this post


Link to post
Share on other sites

Hey je testerai ton petit joujou dès que j'en aurai parler a mon boss histoire que je lui mette pas ce qu'il veux pas ^^

Sinon tu as l'air calé sur presta tu veux pas me filer un coup de main pour mon probleme de generateur de declinaisons : C'est par la ^^ Merci :D

Share this post


Link to post
Share on other sites

Pas de soucis, ou encore, je t'envoie les miens... (PS 1.3.1)
Cette version intègre le bouton "ENABLE" et "DISABLE", il sera néanmoins nécessaire de passer par l'outil de traduction du back office pour traduire quelques phrases...

AdminTab.php

ObjectModel.php

Share this post


Link to post
Share on other sites

Bas écoute c'est nickel trop fort et merci Vincent cela fonctionne et en plus c'est bien pratique tu trouve pas ?
plus la peine de ce les cliquez 1 par 1 ?

Share this post


Link to post
Share on other sites

Et je rajoute quelque chose je suis utilisateur des modules de BVince franchement je les recommandes à tous car c'est des modules de très grandes qualités et le sérieux est au rendez-vous.
Merci Vincent tu es au top

Share this post


Link to post
Share on other sites

Super si ça a pu t'aider, @ bientôt et merci aussi à toi....
EDIT : tu passes le POST en résolu

Share this post


Link to post
Share on other sites

Ok c'est moi qui te remercie beaucoup car c'est suite à une demande poster d'une personne donc voici nos conversations sur le problème
http://www.prestashop.com/forums/viewthread/72792/configuration_et_utilisation_de_prestashop/desactivation_produits

J'ai trouvé que cette demande était très utile et pratique, car quand tu à beaucoup de produit cette fonctionnalitée est quand même la bienvenue je pense que cette petite option va plaire à plus d'un utilisateur Prestashop.
Merci encore à toi

Share this post


Link to post
Share on other sites

Merci Bvince,

ton module m'enlève une épine du pied, je vais mettre ça en place dés que possible.


P.S: Je vais regarder aussi la solution que tu proposes plus haut !

Share this post


Link to post
Share on other sites

elseif (Tools::isSubmit('submitDis'.$this->table)) //ADD BY BVINCE
{
   if ($this->tabAccess['delete'] === '1')
   {
       if (isset($_POST[$this->table.'Box']))
       {
           $object = new $this->className();
           if (isset($object->noZeroObject) AND
                   / Check if all object will be deleted
               (sizeof(call_user_func(array($this->className, $object->noZeroObject))) <= 1 OR sizeof($_POST[$this->table.'Box']) == sizeof(call_user_func(array($this->className, $object->noZeroObject)))))
               $this->_errors[] = Tools::displayError('you need at least one object').' '.$this->table.''.Tools::displayError(', you cannot delete all of them');
           else
           {
               if ($object->disableSelection($_POST[$this->table.'Box']))
                   Tools::redirectAdmin($currentIndex.'&conf=2&token;='.$token);
               $this->_errors[] = Tools::displayError('an error occurred while disable selection');
           }
       }
       else
           $this->_errors[] = Tools::displayError('you must select at least one element to delete');
   }
   else
       $this->_errors[] = Tools::displayError('You do not have permission to disable here.');
}


This code does not work for me. I receive a 500 error .

Share this post


Link to post
Share on other sites

Bonjour a tous

Merci Bvince pour les trucs génial que tu fait, ça aide beaucoup de personne.

on ce qui me concerne je veut savoir si c'est possible de désactivé des produits dont le stocks = 0 sans intervention humaine. bien sur la désactivation sera selon des critères définis comme par exemple désactiver les 8 plus anciens produits (en terme de date d'ajout bien sur).

je suis entrain de développer un module (en cours) pour ça mais avec clique sur le bouton pour désactiver ou activer les produits.

je me demande comment le rendre cette tâche automatisée, s'il en faut modifier quelques fichier dans le core pas de soucis.

je travaille avec la version 1.2.5

Share this post


Link to post
Share on other sites

Pas de soucis, ou encore, je t'envoie les miens... (PS 1.3.1)

Cette version intègre le bouton "ENABLE" et "DISABLE", il sera néanmoins nécessaire de passer par l'outil de traduction du back office pour traduire quelques phrases...

Bonjour et un grand merci a toi pour cette fonction "indispensable" qui fonctionne trés bien, mais....

j'ai un petit souci d'affichage dans le catalogue du back office, (voir capture écran)

merci d'avance.

 

capt01.jpg

Share this post


Link to post
Share on other sites

Je déterre ce sujet car j'ai vraiment d'arriver a cette solution proposer par Bvince sauf que je suis en 1.6.1 et qu'après plusieurs essais je me retrouve toujours avec une erreur 500 .

quelqu'un pourrait il me venir en aide merci  

Share this post


Link to post
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
Sign in to follow this  

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More