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.
Mon "thème de suggestion" est présent et son nom est "form - myformtest-form.html.twig". Puis dans mon répertoire de module:
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.
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?
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>
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>
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.
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.