web-dev-qa-db-ja.com

Drupal 7でモーダルダイアログにフォームを作成するにはどうすればよいですか?

Ctools、Colorbox、Simple dialog、Ctools Auto-modalなど、モーダルダイアログを実装するための多くのソリューションがあるようです。モーダルダイアログでポップアップフォームを作成するために、Form APIを介した単純なコーディングにどちらが最適かわからない。

大きな問題は検証です。 Drupalでモーダルフォームを作成するためのベストプラクティスはありますか?

4
Adam S

モーダルダイアログでフォームを使用する良い例は Ajax Login/Register モジュールにあります。モジュールコードを見て、それがどのように機能するかを理解できます(ajax_registerはctools_modalを使用しています)。

または、フォームを手動でレンダリングし、応答にのみctoolsを使用できます。例えば:

mymodule.module:

function mymodule_form($form, &$form_state) {
  ...
  ctools_include('ajax');
  ctools_add_js('ajax-responder');

  $form['#prefix'] = '<div id="container">';
  $form['#suffix'] = '</div>';
  $form['actions']['submit']['#ajax'] = array(
    'callback' => 'mymodule_ajax_callback',
    'wrapper' => 'container',
  );
  ...
}

function mymodule_ajax_callback($form, $form_state) {
  if (!form_get_errors()) {
    $commands   = array();
    $commands[] = ctools_ajax_command_reload();

    return array('#type' => 'ajax', '#commands' => $commands);
  }

  return $form;
}

これで、このフォームをどこでもレンダリングしてポップアップを表示できます(Twitter BootstrapまたはLightboxを使用):

<a href="#container" data-toggle="modal">Show Form</a>
<div style="display:none;"><?php print drupal_render(drupal_get_form('mymodule_form')); ?></div>
5
aroo