Benoit.ndr Posted February 4, 2016 Share Posted February 4, 2016 Salut tout le monde, Petit problème en vue ! Je crée un module pour le backoffice de presta.. J'utilise les helpers pour construire ça propre.. Donc j'ai ma fields_list qui fonctionne bien, qui va recup les champs dans la base et tout va bien. Le problème intervient quand je souhaite utiliser la fonction edit d'une row. Les champs input ne récupère pas de valeur ( enfin seulement le product_id ). Quelqu'un à une idée ? Bisous /* Constructeur */ public function __construct() { $this->bootstrap = true; /* Pour aller chercher la table correspondante dans la base */ $this->table = 'reverdy_aliments'; $this->className = 'ReverdyPrices'; $this->deleted = false; $this->context = Context::getContext(); /* Pour ajouter la checkbox à gauche */ /*$this->bulk_actions = array( 'delete' => array( 'text' => $this->l('Delete selected'), 'confirm' => $this->l('Delete selected items?'), 'icon' => 'icon-trash' ) );*/ /* Pour préciser que la clé primaire n'est pas 'id_'.$table */ $this->identifier = 'id_product'; parent::__construct(); } /* Pour ajouter les boutons */ public function renderList() { /* Boutons sur les lignes du tableau */ $this->addRowAction('edit'); /* Champs voulus dans le tableau */ $this->fields_list = array( 'id_product' => array( 'title' => $this->l('Produit'), 'align' => 'center', 'callback' => 'getAlimentNameById' ), 'departement' => array( 'title' => $this->l('Département'), 'align' => 'center' ), 'quantite_kg' => array( 'title' => $this->l('Quantité'), 'align' => 'center' ), 'prix_ht' => array( 'title' => $this->l('Prix H.T.'), 'align' => 'center' ) ); return parent::renderList(); } /* Pour récupérer directement le nom des produits */ public function getAlimentNameById($echo,$row) { $id_product = (int)$row['id_product']; if($id_product){ $produit = new Product($id_product); return $produit->name[$this->context->language->id]; } return ""; } /* Pour le formulaire de modification */ public function renderForm() { if (!($obj = $this->loadObject(true))) return; $this->fields_form = array( 'tinymce'=> false, 'legend' => array( 'title' => $this->l('Produit'), 'icon' => 'icon-cogs', ), 'input' => array( array( 'type' => 'text', 'name' => 'id_product', 'label' => $this->l('Produit'), 'disabled' => true ), array( 'type' => 'text', 'name' => 'departement', 'label' => $this->l('Département'), 'disabled' => true ), array( 'type' => 'text', 'name' => 'quantite_kg', 'label' => $this->l('Quantité en kg'), 'disabled' => true ), array( 'type' => 'text', 'name' => 'prix_ht', 'label' => $this->l('Prix H.T.') ) ), 'submit' => array( 'title' => $this->l('Save'), 'name' => 'submitAdd'.$this->table ) ); /*$this->fields_value = array('departement' => 'test'); $this->fields_value['id_employee_default'] = $default_employee;*/ return parent::renderForm(); } Link to comment Share on other sites More sharing options...
J. Danse Posted February 4, 2016 Share Posted February 4, 2016 Bonsoir, Votre classe ReverdyPrices implémente-t-elle ObjectModel ? Avez-vous une variable $definition dedans ? Vos colonnes ont-elles des propriétés correspondantes dans la classe ? Link to comment Share on other sites More sharing options...
Benoit.ndr Posted February 5, 2016 Author Share Posted February 5, 2016 Bonjour, Merci beaucoup pour votre réponse Ma class est la suivante : class AdminReverdyPricesController extends ModuleAdminController J'ai crée un fichier ReverdyPrices que j'ai mis dans un dossier models et ce fichier est comme ceci : class ReverdyPrices extends ObjectModel { public $id_product; public $departement; public $quantite_kg; public $prix_ht; public static $definition = array( 'table' => 'reverdy_aliments', 'primary' => 'id_product', 'fields' => array( 'departement' => array('type'=>self::TYPE_STRING), 'quantite_kg' => array('type'=>self::TYPE_INT), 'prix_ht' => array('type'=>self::TYPE_FLOAT), ) ); } Link to comment Share on other sites More sharing options...
Benoit.ndr Posted February 5, 2016 Author Share Posted February 5, 2016 Mais que ce fichier existe ou non, cela ne change pour l'instant rien.. Je veux dire que quoiqu'il arrive, ma fields_list se construit bien, et quand je fais un edit, j'ai toujours le champ id_product qui se rempli et le reste non ! Link to comment Share on other sites More sharing options...
J. Danse Posted February 5, 2016 Share Posted February 5, 2016 Votre classe ReverdyPrices est-elle incluse dans votre module via un include ou un require_once, également ? Link to comment Share on other sites More sharing options...
Benoit.ndr Posted February 5, 2016 Author Share Posted February 5, 2016 (edited) OK ! Bon grâce à vos informations, j'ai inclus mon model dans le fichier de base du module ( celui qui installe ), et comme par magie, j'ai bien mes informations quand j'édite une ligne ! Génial Je ne comprend cependant pas pourquoi cela marche pas comme ça, et aussi pourquoi j'avais quand même mon product_id qui se remplissait ! Je vous remercie beaucoup, et si jamais vous avez une explication supplémentaire à me donner pour la compréhension, je suis preneur ! Excellente journée Edited February 5, 2016 by Benoit.ndr (see edit history) Link to comment Share on other sites More sharing options...
J. Danse Posted February 5, 2016 Share Posted February 5, 2016 Je suis là pour ça, vous aidez à comprendre le problème ;-) Actuellement, les models ne sont pas inclus automatiquement à la volée et au besoin pour ceux appartenant aux modules. Malheureusement, ce serait pratique. Mais c'est une autre histoire. Le champ se remplit bien car il est récupéré différemment, via la valeur passée en paramètre d'URL. C'est un pré-remplissage due à la mécanique des contrôleurs et des helpers, finalement. Link to comment Share on other sites More sharing options...
Benoit.ndr Posted February 5, 2016 Author Share Posted February 5, 2016 Ok , oui je vois qu'il passe l'id product en get. Le problème qui se pose maintenant, c'est que dans ma table, il y à 3 clés primaires ! Je vais voir comment lui dire ça et je reviens vers toi si je ne trouve pas 1 Link to comment Share on other sites More sharing options...
Benoit.ndr Posted February 5, 2016 Author Share Posted February 5, 2016 Re J. Danse, Du coup, je vois que quand je modifie mon $this->identifier, ça à l'air de correspondre à la variable que prestashop passe en get pour récupérer les values dans le formu. Etant donné que dans ma base, pour un product_id je dois avoir 1500 entrées, il faudrait que j'arrive à dire à presta que j'ai en fait 3 identifier.. Le problème c'est qu'en fouillant un peu dans AdminController, je n'arrive pas à voir comment faire pour passer plusieurs id dans $identifier.. A mon avis il faut passer par une autre variable, mais vas savoir laquelle... Je continue à chercher en attendant, mais si t'as une piste ou un indice, je suis preneur Bonne journée Link to comment Share on other sites More sharing options...
J. Danse Posted February 5, 2016 Share Posted February 5, 2016 En fait, c'est souvent utilisé de ce type: id_[table_name] = primary identifier (la colonne n'a pas réel besoin d'être primaire, disons que là c'est surtout une question d'intégrité de la base). L'idée est que cette colonne soit incrémentée et la seule utilisée pour l'édition. C'est en fait l'identifier de la ligne corresponde en DB, finalement. Vous me suivez ? Link to comment Share on other sites More sharing options...
Benoit.ndr Posted February 5, 2016 Author Share Posted February 5, 2016 (edited) Oui, enfin j'avais compris que si on ne précisait pas le $this->identifier, presta voulait prendre en base le champ du type id_[nom_de_la_table] en identifiant. Mais la, d'une, le champ ne s'appelle pas comme ça ( et la table m'a été donnée donc pas de possibilité de changement de nom de champ ), et deux, il faut que je passe les 3 champs en get, car ce sont 3 clés primaires dans la base. ( Le fichier SQL dont je parle fait 35000 lignes, il y a 17 id_product différents, une quinzaine de quantite_kg différents et tous les départements de france.. donc une valeur prix pour chaque combinaison de ces 3 champs ... ) Voyez vous ce que je veux faire et quel est mon problème ? En tout cas merci pour votre temps. Edited February 5, 2016 by Benoit.ndr (see edit history) Link to comment Share on other sites More sharing options...
J. Danse Posted February 5, 2016 Share Posted February 5, 2016 Comme je le disais, habituellement on fait ainsi. Essayez, pour voir, de rajouter une colonne type id_reverdy_aliments en AUTO_INCREMENT et utilisée cette colonne comme identifier, pour voir ce que je souhaite vous faire faire, grosso modo ;-) Link to comment Share on other sites More sharing options...
Benoit.ndr Posted February 5, 2016 Author Share Posted February 5, 2016 Merci pour votre réponse, mais comme je vous l'ai précisé juste avant, je ne dois normalement pas toucher à la base de données.. C'est bien tout le problème Je n'ai, par ailleurs, toujours pas trouvé de solution pour mes 3 clés primaires ! Link to comment Share on other sites More sharing options...
J. Danse Posted February 5, 2016 Share Posted February 5, 2016 Le problème est qu'il n'y ait pas d'autres solutions, à dire vrai :-/ 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