Thank you for this easy to use module. I'd like to a for a way to auto close the modal on user submition if the form doesn't have errors. Can you please provide some advise?

I have search in the web and I get to the ctools_modal_command_dismiss() function but I'm not sure where to put it.

Thank you



julianmancera’s picture


I have found a solution, it needs this code change in the ctools_automodal.module line 127 function ctools_automodal_get_form:

$commands = ctools_modal_form_wrapper($form_id, $form_state);
    if ($form_state['executed']) {
      $commands = array(ctools_modal_command_dismiss());
    }else {
	    if (empty($commands)) {
	      $commands[] = ctools_modal_command_loading();
	      if (!empty($_GET['destination'])) {
	        $commands[] = ctools_ajax_command_redirect($_GET['destination']);

Please let me know you comments. The other posibility is in the submition function for the form add a form_state['command'] array variable that allows to control wether to close the modal or maintain the user there for further user operations.

Let me know your comments

Julian Mancera

HakS’s picture

Status:Active» Needs work

Hi julianmancera

Unfortunately it does not work for me, form still stays open when submit after applying changes.

I tested it putting this code inside an implementation of hook_menu_alter:

$items['node/add/article']['modal'] = TRUE;

That's the core node add form.

I was trying it on an (almost) clean installation.

HakS’s picture

Actually, it seems to work if form is not an administrative form. I created a custom form and it worked, but I don't know if that would be part of this issue, because I noticed that administrative forms on modal windows behave quite strange.

EDIT: If you allow other users to use that modal administrative form (in my case that means allowing anonymous to add articles), when submit an ajax error happens http://d.pr/i/IjA9

Marko B’s picture

Issue summary:View changes

There is no need for that, you are using it wrong You can do it all with form rebuild and ctools_modal_command_dismiss(); and ajax_render, I also added $commands[] = ctools_ajax_command_redirect(''); so you redirect when you submited a form to a page you want.

function custom_form($form, &$form_state)
 $form = array();
  $form['something'] = array(
    '#type' => 'textfield',
    '#title' => t('Enter'),
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Submit'),
 if ( $form_state['submitted']){
        $commands[] = ctools_modal_command_dismiss();
         $commands[] = ctools_ajax_command_redirect('<front>');
    print ajax_render($commands);
  return $form;

function custom_form_submit(&$form, &$form_state) {

  $form_state['rebuild'] = TRUE;

Marko B’s picture

Status:Needs work» Fixed

Status:Fixed» Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.

capellic’s picture

@MarkoB, thanks for your code, however I had to add these two module_load_include() calls in order for the ctools_modal_command_dismiss() and ctools_ajax_command_redirect() to be found:

module_load_include('inc', 'ctools', 'includes/modal');
module_load_include('inc', 'ctools', 'includes/ajax');
sukh.singh’s picture

@capellica, the proper way to add these files are as follow


add this to the function which you are using against the ctools ajax menu link