renaud2263 Posted July 16, 2016 Share Posted July 16, 2016 Bonjour à Tous, Dans mon module perso back office j'utilise les helpers dans la méthode renderForm et notamment un textarea : array( 'type' => 'textarea', 'label' => $this->l('Réponse automatique:'), 'tinymce' => true, 'required' => true, 'name' => 'reponse_auto', 'lang' => 0, 'cols' => 50, 'rows' => 10, 'class' => 'rte', 'autoload_rte' => true, 'hint' => $this->l('Caractères invalides:').' <>;=#{}' ), Donc mon formulaire s'affiche bien avec le textarea et l'éditeur tiny avec sa config par défaut. Mais je souhaiterais y ajouter des boutons...uniquement dans ce module. Comment faire ? Est-il possible de charger uniquement le textarea via un form.tpl et les autres champs gérés par le helper ? Merci de vos conseils. Link to comment Share on other sites More sharing options...
ChDUP Posted July 17, 2016 Share Posted July 17, 2016 Il vous faut overrider form.tpl soit en modifiant la partie {elseif $input.type == 'textarea'} soit en créant un nouveau type de champ 'textarea_perso' et en le créant dans un block other_input pour l'override : https://www.prestashop.com/forums/topic/220912-resolved-override-the-helpers-formtpl/ mais perso j'ai quelques soucis avec 1 Link to comment Share on other sites More sharing options...
renaud2263 Posted July 17, 2016 Author Share Posted July 17, 2016 Bonjour et merci pour le tuyau ! J'ai donc chargé un form.tpl copie du natif dans monmodule/view/templates/admin/mon_module/helpers/form/form.tpl Ensuite j'ai modifié toute la partie textarea comme je voulais. Enjoy ! Link to comment Share on other sites More sharing options...
ChDUP Posted July 18, 2016 Share Posted July 18, 2016 vous avez bien de la chance ... :-) Link to comment Share on other sites More sharing options...
renaud2263 Posted July 18, 2016 Author Share Posted July 18, 2016 Ca ne fonctionne pas pour toi ? Le override n'est pas pris en compte ? Link to comment Share on other sites More sharing options...
ChDUP Posted July 18, 2016 Share Posted July 18, 2016 non :-( https://www.prestashop.com/forums/topic/542317-override-du-helper-formtpl/ ça fonctionne dans un module, mais pas dans un 2ème, sans que je ne comprenne la différence. Link to comment Share on other sites More sharing options...
renaud2263 Posted July 18, 2016 Author Share Posted July 18, 2016 (edited) J'ai eu exactement le même problème. Et c'était le dossier monmodule/views que j'avais nommé monmodule/view sans le S. Arf ! Ceci dit j'ai mis le topic en résolu mais j'enlève le tag car si j'ai bien mon textarea perso (qui est dans l'override de form.tpl) mais depuis ça je n'arrive plus à charger le contenu de la BDD en mode update.... J'ai tenté : $this->fields_value['mon_textarea'] = $obj->mon_contenu; Sachant que j'ai mis $lang à false, que le champ a bien "mon_textarea" comme name. Et que $obj->mon_contenu retourne bien ce que je veux afficher dans le champ. Edited July 18, 2016 by renaud2263 (see edit history) Link to comment Share on other sites More sharing options...
ChDUP Posted July 18, 2016 Share Posted July 18, 2016 Tu peux paste le renderform de ton Controller ? Link to comment Share on other sites More sharing options...
renaud2263 Posted July 18, 2016 Author Share Posted July 18, 2016 public function renderForm() { $reps = $this->loadObject(true); $id_employee = $this->context->employee->id; $currentEmployee = new Employee((int)$id_employee); $prenom = $currentEmployee->firstname; $date = date('Y-m-d H:i:s'); $this->fields_form = array( 'tinymce' => true, 'legend' => array( 'title' => $this->l('Réponses Automatiques'), ), 'input' => array( array( 'type' => 'hidden', 'name' => 'reponse_date_create', 'value' => $date ), array( 'type' => 'text', 'label' => $this->l('Titre'), 'name' => 'reponse_title', 'required' => true, 'lang' => 0, 'class' => 'fme_input_field', 'hint' => $this->l('Lettres et chiffres autorisés') ), array( 'type' => 'radio', 'label' => $this->l('Statut:'), 'name' => 'active', 'required' => true, 'class' => 't', 'is_bool' => true, 'values' => array( array( 'id' => 'active_on', 'value' => 1, 'label' => $this->l('Actif') ), array( 'id' => 'active_off', 'value' => 0, 'label' => $this->l('Inactif') ) ) ), array( 'type' => 'textarea', 'label' => $this->l('Réponse automatique:'), 'tinymce' => true, 'required' => true, 'name' => 'reponse_auto', 'lang' => 0, 'cols' => 50, 'rows' => 10, 'class' => 'rte', 'autoload_rte' => true, 'hint' => $this->l('Caractères invalides:').' <>;=#{}' ), array( 'type' => 'hidden', 'name' => 'id_employee', ), array( 'type' => 'hidden', 'name' => 'employee_name', ), array( 'type' => 'hidden', 'name' => 'reponse_date_create', ) ) ); $this->fields_value = array('id_employee' => $id_employee, "employee_name" => $prenom, "reponse_date_create"=>date("Y-m-d H:i:s"), "reponse_auto"=>$reps->reponse_auto); $this->fields_form['submit'] = array( 'title' => $this->l('Enregistrer'), 'class' => 'button pull-right' ); return parent::renderForm(); } Et dans mon form.tpl : <textarea class="rte autoload_rte rte autoload_rte" cols="30" rows="7" id="reponse_auto" name="reponse_auto"></textarea> Link to comment Share on other sites More sharing options...
renaud2263 Posted July 18, 2016 Author Share Posted July 18, 2016 Trouvé ! Dans le renderForm() $reps = $this->loadObject(true); // je charge l'objet .....autres form par $this->fields_form et: $this->context->smarty->assign('reponse_auto_content', $reps->reponse_auto); Dans le template : <textarea class="rte autoload_rte rte autoload_rte" cols="30" rows="7" id="reponse_auto" name="reponse_auto">{$reponse_auto_content}</textarea> Je sais pas si c'est très académique, mais ça fonctionne. Link to comment Share on other sites More sharing options...
ChDUP Posted July 18, 2016 Share Posted July 18, 2016 non ça ne l'est pas vraiment il faut passer à $this->fields_value['mon_textarea'] les valeurs sous forme d'array avec les langues en clé. vu que dans le form tpl d'origine la value est affichée comme ceci {$fields_value[$input.name][$language.id_lang]|escape:'html':'UTF-8'} Pourquoi avoir imposé les class rte autoload_rte dans le tpl ? Et pourquoi les avoir répétées 2 fois ? Les rows et cols peuvent également etre passés en paramètres. En fait, pourquoi un override ? Link to comment Share on other sites More sharing options...
renaud2263 Posted July 18, 2016 Author Share Posted July 18, 2016 non ça ne l'est pas vraiment il faut passer à $this->fields_value['mon_textarea'] les valeurs sous forme d'array avec les langues en clé. vu que dans le form tpl d'origine la value est affichée comme ceci {$fields_value[$input.name][$language.id_lang]|escape:'html':'UTF-8'} Pourquoi avoir imposé les class rte autoload_rte dans le tpl ? Et pourquoi les avoir répétées 2 fois ? Les rows et cols peuvent également etre passés en paramètres. En fait, pourquoi un override ? $fields_value ne fonctionne pas. J'ai mis lang à false pour ce module. Mais que ce soit $this->fields_value['reponse_auto'][0] = $reps->reponse_auto; ou $this->fields_value['reponse_auto'][1] = $reps->reponse_auto; Rien n'est retourné. Pour les classes autoload_rte en double, j'ai copié ça dans un autre textarea maison ou j'avais mis rte à true dans le fields_form. Mais avec un seul ça fonctionne très bien. Je ne savais pas pour cols et rows. Et un override parce que j'ai modifié le tinymce de ce module: j'ai ajouté une liste des produits qu'on peut insérer dans le champ. Link to comment Share on other sites More sharing options...
ChDUP Posted July 18, 2016 Share Posted July 18, 2016 ah oui effectivement 'lang' => 0 donc le tpl est celui-ci pour $input.lang == 0 <textarea name="{$input.name}" id="{if isset($input.id)}{$input.id}{else}{$input.name}{/if}" {if isset($input.cols)}cols="{$input.cols}"{/if} {if isset($input.rows)}rows="{$input.rows}"{/if} class="{if isset($input.autoload_rte) && $input.autoload_rte}rte autoload_rte{if isset($input.class)} {$input.class}{/if}{else} textarea-autosize{/if}">{$fields_value[$input.name]|escape:'html':'UTF-8'}</textarea> Il doit donc prendre {$fields_value[$input.name]|escape:'html':'UTF-8'} bizarre que ça ne fonctionne pas. Il faudrait afficher $fields_value pour voir. On voit dans le tpl {if isset($input.rows)}rows="{$input.rows}"{/if} pareil pour les cols. Ainsi que if isset($input.autoload_rte) && $input.autoload_rte}rte autoload_rte{if isset($input.class)} {$input.class}{/if} qui permet de specifier une class ou encore autoload_rte directement Link to comment Share on other sites More sharing options...
renaud2263 Posted July 18, 2016 Author Share Posted July 18, 2016 Merci beaucoup oui ça fonctionne très bien, c'est génial, j'ai appris plein de choses. Je suis désolé de ne pouvoir t'aider, mais je ne suis pas au niveau... 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