J'ai créé un formulaire que je vais intégrer dans ma page avec un module personnalisé. Comment puis-je envelopper ce formulaire avec un div qui a une classe spécifique?
Je dois l'ajouter à la construction qui est faite avec le code suivant.
$build = array(
'form' => $form,
'#type' => 'markup',
'#markup' => $html,
'#attached' => array(
'library' => array('pup_viewfiles/sortfiles_libraries'),
),
);
Il existe de nombreuses façons différentes d'ajouter du balisage à un formulaire dans Drupal 8. Dans votre tableau de génération, vous pouvez ajouter un élément wrapper, puis imbriquer le formulaire dans:
$build['wrapper'] = [
'#type' => 'container',
'#attributes' => ['id' => 'my-form-wrapper', 'class' => ['my-form-wrapper']],
];
$build['wrapper']['form'] = \Drupal::formBuilder()->getForm('Drupal\mymodule\Form\MyForm');
Alternativement, vous pouvez ajouter un '#prefix' et un '#suffix' à votre formulaire.
$form['#prefix'] = '<div class="my-form-wrapper">';
$form['#suffix'] = '</div>';
Ou vous pouvez utiliser un modèle pour votre formulaire et l'ajouter à votre thème, en utilisant le formulaire de suggestion - form-id.html.twig et y ajouter un balisage personnalisé. (Veillez à remplacer les traits de soulignement par des tirets dans le nom du modèle.)
<div id="my-form-wrapper">
<form{{ attributes }}>
{{ children }}
</form>
</dv>
Je crois que vous avez décrit le cas d'utilisation parfait pour l'élément de rendu de conteneur.
Je crois que votre construction serait quelque chose comme
$build = [
'some_name' => [
'#type' => 'container',
'#attributes' => [
'class' => 'some class',
],
'form' => $form,
],
'some_other_name' => [
'#type' => 'markup',
'#markup' => $html,
],
'#attached' => array(
'library' => array('pup_viewfiles/sortfiles_libraries'),
],
];
Je ne savais pas exactement où vous vouliez le balisage html (cela l'a en dehors du conteneur).