Ctools、Colorbox、Simple dialog、Ctools Auto-modalなど、モーダルダイアログを実装するための多くのソリューションがあるようです。モーダルダイアログでポップアップフォームを作成するために、Form APIを介した単純なコーディングにどちらが最適かわからない。
大きな問題は検証です。 Drupalでモーダルフォームを作成するためのベストプラクティスはありますか?
モーダルダイアログでフォームを使用する良い例は 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>