Formulaire : Inverser l'ordre Widget et Message d'Erreur

Questions, astuces à propos des modèles et des feuilles de styles
Avatar de l’utilisateur
F2lt
Membre
Messages : 164
Inscription : 26 Mai 2011 09:24
Localisation : L'Isle sur Sorgue - Vaucluse (84)

Formulaire : Inverser l'ordre Widget et Message d'Erreur

Messagepar F2lt » 29 Juil 2013 10:36

Bonjour,

Les champs de formulaires en erreurs sont générés par la méthode generateWithError de la classe Widget. Or cette méthode possède un argument $blnSwitchOrder dont la valeur par défaut est false, ce qui donne comme ordre le message puis le champ :

Code : Tout sélectionner

system/librairies/Widget.php :
/**
 * Class Widget
 *
 * Provide methods to handle form widgets.
 * @copyright  Leo Feyer 2005-2010
 * @author     Leo Feyer <http://www.contao.org>
 * @package    Controller
 */
abstract class Widget extends Controller
{
...
   /**
    * Generate the widget with error message and return it as string
    * @param boolean
    * @return string
    */
   public function generateWithError($blnSwitchOrder=false)
   {
      $strWidget = $this->generate();
      $strError = $this->getErrorAsHTML();

      return $blnSwitchOrder ? $strWidget . $strError : $strError . $strWidget;
   }
...
}

Pour inverser cette ordre pour tous les champs il suffit de "modifier" :roll: (création d'un fichier form_widget.tpl dans le dossier des templates personnalisés) le template form_widget.tlp (version 2.9.5) correspondant en ajout l'argument true pour avoir le champ puis le message : 8)

Code : Tout sélectionner

form_widget.tlp :
<?php if (!$this->tableless): ?>
  <tr class="<?php echo $this->rowClass; ?>">
    <td class="col_0 col_first"><?php echo $this->generateLabel(); ?></td>
    <td class="col_1 col_last"><?php echo $this->generateWithError(true); ?></td>
  </tr>
<?php else: ?>
  <?php echo $this->generateLabel(); ?>
  <?php echo $this->generateWithError(true); ?><br />
<?php endif; ?>

Contaoment :)

F2lt
Je soutiens Mira Europe qui éduque et remet gratuitement des chiens guides d'aveugles aux enfants aveugles : http://www.miraeurope.org/

FiX'
Membre
Messages : 399
Inscription : 02 Jan 2009 01:04

Re: Formulaire : Inverser l'ordre Widget et Message d'Erreur

Messagepar FiX' » 29 Juil 2013 16:33

Merci pour l'astuce ! :)

Sais-tu s'il existe une solution du même type pour placer les libellés (label) devant les champs (input) de façon automatique (sans toucher au fichier template "com_default") ?

En effet, Contao place par défaut les labels après les champs... à voir, par exemple, sur une Actualité ayant les commentaires d'activé.

Image

Cette façon de faire ne me paraît pas logique / ergonomique : en France on lit de gauche à droite et pas l'inverse...

Pour le moment, je règle le soucis en CSS... mais par soucis de cohérence... je préférerai que les labels soient placés avant les champs directement dans le code source.

À noter, que lors de la création d'un formulaire via le module "Générateur de formulaire" les libellés / champs sont correctement placés...

Contaoment :wink:

Avatar de l’utilisateur
F2lt
Membre
Messages : 164
Inscription : 26 Mai 2011 09:24
Localisation : L'Isle sur Sorgue - Vaucluse (84)

Re: Formulaire : Inverser l'ordre Widget et Message d'Erreur

Messagepar F2lt » 30 Juil 2013 09:32

Le label et le champ sont générés de manière indépendante, il n'existe pas à ma connaissance de paramètre de fonction pour le faire.

Par contre pour les actualités tu peux changer l'ordre dans le template mod_reader.tpl des news (pas dans celui des commentaires).

Les templates sont redondants entre comments et news ; pour être certain d'avoir des modèles homogènes la solution consiste à utiliser un fichier commun qui est en quelque sorte un "sous-template" (pour le formulaire d'ajout de commentaires par exemple) qui est inclus dans les 2 templates.

F2lt :)
Je soutiens Mira Europe qui éduque et remet gratuitement des chiens guides d'aveugles aux enfants aveugles : http://www.miraeurope.org/

FiX'
Membre
Messages : 399
Inscription : 02 Jan 2009 01:04

Re: Formulaire : Inverser l'ordre Widget et Message d'Erreur

Messagepar FiX' » 30 Juil 2013 09:45

Ok, c'est bien ce que je pensais : il n'y a pas d'autres solutions que de modifier les fichiers templates.

Merci pour la confirmation ;)

Je ne comprends vraiment pas pourquoi - par défaut - les labels sont placés après les champs... :shock: :?

F2lt a écrit :Les templates sont redondants entre comments et news ; pour être certain d'avoir des modèles homogènes la solution consiste à utiliser un fichier commun qui est en quelque sorte un "sous-template" (pour le formulaire d'ajout de commentaires par exemple) qui est inclus dans les 2 templates.

J'ai un peu de mal à comprendre là... :?

A+

Avatar de l’utilisateur
F2lt
Membre
Messages : 164
Inscription : 26 Mai 2011 09:24
Localisation : L'Isle sur Sorgue - Vaucluse (84)

Re: Formulaire : Inverser l'ordre Widget et Message d'Erreur

Messagepar F2lt » 30 Juil 2013 12:43

Il y a un formulaire pour ajouter des commentaires dans 2 fichiers templates différents :
- ce_comments.tpl pour le module comments
- mod_reader.tpl pour le module news
Si tu veux avoir des modifications communes (ordre label et champ) par exemple tu dois modifier les 2 fichiers template en parallèle.

Pour éviter cela, il suffit de :
- créer un fichier comment_add_form.tpl par exemple contenant le code du formulaire d'ajout de commentaire modifié
- personnaliser ce_comments.tpl et mod_reader.tpl en remplaçant le code du formulaire par <?php require("comment_add_form.tpl") ?>

C'est beaucoup plus sûr pour la maintenance, non :?:
Je soutiens Mira Europe qui éduque et remet gratuitement des chiens guides d'aveugles aux enfants aveugles : http://www.miraeurope.org/

FiX'
Membre
Messages : 399
Inscription : 02 Jan 2009 01:04

Re: Formulaire : Inverser l'ordre Widget et Message d'Erreur

Messagepar FiX' » 30 Juil 2013 14:16

Oki, merci pour l'explication ! C'est nettement plus clair ;)

C'est vrai que cette solution offre l'avantage d'être nettement plus efficace. Pas besoin de se prendre la tête à modifier les 2 fichiers... une modification sur un seul fichier et c'est réglé.

A+


Revenir vers « Modèles et CSS »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité