Jump to content

[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 ?

Link to comment
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 ^^

Link to comment
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...

Link to comment
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"

Link to comment
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

Link to comment
Share on other sites

  • 2 months later...

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 .
Link to comment
Share on other sites

  • 9 months later...

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

Link to comment
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

Link to comment
Share on other sites

  • 6 years later...

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  

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...