I am using a ctools content type plugins to render a custom form that will have only one submit button.

The submitbutton will switch an eck entity field (boolean) from 0 to 1 and back (if pressed again, of course).

I have defined my ctools content type plugin, form (with ajax callback) and a submit handler

When i tested it with a hook_menu path, all was fine and it worked.

Since i have put it in a ctools content type, no luck.

Any help would be very much appreciated!

Ps: What would be the best place to put my database logic? The submit handler?

Thanks a million!

$plugin = array(
  'single' => TRUE,
  'title' => t('Project isClient'),
  'description' => t('Project isClient AJAX plugin'),
  'category' => t('Project'),
  'render callback' => 'project_isclient_ajax',
  'defaults' => array(),

function project_isclient_ajax() {
  $pane = new stdClass();
  $pane->title = t('Project isClient');
  $pane->content = drupal_get_form('project_isclient_form');
  return $pane;

function project_isclient_form($form, &$form_state) {
  return array(
    'submit' => array(
      '#type' => 'submit',
      '#value' => t('Subscribe'),
      '#ajax' => array(
        'callback' => 'project_isclient_ajax_submit',
        'wrapper' => 'project-isclient-form',
        'method' => 'replace',
        'effect' => 'fade',

 * Ajax callback function.
function project_isclient_ajax_submit($form, $form_state) {
  // Dummy/dumb validation for demo purpose.
  return 'works!';

A little after posting this, i found AJAX calls in CTools Content Type Plugin? which states that ctools handles ajax forms differently. I checked using blocks, and this appears to be correct. In a block my callback works.

1 Answer 1


yes it seems like panles content type plugin handles the ajax calls differently. You could use the ajax commands listed in the ajax.inc file in core. There are functions for ajax_command_remove, ajax_command_append and more...

Here is my ajax callback that i call from my ajax form submit button example:

function my_form_ajax_callback($form, &$form_state) {
  $output = '<div id="newStuff">Clicked!</div>'
  $commands = array();
  $commands[] = ajax_command_remove('#id_to_remove');
  $commands[] = ajax_command_append('#id_of_wrapper_to_insert_in', $output, $settings = NULL);

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.