Serial Posted January 11, 2016 Share Posted January 11, 2016 (edited) Bonjour, J'ai crée un nouveau champ dans ma base dans la table ps_product. C'est simplement une checkbox qui prend pour valeur 0 ou 1 (cochée ou décochée). Pour l'ajouter dans le BO, je suis aller dans la classe Product.php, ajouter mon champ dans la définition. Enfin pour l'afficher dans l'onglet "Prix", j'ai mis ce code là : <div class="form-group"> <div class="col-lg-1"><span class="pull-right">{include file="controllers/products/multishop/checkbox.tpl" field="is_solde" type="default"}</span></div> <label class="control-label col-lg-2" for="is_solde"> </label> <div class="col-lg-9"> <div class="checkbox"> <label class="control-label" for="is_solde" > <input type="checkbox" name="is_solde" id="is_solde" {if $product->is_solde}checked="checked"{/if} value="1" /> {l s='Display the "sold" icon on the product page, and in the text found within the product listing.'} </label> </div> </div> </div> Après test, si je coche mon champ, ca met bien la valeur à 1 dans ma base. Par contre, dès que je décoche, la valeur ne se remet pas à zéro. Et pourtant, lors de l'enregistrement de la fiche produit, j'ai bien le message "Mise à jour réussie". Et ma case se "recoche" J'ai du rater quelque chose mais je ne trouve pas Edited January 11, 2016 by Serial (see edit history) Link to comment Share on other sites More sharing options...
franckm1000 Posted January 12, 2016 Share Posted January 12, 2016 (edited) Si tu mets un value à 1 dans un checkbox... ben il vaudra 1 si il est coché et n'existera pas si il n'est pas coché. Si il n'est pas coché la valeur n'est pas transmise dans le $_POST et is_solde n'existe pas dans le tableau de la REQUEST, c'est pour ça que ça ne met pas à jour. Le value sur un checkbox n' d'intérêt que dans le cas multiple avec un tableau. Dans ton cas le mieux est de ne pas mettre de value dans l'input checkbox côté HTML Et côté PHP tu testes simplement l'existence de la valeur dans le tableau. $lIsSolde = isset($_POST['is_solde']) ? 1 : 0; Ensuite tu n'as plus qu'à mettre à jour ta valeur en base avec $lIsSolde Note: sans value dans l'input, si coché, la valeur par défaut du $_POST de la checkbox est "on" Edited January 12, 2016 by franckm1000 (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted January 12, 2016 Share Posted January 12, 2016 Si tu mets un value à 1 dans un checkbox... ben il vaudra 1 si il est coché et n'existera pas si il n'est pas coché. Si il n'est pas coché la valeur n'est pas transmise dans le $_POST et is_solde n'existe pas dans le tableau de la REQUEST, c'est pour ça que ça ne met pas à jour. Le value sur un checkbox n' d'intérêt que dans le cas multiple avec un tableau. Dans ton cas le mieux est de ne pas mettre de value dans l'input checkbox côté HTML Et côté PHP tu testes simplement l'existence de la valeur dans le tableau. $lIsSolde = isset($_POST['is_solde']) ? 1 : 0; Le problème a été résolu sur un autre post, par contre il faut vivre avec son temps, on n'utilise plus $_POST[] chez prestashop mais Tools::getValue('is_solde') qui fait la même chose et renvoie si 0 si vide^^ Link to comment Share on other sites More sharing options...
franckm1000 Posted January 12, 2016 Share Posted January 12, 2016 (edited) Ne t'inquiètes pas pour moi, je vis très bien avec mon temps. Et puis finalement en regardant Prestashop, Tools::isSubmit('is_solde') est encore plus adapté non ? Edited January 12, 2016 by franckm1000 (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted January 12, 2016 Share Posted January 12, 2016 Non, c'est pour vérifier qu'un des boutons de type "submit" a été validé ce qui permet de faire une pré-sélection dans le cas de formulaires multiples Link to comment Share on other sites More sharing options...
franckm1000 Posted January 12, 2016 Share Posted January 12, 2016 (edited) Oui mais la méthode isSubmit() ne fait que tester l'existence d'une variable dans le tableau de la REQUEST: public static function isSubmit($submit) { return ( isset($_POST[$submit]) || isset($_POST[$submit.'_x']) || isset($_POST[$submit.'_y']) || isset($_GET[$submit]) || isset($_GET[$submit.'_x']) || isset($_GET[$submit.'_y']) ); } Là où getValue() commence par tester l'existence de la variable (ce que fait issubmit) puis si la variable existe alors renvoie sa valeur: public static function getValue($key, $default_value = false) { if (!isset($key) || empty($key) || !is_string($key)) return false; $ret = (isset($_POST[$key]) ? $_POST[$key] : (isset($_GET[$key]) ? $_GET[$key] : $default_value)); if (is_string($ret)) return stripslashes(urldecode(preg_replace('/((\%5C0+)|(\%00+))/i', '', urlencode($ret)))); return $ret; } isSubmit() est plus générique et n'est pas forcément à mon sens réservée aux input de type submit d'un formulaire. Et dans le cas particulier énoncé ci-dessus, elle est plus adaptée vu qu'une variable issu d'un checkbox existe/ou pas. Edited January 12, 2016 by franckm1000 (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted January 12, 2016 Share Posted January 12, 2016 On peut en débattre plusieurs heures, mais la logique syntaxique privilégie d'utiliser isSubmit pour un bouton type "Submit" et getValue pour tous les champs de données (à part les $_FILES qui ne sont pas gérés nativement par Presta) Si vous voulez réinventer la roue, c'est possible aussi. Je pense juste qu'il est bon d'indiquer aux lecteurs éventuels de ce post les méthodes qui existent et quand les utiliser. Link to comment Share on other sites More sharing options...
franckm1000 Posted January 12, 2016 Share Posted January 12, 2016 (edited) J'ai bien compris le fait de retranscrire "isSubmit" par rapport à un bouton de type submit mais c'est là que je ne vous rejoins pas totalement dans le sens où je lis isSubmit('ma_var') comme "est-ce que j'ai soumis ma_var ?" Donc (et pour moi le code le confirme) isSubmit() est totalement générique par rapport à l'existence d'une valeur issue du formulaire. Mais bien sûr dans l'absolu on peut parfaitement utiliser les 2 vu que getValue() renvoie également false si la variable n'existe pas dans le tableau de la REQUEST; Bon J'essayais d'être en adéquation avec mon temps c'est tout Edited January 12, 2016 by franckm1000 (see edit history) 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