web-dev-qa-db-fra.com

Comment créer un thème pour un formulaire personnalisé?

Je génère un module simple "myformtest" avec un simple formulaire de classe "MyformtestForm". Je souhaite utiliser un thème différent pour le formulaire.

J'ai suivi ce super tutoriel . J'ai ajouté un crochet "_theme_suggestions_alter" dans mon "myformtest.module", j'ai activé twig debugging et j'ai chargé la page du formulaire.

enter image description here

Mon "thème de suggestion" est présent et son nom est "form - myformtest-form.html.twig". Puis dans mon répertoire de module:

  • J'ai ajouté un sous-répertoire "templates"
  • J'ai ajouté le fichier twig "form - myformtest-form.html.twig" dans le sous-répertoire "drupal/modules/custom/myformtest/templates"

Dans le fichier twig, j'ai ajouté ce code simple. (Je l'ai copié depuis drupal/core/themes/classy/templates/form/form.html.twig et ajouté l'élément h1 html pour passer outre)

<h1>TEST</h1>
<form{{ attributes }}>
    {{ children }}
</form>

J'ai effacé les caches (drush cr) et j'ai rechargé ma page de formulaire. Mais l'élément html h1 ("TEST") n'apparaît pas! Où est mon erreur?

[~ # ~] up [~ # ~]

Je l'ai fait ! J'ai ajouté le thème du crochet dans mon fichier .module:

function myformtest_theme($existing, $type, $theme, $path)
{
  return array(
    'form__myformtest_form' => array(
      'render element' => 'form',
      'template' => 'form--myformtest-form',
    ),
  );
}

Mais.... ! Lorsque je charge ma page de formulaire, l'élément html h1 "test" s'affiche mais pas le formulaire:/Je pensais que mon fichier .twig remplaçait le thème par défaut form.html.twig.

enter image description here

Ai-je oublié quelque chose ? Pourquoi le formulaire ne s'affiche pas, comment puis-je le corriger? Et comment puis-je passer un tableau personnalisé de ma méthode de génération de formulaire Class à mon modèle twig?

2
matthieu lopez

Voici la solution:

Je ne comprends pas pourquoi copier et coller le formulaire par défaut twig content ne fonctionne pas. (Pourquoi les attributs et les variables enfants ne fonctionnent pas)

J'ai vidé toutes les variables disponibles twig variables de mon modèle personnalisé (via {{dump ()}}). Je vois que j'avais un tableau nommé "element" .. J'ai essayé cela et son travail! Le le formulaire s'affiche.

Voici le code de mon modèle de formulaire personnalisé:

<h1>TEST</h1>
<form{{ element }}></form>
0
matthieu lopez

Je viens de rencontrer un problème similaire. Et l'a résolu comme suivant.

Dans mon MYMODULE.module fichier:

function MYMODULE_theme($existing, $type, $theme, $path) {

  return [
    'mythemename' => [
      'render element' => 'form',
      'template' => 'my-template-name',
    ],
  ];
}

Dans le $form:

$form['#theme'] = 'mythemename';

Et enfin dans le my-template-name.html.twig modèle:

<div class="someclass">
  {{ form }}
</div>
2
David Coote

L'élément de formulaire possède déjà un modèle de base.

Pour remplacer le modèle de base, vous devrez ajouter le fichier twig dans le répertoire des modèles de votre thème.

Le répertoire des modèles dans les modules existe pour fournir des modèles de base.

0
Eyal

Je pense que vous devez copier le contenu du fichier form.html.twig dans votre modèle personnalisé. Vous pouvez ensuite apporter d'autres modifications à votre modèle personnalisé. De cette façon, votre formulaire devrait s'afficher sur la page.

0
Umed Godd