web-dev-qa-db-fra.com

Comment mettre un <div> autour d'un formulaire?

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'),
            ),
        );
3
Diana

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>
9
oknate

Je crois que vous avez décrit le cas d'utilisation parfait pour l'élément de rendu de conteneur.

https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Render%21Element%21Container.php/class/Container/8.2.x

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).

2
rjl