Fayrefiive Posted July 1, 2021 Share Posted July 1, 2021 (edited) Bonjour, Je développe actuellement en petit module sur prestashop pour m’entraîner. Avec ce module je souhaite afficher un guide des tailles dans les fiches produits dans les catégories que j'aurais choisi dans le backoffice sur la page de configuration. Mais je rencontre un problème lorsque j'essaie de récupérer les valeurs de mes checkbox de la page de configuration. Je vous met toutes les fonctionnalités que j'ai réalisé. En espérant que vous puissiez me donner une piste pour continuer Dans la fonction Displayform j'essaie de print_r la configuration pour voir ce qu'il y a dedans, mais j'ai l'impression qu'elle est toujours vide, vu qu'elle ne s'affiche pas. Merci par avance à la commu et bonne journée à vous ! public function install() { if (Shop::isFeatureActive()) { Shop::setContext(Shop::CONTEXT_ALL); } if (!parent::install() || !$this->registerHook('displayProductActions') || !$this->registerHook('displayHeader') || !Configuration::updateValue('DS_SIZEGUIDE_CATEGORY', array()) ) { return false; } return true; } public function uninstall() { if (!parent::uninstall() || !Configuration::deleteByName('DS_SIZEGUIDE_CATEGORY')) { return false; } return true; } public function getContent() { $output = null; $currentConfiguration = strval(Tools::getValue('DS_SIZEGUIDE_CATEGORY')); if (Tools::isSubmit('btnSubmit')) { $cats = Category::getCategories( (int)($cookie->id_lang), true, false ); $newConfiguration = array(); $checkboxValues = Tools::getValue('choix'); $i = 0; foreach ($cats as $cat) { if ($cat['id_category'] > 2) { $checkboxValue = array($cat['name'] => $checkboxValues[$i]); array_push($newConfiguration, $checkboxValue); $i++; } } Configuration::updateValue('DS_SIZEGUIDE_CATEGORY', $newConfiguration); $output .= $this->displayConfirmation($this->l('Paramètres mis à jour')); } return $output.$this->displayForm(); } public function displayForm(){ $currentConfiguration = strval(Tools::getValue('DS_SIZEGUIDE_CATEGORY')); $cats = Category::getCategories( (int)($cookie->id_lang), true, false ) ; $default_lang = (int)Configuration::get('PS_LANG_DEFAULT'); print_r($currentConfiguration); $fields_form = array(); $fields_form[0]['form'] = array( 'legend' => array( 'title' => $this->l('Settings'), ), 'input' => array( array( 'type' => 'checkbox', 'label' => $this->l('Faite votre sélection de catégorie(s) :'), 'name' => 'choix', 'values' => array( 'query' => $lesChoix = array(), 'id' => 'check_id', 'name' => 'name' ), ), ), 'submit' => array( 'title' => $this->l('Save'), 'name' => 'btnSubmit', 'class' => 'btn btn-default pull-right' ) ); foreach ($cats as $cat) { if ($cat['id_category'] > 2) { $fields_form[0]['form']['input'][0]['values']['query'][] = array('check_id' => $cat['id_category'], 'name' => $cat['name']); } } $helper = new HelperForm(); // Module, token and currentIndex $helper->module = $this; $helper->name_controller = $this->name; $helper->token = Tools::getAdminTokenLite('AdminModules'); $helper->currentIndex = AdminController::$currentIndex.'&configure='.$this->name; // Language $helper->default_form_language = $default_lang; $helper->allow_employee_form_lang = $default_lang; // Title and toolbar $helper->title = $this->displayName; $helper->show_toolbar = true; $helper->toolbar_scroll = true; $helper->submit_action = 'submit'.$this->name; $helper->toolbar_btn = array( 'save' => array( 'desc' => $this->l('Save'), 'href' => AdminController::$currentIndex.'&configure='.$this->name.'&save'.$this->name. '&token='.Tools::getAdminTokenLite('AdminModules'), ), 'back' => array( 'href' => AdminController::$currentIndex.'&token='.Tools::getAdminTokenLite('AdminModules'), 'desc' => $this->l('Back to list') ) ); // Load current value $helper->fields_value['DS_SIZEGUIDE_CATEGORY'] = Configuration::get('DS_SIZEGUIDE_CATEGORY'); $helper->fields_value['check_id'] = false; return $helper->generateForm($fields_form); } Edited July 1, 2021 by Fayrefiive (see edit history) Link to comment Share on other sites More sharing options...
Alexandre Carette Posted July 4, 2021 Share Posted July 4, 2021 Salut, essaye var_dump(Configuration::get('DS_SIZEGUIDE_CATEGORY')); die(); cdt Link to comment Share on other sites More sharing options...
Fayrefiive Posted July 5, 2021 Author Share Posted July 5, 2021 (edited) Merci Alexandre, cela m'a permis de voir ce qui ne vas pas. J'ai dump d'abord : var_dump(Tools::getValue('choix')); J'ai donc trois problèmes : Le premier étant que peut importe la checkbox que j'ai sélectionné, je récupère toujours la même chose, ce qui est un peu embêtant pour différencier mes différentes checkbox : array(1) { [0]=> string(2) "on" } Mon second est que je ne voit pas comment chargé ces données ensuite pour checker les chekbox en fonction des valeurs sauvegardés, quand j'ai un champ de texte j'y arrive sans problème. Je devrais donc boucler sur cette config pour ensuite pre-check les checkbox. Mais comment pre-check une checkbox ? Mon troisième problème est : Même si actuellement les données des boutons ne correspondent pas, j'ai essayé de les ajouté à la configuration actuel. Quand je dump mon $newConfiguration j'ai ça : array(3) { [0]=> array(1) { ["Vêtements"]=> string(2) "on" } [1]=> array(1) { ["Alimentation et boissons"]=> NULL } [2]=> array(1) { ["Mobilier et déco"]=> NULL } } Mais ensuite j'ai voulu dump la config pour voir ce qu'il y avait dedans, et ça n'ajoute pas la totalité de mon $newConfiguration : array(1) { ["Vêtements"]=> string(2) "on" } Pourquoi un seul array() est ajouté ? Cordialement Edited July 5, 2021 by Fayrefiive (see edit history) Link to comment Share on other sites More sharing options...
Fayrefiive Posted July 6, 2021 Author Share Posted July 6, 2021 Bonjour, J'ai réglé quasiment tous les problèmes, sauf un ^^ Mon problème est le 3ème du post précédent, je récupère un array() contenant mes checkbox checked ou non : var_dump($newConfiguration); array(3) { [0]=> array(1) { ["Vêtements"]=> bool(true) } [1]=> array(1) { ["Alimentation et boissons"]=> bool(false) } [2]=> array(1) { ["Mobilier et déco"]=> bool(false) } } Mes quand j'update ma configuration avec cette nouvelle configuration j'obtiens seulement un seul array() : var_dump(Configuration::get('DS_SIZEGUIDE_CATEGORY')) array(1) { ["Vêtements"]=> bool(false) } Voilà mon code actuel : public function getContent() { $output = null; if (Tools::isSubmit('btnSubmit')) { $cats = Category::getCategories( (int)($cookie->id_lang), true, false ); $newConfiguration = array(); foreach ($cats as $cat) { if ($cat['id_category'] > 2) { $id = "choix_checkbox_" . $cat['id_category']; if (Tools::getValue($id)) { $value = array($cat['name'] => true); array_push($newConfiguration, $value); } else { $value = array($cat['name'] => false); array_push($newConfiguration, $value); } } } var_dump($newConfiguration); Configuration::updateValue('DS_SIZEGUIDE_CATEGORY', $newConfiguration); $output .= $this->displayConfirmation($this->l('Paramètres mis à jour')); var_dump(Configuration::get('DS_SIZEGUIDE_CATEGORY')); } return $output.$this->displayForm(); } Link to comment Share on other sites More sharing options...
coeos.pro Posted July 6, 2021 Share Posted July 6, 2021 il y a des ' en trop dans 2 lignes $image = Product::getCover($p['$product.id_product']); et $file_webp = (dirname(__FILE__).'/webp-img/'.$p['$product.id_product'].'.webp'); met $image = Product::getCover($p[$product.id_product]); et $file_webp = (dirname(__FILE__).'/webp-img/'.$p[$product.id_product].'.webp'); 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