Jump to content

Champ personnalisé dans un helper form


Recommended Posts

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

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 by renaud2263 (see edit history)
Link to comment
Share on other sites

	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

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

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

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...