Drupal 8 - rendre un formulaire dans un template

Posté le Mercredi 5 juin 2019 - 09:36
Dernière mise à jour le Mercredi 5 juin 2019 - 10:48

La form api de drupal est très puissante, mais pour jouer avec le markup html avec les #prefix et #suffix peut s'avérer rapidement complexe en plus d'être un peu sale au niveau du code.

Dans drupal 8 il est possible de facilement utiliser un template pour un formulaire. Pour cela il faut se baser sur le nom machine du formulaire.

Cela fonctionne pour nos formulaires custom, mais aussi pour les formulaires des modules tiers ou du core. Je vais ici utiliser un template pour le formulaire user_form qui correspond au formulaire de modification du compte utilisateur. Le nom machine de ce formulaire est user_form.

Définition du template :

Fichier : mon_module.module

  1. function mon_module_theme() {
  2. $theme = [];
  3. $theme['user_form'] = [
  4. 'render element' => 'form',
  5. 'template' => 'user-form',
  6. ];
  7. return $theme;
  8. }

J'utilise comme clé de thème le nom machine du formulaire.

Je peux ensuite créer dans le dossier templates de mon thème le fichier user-form.html.twig : (attention au _ remplacé par un -)

  1. <div>
  2. <p>Test</p>
  3. {{ form }}
  4. <div>

On peut rendre des champs « manuellement », mais il ne faut pas oublier de rendre le formulaire form à la fin : 

  1. <div>
  2. <p>Test</p>
  3. <div class="col-sm-6">
  4. {{ form.mon_champ_1 }}
  5. </div>
  6. <div class="col-sm-6">
  7. {{ form.mon_champ_2 }}
  8. </div>
  9. {{ form | without('mon_champ_1', 'mon_champ_2') }}
  10. <div>

 

 

Ajouter un commentaire

Ne sera pas publié

HTML restreint

  • Balises HTML autorisées : <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et les adresses courriel se transforment en liens automatiquement.
CAPTCHA
Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...