Slides: http://www.slideshare.net/merlinofchaos/the-chaos-tools-suite

This is the modal test module. You can create the .info file that goes with it.

<?php
/**
* Implementation of hook_menu().
*/
function modal_test_menu() {
 
$items = array();

 
$items['modal_test'] = array(
   
'title' => 'Modal test',
   
'access callback' => TRUE,
   
'page callback' => 'modal_test_page',
  );

 
$items['modal_test/form'] = array(
   
'title' => 'AJAX modal dialog',
   
'access callback' => TRUE,
   
'page callback' => 'modal_test_popup',
   
'type' => MENU_CALLBACK,
  );

  return
$items;
}

function
modal_test_page() {
 
ctools_include('ajax'); // Module  include the dependence it needs for ajax.
 
ctools_include('modal');
 
ctools_modal_add_js();

 
$output = ctools_modal_text_button(t('Click Here'), 'modal_test/form', t('Pop me up'));
 
$output .= '<div id="modal-message">&nbsp</div>';
 
ctools_include('plugins');
  return
$output;
}

function
modal_test_popup() {
 
ctools_include('ajax');
 
ctools_include('modal');

 
$form_state = array('ajax' => TRUE);
 
$output = ctools_modal_form_wrapper('module_test_form', $form_state);
  if (!
$output) {
   
$output = array();
   
$output[] = ctools_ajax_command_replace('#modal-message', '<div id="modal-message">' . $form_state['message'] . '</div>');
   
$output[] = ctools_modal_command_dismiss();
  }
 
ctools_ajax_render($output);
}

function
module_test_form(&$form_state) {
 
$form['text'] = array(
   
'#type' => 'textfield',
   
'#title' => t('Text'),
  );

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

  return
$form;
}

function
module_test_form_submit(&$form, &$form_state) {
 
$form_state['message'] = t('Message: %message', array('%message' => $form_state['values']['text']));
}
?>

CTools session at Drupalcon

Thanks Earl,
I was just about to dive in the CTools code after the session and the Panels BOF later on when you tweeted this post.
Great stuff.

TUc

Exportables

Great presentation but a pity you didn't manage to show example exportable usage.

hi there How do you

hi there

How do you implement that code

Hi Merlin, Thanks for your

Hi Merlin,

Thanks for your great work, True Ajax helper (so as panels and forms wizards, and...) was really missing in D6 !!

I was wondering how forms generated by ctools_modal_form_wrapper and rendered by ctools_ajax_render($output) could by themed ?
How can I mix html and ctools forms as output of the callback to build more complicated page structure without mix logic and template ?

keep movin' and Happy New Year !!!

They are normal forms. They

They are normal forms. They can be themed by creating a theme_FORM_ID function (and registering it in your hook_theme so it can be found).

Thanks for responding me

Thanks for responding me !

That's true but, as far as i know, i can't pass $form_values as an argument of my theming function, so how could i build a complex rendering in function of some values...

( In fact I would like to pass some argument in my form's building function but this isn't possible with ctools_modal_form_wrapper(), I could pass these arguments in the $form_values but what for if my theming function isn't aware of them ...)

Have you any clues ?

-forgive my bad english-

Ctools Form Wizard for Adding Nodes

Hi Merlin,

Thanks for all your incredible work.

Can the Ctools Form Wizard be used to create custom content types (nodes)?

Multistep form

I like the concept of your multistep form - caching an object. It meets one of the shortcomings of Drupal 6.
Is there some means of customising the buttons - i.e. changing the default names?

Post new comment

The content of this field is kept private and will not be shown publicly.