web-dev-qa-db-ja.com

フォーム送信後にctoolsモーダルを表示する

私はフォームを持っています:

//...
$form['submit'] = array(
  '#type' => 'submit',
  '#value' => t('Sumbit'),
);

このフォームが検証されて送信された後、ctoolsモーダルを表示する必要があります。

これはモーダルの私のhook_menuです:

$items['thankyou/%ctools_js'] = array(
    'title' => 'Thank you',
    'page arguments' => array(1),
    'access callback' => TRUE,
    'page callback' => 'thankyou_callback',
    'type' => MENU_CALLBACK,
  );
ctools_include('ajax');
ctools_include('modal');

ctools_modal_add_js();

コールバック関数:

function thankyou_callback($js = NULL) {
  // Content that we place in the popup.
  $popup_content = t('Thank you!');

  if (!$js) {
    return $popup_content;
  }

  ctools_include('modal');
  ctools_include('ajax');

  $output = array();
  $output[] = ctools_modal_command_display(t('Greetings'), $popup_content);

  print ajax_render($output);
  drupal_exit();
}

私のフォーム送信:

function myform_submit($form, &$form_state) {
  // ...
  // show my modal here
  modal.show();  // ???
}

次に、フォームの送信後にctoolsモーダルを表示するにはどうすればよいですか?

Ajaxコールバックではありません。

2
rpayanm

関数でポップアップにフォームを呼び出す必要があります ctools_modal_form_wrapper

エラーがあれば、メッセージがポップアップに表示されます。送信の成功を確認するには、ステートメントを使用する必要があります

if (!empty($form_state['executed'])) {
    $output[] = ajax_command_replace('#modal-content', 'Thank you');
}

または、ajaxフォームを使用してajaxを呼び出すこともできます。

$form['markup'] = array(
    '#markup' => '<div id="pop-up"></div>'
  );
//You need markup for wrapper 
$form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Sumbit'),
    '#ajax' => array(
      'wrapper' => 'pop-up',
      'callback' => 'modal_form',
    ),
  );

そして機能提出フォーム

function modal_form($form, &$form_state) {
  //Process data when form submit
  ctools_include('modal');
  ctools_modal_add_js();
  $commands = array();
  $commands[] = ctools_modal_command_display('Form Submit', 'Say Thank You');
  print ajax_render($commands);
  exit;
}
1
MrD