Corto Arnoux Posted September 27, 2017 Share Posted September 27, 2017 (edited) Bonjour, Je suis débutant de quelques jours avec Prestashop 1.6, j'ai suivi la documentation officielle, passé des heures sur différents forums, je n'arrive pas à trouver de réponse à ma question, peut-être qu'il ne s'agit en fait simplement d'une erreur dans mon code. J'essaye de créer un module pour ajouter des champs dans ma table produit. Jusqu'ici j'arrive à : - Créer ces champs à l'installation - Supprimer ces champs à la désinstallation - Créer une tab dans la fiche produit avec deux input - Afficher les valeurs de mes champs dans ces input Mais maintenant je suis coincé car je n'arrive pas à comprendre ce qu'il se passe lorsque l'utilisateur du module clique sur le bouton submit. Je pense qu'il y a une histoire de contrôleur à appeler derrière tout ça mais je n'arrive pas à trouver d'information à ce sujet. Je vous met mon code en copie si vous avez une idée du problème que je peux rencontrer. J'ai utilisé un petit hack pour afficher une alerte javascript lorsque la tab s'affiche et lorsque le bouton submit est pressé, je n'ai jusqu'ici jamais eu l'occasion de voir celle du submit s'afficher. <?php if (!defined('_PS_VERSION_')) exit; class productByPackage extends Module { /* @var boolean error */ protected $_errors = false; public function __construct() { $this->name = 'productbypackage'; $this->tab = 'pricing_promotion'; $this->version = '0.0.1'; $this->author = 'John Doe'; $this->need_instance = 0; parent::__construct(); $this->displayName = $this->l('Product by Package'); $this->description = $this->l("Test module"); } public function install() { if (!parent::install() OR !$this->alterTable('add') OR !$this->registerHook('actionAdminControllerSetMedia') OR !$this->registerHook('actionProductUpdate') OR !$this->registerHook('displayAdminProductsExtra')) return false; return true; } public function uninstall() { if (!parent::uninstall() OR !$this->alterTable('remove')) return false; return true; } private function getContent() { $this->debug_to_console( "Test" ); $pbp_nb_product_for_new_package = Tools::getValue('pbp_nb_product_for_new_package'); $pbp_price_for_each_new_package = Tools::getValue('pbp_price_for_each_new_package'); $id_product = (int)Tools::getValue('id_product'); if(Tools::isSubmit('submitproductbypackage')) { $this->debug_to_console( "Submited" ); $sql = 'UPDATE ps_product SET pbp_nb_product_for_new_package = '.$pbp_nb_product_for_new_package.' WHERE id_product = '.$id_product; Db::getInstance()->Execute($sql); } } public function prepareNewTab($product) { // Get default language $default_lang = (int)Configuration::get('PS_LANG_DEFAULT'); // Init Fields form array $fields_form[0]['form'] = array( 'legend' => array( 'title' => $this->l('Settings'), ), 'input' => array( array( 'type' => 'text', 'label' => $this->l('Number of products'), 'name' => 'pbp_nb_product_for_new_package', 'size' => 20, 'required' => true ), array( 'type' => 'text', 'label' => $this->l('Price'), 'name' => 'pbp_price_for_each_new_package', 'size' => 20, 'required' => true ) ), 'submit' => array( 'title' => $this->l('Save'), 'class' => 'btn btn-default pull-right' ) ); $helper = new HelperForm(); // Module, token and currentIndex $helper->module = $this; $helper->name_controller = $this->name; $helper->token = Tools::getAdminTokenLite('AdminModules'); // Title and toolbar $helper->title = $this->displayName; $helper->show_toolbar = true; // false -> remove toolbar $helper->toolbar_scroll = true; // yes - > Toolbar is always visible on the top of the screen. $helper->submit_action = 'submitproductbypackage'; $id_product = (int)Tools::getValue('id_product'); // Load current value $helper->fields_value['pbp_nb_product_for_new_package'] = $this->getPbpValues($id_product, 0); $helper->fields_value['pbp_price_for_each_new_package'] = $this->getPbpValues($id_product, 1); return $helper->generateForm($fields_form); } public function getPbpValues($id_product, $value) { $valueString = ""; switch($value) { case 0: $valueString = 'pbp_nb_product_for_new_package'; break; case 1: $valueString = 'pbp_price_for_each_new_package'; break; } $sql = 'SELECT '.$valueString.' FROM '._DB_PREFIX_.'product WHERE id_product ='.$id_product; return Db::getInstance()->getValue($sql); } public function hookDisplayAdminProductsExtra($params) { if (Validate::isLoadedObject($product = new Product((int)Tools::getValue('id_product')))) { $this->getContent(); return $this->prepareNewTab(); } } function debug_to_console( $data ) { $output = $data; if ( is_array( $output ) ) $output = implode( ',', $output); echo "<script>alert( 'Debug Objects: " . $output . "' );</script>"; } public function alterTable($method) { switch ($method) { case 'add': $sql = 'ALTER TABLE ' . _DB_PREFIX_ . 'product ADD (`pbp_nb_product_for_new_package` INT NOT NULL, `pbp_price_for_each_new_package` INT NOT NULL)'; break; case 'remove': $sql = 'ALTER TABLE ' . _DB_PREFIX_ . 'product DROP COLUMN (`pbp_nb_product_for_new_package`, `pbp_price_for_each_new_package`)'; break; } if(!Db::getInstance()->Execute($sql)) return false; return true; } } En espérant que quelqu'un aura une idée d'où peut venir le problème ou de documentation vers laquelle me rediriger. Je vous remercie de votre attention. Au plaisir ! Edited September 27, 2017 by Corto Arnoux (see edit history) Link to comment Share on other sites More sharing options...
Corto Arnoux Posted September 28, 2017 Author Share Posted September 28, 2017 J'ai fini par abandonner la bonne pratique avec le helper. Je suis passé au formulaire en .tpl, ça fonctionne très bien. Si jamais quelqu'un a tout de même une idée ça servira peut-être. Merci 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