Dev On Web Posted April 4, 2012 Share Posted April 4, 2012 Bonjour à tous, je suis actuellement sur un développement spécifique sur PS 1.5 nécessitant l'ajout d'un checkbox dans le BO, sur la page de modification/création des marques (manufacturers). Pour un bouton radio, j'ai réussi après m'être baladé dans le contrôleur admin et dans la classe Manufacturer. Par contre, impossible de comprendre comment valider et traiter les données du checkbox venant du formulaire... Voici l'ajout réalisé en override du contrôleur : $asso_causes = array( array( ... ... définition des valeurs )); array( 'type' => 'checkbox', 'label' => $this->l('Causes:'), 'name' => 'asso_causes[]', 'lang' => true, 'values' => array( 'query' => $asso_causes, 'id' => 'id_cause', 'name' => 'name' ) ) Jusqu'à là, pas de soucis, l'aspect visuel est parfait ! Par contre, si quelqu’un pourrait m'éclairer vis-à-vis de la validation et insertion des données ça serait vraiment cool ! Merci d'avance Link to comment Share on other sites More sharing options...
Thomas Didierjean Posted April 4, 2012 Share Posted April 4, 2012 Bonjour, Les checkbox sont un cas qui n'est pas géré de façon standard, vous allez stocker les résultats dans une table d'association ou autre donc l'insertion ne se fera pas de façon automatique. Tout d'abord pour votre champ quelques modifications : 'lang' => true et asso_causes[] array( 'type' => 'checkbox', 'label' => $this->l('Causes:'), 'name' => 'asso_causes', 'values' => array( 'query' => $asso_causes', 'id' => 'id_cause', 'name' => 'name' ) ) Ensuite, il faut que votre tableau $asso_causes contienne une clé avec la valeur de chaque checkbox pour qu'elles puissent être cochées automatiquement. Ces valeurs seront exploitées par le code suivant que vous devez ajouter après la déclaration de $asso_causes. Ici j'ai choisi la clé "value". foreach ($asso_causes as $cause) $this->fields_value['asso_causes_'.$cause['id_cause']] = $cause['value']; Enfin, pour gérer la validation et la sauvegarde, définissez votre propre méthode qui sera appelée en ajoutant ce code : function processSave() { parent::processSave(); $this->maMethode(); } A noter que vous n'allez pas récupérer en POST un tableau asso_causes[] mais différentes valeurs asso_causes_X où X sont les id présentes dans le tableau d'entrée. J'espère que c'est suffisamment clair, n'hésitez pas à poser des questions Thomas Link to comment Share on other sites More sharing options...
Dev On Web Posted April 5, 2012 Author Share Posted April 5, 2012 Bonjour, Tout d'abord merci d'avoir pris du temps pour me répondre, c'est sympa J'ai tout de suite mis en application votre technique et ça à l'air de fonctionner. J'ai juste une différence au niveau du résultat (j'obtiens un tableau de checkbox cochées)... Voici mes bouts de code ajoutés au contrôleur : $asso_causes = array( array( 'id' => 'planete', 'val' => 'planete', 'name' => $this->l('Planete') ), array( 'id' => 'developpement', 'val' => 'developpement', 'name' => $this->l('Developpement') ), array( 'id' => 'education', 'val' => 'education', 'name' => $this->l('Education') ), array( 'id' => 'enfance', 'val' => 'enfance', 'name' => $this->l('Enfance') ), array( 'id' => 'solidarite', 'val' => 'solidarite', 'name' => $this->l('Solidarite') ), array( 'id' => 'sante', 'val' => 'sante', 'name' => $this->l('Sante') ), array( 'id' => 'droitshumains', 'val' => 'droitshumains', 'name' => $this->l('Droitshumains') ) ); foreach ($asso_causes as $cause) $this->fields_value['asso_causes_'.$cause['id']] = $cause['val']; array( 'type' => 'checkbox', 'label' => $this->l('Causes:'), 'name' => 'asso_causes', 'lang' => true, 'values' => array( 'query' => $asso_causes, 'id' => 'id', 'name' => 'name' ) ) public function insertSQLCauses() { print_r(Tools::getValue('asso_causes')); die("DEBUG"); } public function processSave() { parent::processSave(); $this->insertSQLCauses(); } Voila ce que m'affiche ce test lors de l'enregistrement de la page : Array ( [0] => planete [1] => developpement ) DEBUG En gros, je récupère un tableau avec les valeurs cochées. Moi ça m'arrange car je compte sérialiser le tableau et le stocker dans un champ en base créé pour l'occasion dans la table manufacturer. Cependant, vous me disiez que je n'aurais pas du avoir un tableau en résultat ? Voila où j'en suis Petite question : comment faire dans ce cas pour afficher les checkbox cochées lors de l'affichage de la page de modification d'une marque ? Link to comment Share on other sites More sharing options...
Thomas Didierjean Posted April 5, 2012 Share Posted April 5, 2012 En fait le champ "val" de chaque checkbox doit contenir un booléen qui indique si la case est cochée ou non (les strings sont évaluées à "true" c'est pourquoi toutes les checkbox sont cochées dans votre cas). Vous aurez besoin d'une fonction qui récupère les valeurs sérialisées et remplit les champs "val". Link to comment Share on other sites More sharing options...
Dev On Web Posted April 5, 2012 Author Share Posted April 5, 2012 Re, j'ai l'impression que l'override du contrôleur /admin/AdminManufacturersController.php ne fonctionne pas. Seules les modifications que je fais dans le contrôleur Core sont prises en compte mais pas celles de l'override... Une idée là dessus ? Link to comment Share on other sites More sharing options...
Thomas Didierjean Posted April 5, 2012 Share Posted April 5, 2012 Est-ce que le controlleur override - est placé dans /override/controllers/admin - est nommé AdminManufacturersController.php - a sa classe déclarée ainsi : class AdminManufacturersController extends AdminManufacturersControllerCore Si oui, ça doit fonctionner. Link to comment Share on other sites More sharing options...
Dev On Web Posted April 5, 2012 Author Share Posted April 5, 2012 C'est exact, le problème venait de la fonction renderForm() qui est un eu particulière. Je vous ai expliqué le soucis par MP Tout est bon là, j'ai réussi a boucler le développement de la fonctionnalité au niveau du BO. Merci pour votre aide ! Link to comment Share on other sites More sharing options...
martinjean Posted April 12, 2013 Share Posted April 12, 2013 Bonjour, J'ai un peu le même problème avec l'override du contrôleur /admin/AdminManufacturersController.php qui ne fonctionne pas. Je veux simplement ajouter un champ dans la fonction renderForm() et seule les modifications dans le contrôleur Core fonctionne. En quoi la fonction renderForm() est particulière ? Merci d'avance 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