web-dev-qa-db-ja.com

フォームの周りに<div>を配置するにはどうすればよいですか?

カスタムモジュールを使用してページに埋め込むフォームを作成しました。このフォームを特定のクラスを持つdivでラップするにはどうすればよいですか?

次のコードで作成したビルドに追加する必要があります。

$build = array(
          'form' => $form,
          '#type' => 'markup',
          '#markup' => $html,
          '#attached' => array(

             'library' => array('pup_viewfiles/sortfiles_libraries'),
            ),
        );
3
Diana

Drupal 8.でフォームにマークアップを追加するには、さまざまな方法があります。8。ビルド配列で、ラッパー要素を追加し、フォームをネストすることができます。

$build['wrapper'] = [
  '#type' => 'container',
  '#attributes' => ['id' => 'my-form-wrapper', 'class' => ['my-form-wrapper']],
];

$build['wrapper']['form'] = \Drupal::formBuilder()->getForm('Drupal\mymodule\Form\MyForm');

あるいは、フォームに「#prefix」と「#suffix」を追加することもできます。

$form['#prefix'] = '<div class="my-form-wrapper">';
$form['#suffix'] = '</div>';

または、フォームのテンプレートを使用して、提案フォーム--form-id.html.twigを使用してテーマに追加し、そこにカスタムマークアップを追加することもできます。 (テンプレート名のアンダースコアをハイフンに置き換えてください。)

<div id="my-form-wrapper">
  <form{{ attributes }}>
    {{ children }}
  </form>
</dv>
9
oknate

コンテナのrender要素の完璧なユースケースを説明したと思います。

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

あなたのビルドは次のようなものになると思います

$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'),
  ],
];

HTMLマークアップが必要な場所が正確にわかりませんでした(これはコンテナーの外にあります)。

2
rjl