Méthode abstract form ne fonctionne pas [Réglé]
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
Je suis entrain de faire un nouveau type de formulaire pour les besoins de mon site, mais j'ai un problème, en effet ce form me permettrai d'avoir comme le form Sources
Input et non pas un autre input à côté mais une checkbox
J'ai donc repris le même FormFieldSource.class.php et le tpl, en renommant en FormFieldQCM.class.php et FormFieldQCM.tpl que vous trouverez ci-dessous, mais le problème c'est que le formulaire s'affiche mais lorsque j'indique les données j'ai une erreur:
t_answer not exists, use get_js_specialization_code function in FormField and return field.getValue JS function contain the value
Voici le FormFieldQCM.class.php
Code PHP :
<?php class FormFieldQCM extends AbstractFormField { private $max_input = 10; public function __construct($id, $label, array $value = array(), array $field_options = array(), array $constraints = array()) { parent::__construct($id, $label, $value, $field_options, $constraints); } public function display() { $template = $this->get_template_to_use(); $tpl = new FileTemplate('framework/builder/form/fieldelements/FormFieldQCM.tpl'); $tpl->add_lang(LangLoader::get('common')); $tpl->put_all(array( 'NAME' => $this->get_html_id(), 'ID' => $this->get_html_id(), 'C_DISABLED' => $this->is_disabled(), )); $this->assign_common_template_variables($template); $i = 0; foreach ($this->get_value() as $name => $value) { $tpl->assign_block_vars('fieldelements', array( 'ID' => $i, 'VALUE' => $value, 'NAME' => $name, )); $i++; } if ($i == 0) { $tpl->assign_block_vars('fieldelements', array( 'ID' => $i, 'VALUE' => '', 'NAME' => '', )); } $tpl->put_all(array( 'NAME' => $this->get_html_id(), 'ID' => $this->get_html_id(), 'C_DISABLED' => $this->is_disabled(), 'MAX_INPUT' => $this->max_input, 'NBR_FIELDS' => $i == 0 ? 1 : $i, )); $template->assign_block_vars('fieldelements', array( 'ELEMENT' => $tpl->render(), )); return $template; } public function retrieve_value() { $request = AppContext::get_request(); $values = array(); for ($i = 0; $i < $this->max_input; $i++) { $field_name_id = 'field_name_' . $this->get_html_id() . '_' . $i; if ($request->has_postparameter($field_name_id)) { $field_value_id = 'field_value_' . $this->get_html_id() . '_' . $i; $field_name = $request->get_poststring($field_name_id); $field_value = $request->get_poststring($field_value_id); if (!empty($field_name) && !empty($field_value)) { $values[$field_name] = $field_value; } } } $this->set_value($values); } protected function compute_options(array &$field_options) { foreach ($field_options as $attribute => $value) { $attribute = TextHelper::strtolower($attribute); switch ($attribute) { case 'max_input': $this->max_input = $value; unset($field_options['max_input']); break; } } parent::compute_options($field_options); } protected function get_default_template() { return new FileTemplate('framework/builder/form/FormField.tpl'); } }
Et voici le FormFieldQCM.tpl
Code TPL :
<script> <!-- var FormFieldQCM = function(){ this.integer = {NBR_FIELDS}; this.id_input = ${escapejs(ID)}; this.max_input = {MAX_INPUT}; }; FormFieldQCM.prototype = { add_field : function () { if (this.integer <= this.max_input) { var id = this.id_input + '_' + this.integer; jQuery('<div/>', {'id' : id}).appendTo('#input_fields_' + this.id_input); jQuery('<input/> ', {type : 'text', id : 'field_name_' + id, name : 'field_name_' + id, placeholder : 'Rédigez une réponse', style : 'width:80%'}).appendTo('#' + id); jQuery('#' + id).append(' '); jQuery('<input/> ', {type : 'checkbox', id : 'field_value_' + id, name : 'field_value_' + id, title : "C'est une bonne réponse !"}).appendTo('#' + id); jQuery('#' + id).append(' '); jQuery('<a/> ', {href : 'javascript:FormFieldQCM.delete_field('+ this.integer +');', 'aria-label' : 'Supprimer la réponse'}).html('<i class="fa fa-delete" aria-hidden="true" title="Supprimer la réponse"></i>').appendTo('#' + id); this.integer++; } if (this.integer == this.max_input) { jQuery('#add-' + this.id_input).hide(); } }, delete_field : function (id) { var id = this.id_input + '_' + id; jQuery('#' + id).remove(); this.integer--; jQuery('#add-' + this.id_input).show(); } }; var FormFieldQCM = new FormFieldQCM(); --> </script> <div id="input_fields_${escape(ID)}"> # START fieldelements # <div id="${escape(ID)}_{fieldelements.ID}"> <input type="text" name="field_name_${escape(ID)}_{fieldelements.ID}" id="field_name_${escape(ID)}_{fieldelements.ID}" value="{fieldelements.NAME}" placeholder="Rédigez une réponse" style="width: 80%;"/> <input type="checkbox" name="field_value_${escape(ID)}_{fieldelements.ID}" id="field_value_${escape(ID)}_{fieldelements.ID}" value="{fieldelements.VALUE}" title="C'est une bonne réponse !"/> <a href="javascript:FormFieldQCM.delete_field({fieldelements.ID});" data-confirmation="delete-element" aria-label="Supprimer la réponse"><i class="fa fa-delete" aria-hidden="true" title="Supprimer la réponse"></i></a> </div> # END fieldelements # </div> <a href="javascript:FormFieldQCM.add_field();" id="add-${escape(ID)}" class="field-source-more-value" aria-label="Ajouter une réponse"><i class="fa fa-plus" aria-hidden="true" title="Ajouter une réponse"></i></a>
Merci pour votre aide.
Édité par Myster Le 21/02/2021 à 14h17
olivierb Membre non connecté
- Modérateur
- Voir le profil du membre olivierb
- Inscrit le : 07/02/2014
- Site internet
- Groupes :
- Equipe Assistance
Après, en 5.2, je trouve plusieurs fichiers FormFieldSelectChoice...
Olivier.
Édité par olivierb Le 21/02/2021 à 17h48
Olivier
babsolune Membre non connecté
Administrateur
- Administrateur
- Voir le profil du membre babsolune
- Inscrit le : 16/05/2008
- Site internet
- Groupes :
tu as mis un required => true sur l'appel du champ dans le FormController ?
si oui, il ne faut pas (j'sais pas pourquoi) et mettre le required dans le tpl (js + html)
Édité par babsolune Le 21/02/2021 à 20h08
Myster Membre non connecté
Booster Missile
- Booster Missile
- Voir le profil du membre Myster
- Inscrit le : 04/10/2010
- Groupes :
Merci à vous deux pour vos réponses, effectivement, ne pas mettre de required à true.
Je passe en résolu et merci encore
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie