nliprandi Posted November 6, 2016 Share Posted November 6, 2016 Bonsoir à tous Je suis actuellement en train de développer des modules pour Prestashop 1.6.1.7. Mon premier module est simple, il doit pouvoir permettre de saisir 3 textarea pour compléter la fiche produit classique. Jusqu'ici tout va bien, je prépare donc ma fonction d'installation de la sorte : public function install() { if (Shop::isFeatureActive()) Shop::setContext(Shop::CONTEXT_ALL); Db::getInstance()->Execute('CREATE TABLE '._DB_PREFIX_.'presentation( `id_product` INT UNSIGNED NOT NULL, `description` TEXT NOT NULL, `experience` VARCHAR(500) NULL, `speciality` VARCHAR(500) NULL, `reference` VARCHAR(500) NULL, `date_create` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP) ENGINE = InnoDB'); return parent::install() && $this->registerHook('displayProductButtons') && $this->registerHook('header') && $this->registerHook('displayAdminProductsExtra') && $this->registerHook('actionProductUpdate') && Configuration::updateValue('BESPRODUCTTHREEQUESTIONS_NAME', 'BesProductThreeQuestions'); } Tout se passe bien, les hooks s'enregistrent bien. Je sépare chaque controller de hook, et je prépare mon formulaire grâce au HelperForm : helper = new HelperForm(); $helper->table = 'besproductthreequestions'; $helper->default_form_language = (int)Configuration::get('PS_LANG_DEFAULT'); $helper->allow_employee_form_lang = (int) Configuration::get("PS_BO_ALLOW_EMPLOYEE_FORM_LANG"); $helper->currentIndex = $this->context->link->getAdminLink('AdminModules', false)."&configure=".$this->module->name.'&tab_module='.$this->module->tab.'&module_name='.$this->module->name; $helper->token = Tools::getAdminTokenLite('AdminModules'); $helper->submit_action = 'submit_besproductthreequestions_form'; //$helper->currentIndex = AdminController::$currentIndex.'&configure='.$this->module->name; $helper->currentIndex = $this->context->link->getAdminLink('AdminProducts', false)."&configure=".$this->module->name.'&tab_module='.$this->module->tab.'&module_name='.$this->module->name; $helper->token = Tools::getAdminTokenLite('AdminProducts'); $helper->tpl_vars = array( 'fields_value' => array( 'experience' => $threeQuestions[0]["experience"], 'speciality' => $threeQuestions[0]["speciality"], 'reference' => $threeQuestions[0]["reference"], ) ); La structure du formulaire est la suivante : $field_form = array( 'form' => array( 'legend' => array( 'title' => $this->module->l('3 questions à ...'), 'icon' => 'icon-param' ), 'input' => array( array( 'type' => 'textarea', 'label' => $this->module->l('Quelle est votre experience ?'), 'name' => 'experience', 'rows' => 4, ), array( 'type' => 'textarea', 'label' => $this->module->l('Quelle est votre spécialité ?'), 'name' => 'speciality', 'rows' => 4, ), array( 'type' => 'textarea', 'label' => $this->module->l('Quelle sont vos références ?'), 'name' => 'reference', 'rows' => 4, ) ), 'submit' => array( 'title' => $this->module->l('Enregistrer') ), 'reset' => array( 'title' => $this->module->l('Annuler'), 'icon' => 'process-icon-cancel' ) ) ); Je prépare le reste de mon controller afin de récupérer les données insérées en base manuellement, tout se passe bien. Arrive l'étape d'enregistrement du formulaire. Et là je m'arrache les cheveux. J'ai le hook suivant qui semble ne jamais être appelé (pourtant bien enregistré dans la base et associé à mon module, et bien fixé dans les hooks): public function hookActionProductUpdate($params) { $arrayData = array ( "id_product" => (int)Tools::getValue('id_product'), "experience" => pSQL(Tools::getValue('experience')), "reference" => pSQL(Tools::getValue('reference')), "speciality" => pSQL(Tools::getValue('speciality')), ); $threeQuestions = Db::getInstance()->executeS('SELECT * FROM '._DB_PREFIX_.'presentation WHERE id_product = '.(int)Tools::getValue('id_product')); if(count($threeQuestions) > 0) { var_dump("existant"); $whereClause = "id_product = ".(int)Tools::getValue('id_product'); Db::getInstance()->insert(_DB_PREFIX_.'presentation', $arrayData); } else{ var_dump("nouveau"); Db::getInstance()->insert(_DB_PREFIX_.'presentation', $arrayData); } var_dump("hook update"); } J'ai tenté d'appeler une fonction directement dans le controller displayAdminProductExtra de la manière suivante : private function processForm() { if(Tools::isSubmit('submit_besproductthreequestions_form')) { $arrayData = array ( "id_product" => (int)Tools::getValue('id_product'), "experience" => pSQL(Tools::getValue('experience')), "reference" => pSQL(Tools::getValue('reference')), "speciality" => pSQL(Tools::getValue('speciality')), ); $threeQuestions = Db::getInstance()->executeS('SELECT * FROM '.$this->tableName.' WHERE id_product = '.(int)Tools::getValue('id_product')); if(count($threeQuestions) > 0) { error_log("existant"); $whereClause = "id_product = ".(int)Tools::getValue('id_product'); Db::getInstance()->insert($this->tableName, $arrayData); } else{ error_log("nouveau"); Db::getInstance()->insert($this->tableName, $arrayData); } die(); }else{ error_log("Form not send",0); } } public function run() { $this->assign(); $this->processForm(); $html = $this->module->display($this->file, 'views/templates/hook/displayAdminProductsExtra.tpl'); $html_form = $this->renderForm(); return $html.$html_form; } Nada. Cependant, mon analyseur de réseau dans fire bug m'indique que le formulaire envoie bien de la donnée en POST à une url qui répond 200 OK, mais impossible de savoir ou partent mes données. Je joins à ce post une image illustrant la structure actuelle de mon module Je suis ouvert à toutes suggestion. Merci à la communautés Link to comment Share on other sites More sharing options...
nliprandi Posted November 7, 2016 Author Share Posted November 7, 2016 Personne n'a une petite idée ? une piste ? 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