Jump to content

appeler product.save() depuis la fonction getContent


Recommended Posts

Bonjour à tous,

Je suis en train de développer un module permettant d'uploaded un fichier mp3 et de modifier la description d'un produit afin d'insérer automatiquement du code html pour jouer ce fichier mp3.

Ne voulant pas modifier le coeur de prestashop et ne trouvant aucun hook pour modifier la page d'ajout ou d'édition d'un produit (il existe les hooks addproduct et updateproduct mais qui ne sont appelés qu'après la validation de la page d'édition du produit), je me suis dit qu'utiliser la fonction getContent() de mon module afin d'afficher une page permettant d'effectuer l'opération d'upload du fichier mp3 ainsi que la sélection d'un produit existant n'était pas trop contraignant.

Seulement, l'appel à la fonction save() pour mon produit modifié semble ne pas fonctionner correctement car tous les champs de la table ps_product_lang pour le produit sélectionné sont modifiés avec des caractères "aléatoires" (cfr fichier joint).

Voici le code incriminé (simplifié volontairement) :

<?php

   if (!defined('_CAN_LOAD_FILES_'))
       exit;

   class modifyProduct extends Module 
   {
       public function __construct() 
       {
           $this->name = 'modifyProduct'; 
           $this->tab = 'Nicolas Jolet'; 
           $this->version = '1.0'; 

           parent::__construct();

           $this->displayName = 'modifyProduct'; 
           $this->description = 'modifyProduct'; 
       } 

       public function install() 
       { 
           if(!parent::install()) 
               return false; 

           return true; 
       }

       public function getContent()
       {
//         [...]    ici se trouve le code pour afficher les différents produits existant 

           $id_product = Tools::getValue('product_id');
           if (isset($id_product) AND is_numeric($id_product))
           {                
               $product = new Product(intval($id_product), false, 1);
               if (!Validate::isLoadedObject($product))
                   Tools::displayError($this->l('Error occured with product object.'));

               // Modify field for description
               $product->description_short = 'test'; // Jusqu'ici tout fonctionne

               if ($product->save()) // BUG !!!!
                   $output .= $this->displayConfirmation($this->l("Product ($id_product) successfully modified"));
               else
                   $output .= $this->displayError($this->l("Product ($id_product) wasn't modified"));                
           }

//         [...]
       }
   }     
?>



Vous trouverez en pièce jointe le résultat en DB de la simple modification de description_short...

Merci d'avance à ceux qui pourront me dépanner.

Nicolas

Type d’install (nouvelle/MàJ) : nouvelle
Version de PS : 1.3.6
Thème (défaut/perso) : default
Code (original/modifié) : N/A
Hébergement : home
Version de PHP : 5
Version de MySQL : 5.1.49
Navigateur(s) concerné(s) : tous

37533_cJrkY1Xh98qUJxz5nZMq_t

Link to comment
Share on other sites

  • 2 weeks later...

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