Abrindo Formulário no Modal com Ctools

Depois do tutorial Criando modal com Ctools, hoje vamos aprender como abrir um formulário criado via programação, utilizando o modal do Ctools.

 

Primeiro, vamos começar criando a página que vai exibir o Link, do qual irá chamar o nosso formulário via Modal.

 

function meumodulo_menu() {

  //Página que irá renderizar o link do Form
  $items['formulario/page'] = array(
    'page callback' => 'link_form_callback',
    'access callback' => TRUE,
    'type' => MENU_CALLBACK,
  ); 

   //Página que renderiza o Form
    $items['formulario/%ctools_js'] = array(
      'page callback' => 'formulario_callback',
      'page arguments' => array(1),
      'access callback' => TRUE,
      'type' => MENU_CALLBACK,
    ); 

    return $items;
}

 

//Callback da página formulario/page
function link_form_callback() {

  //Adiciona o modal library e modal javascript.
  ctools_include('modal');
  ctools_modal_add_js(); 

  return '' . l('Meu Formulario', 'formulario/nojs', array('attributes' => array('class' => 'ctools-use-modal'))) . '';
}

 

//Callback da página formulario/%ctools_js
function formulario_callback($ajax) { 

  if ($ajax) {
    ctools_include('ajax');
    ctools_include('modal'); 

    $form_state = array(
      'ajax' => TRUE,
      'title' => t('Meu formulário'),
    );

    // Use ctools to generate ajax instructions for the browser to create
    // a form in a modal popup.
    $output = ctools_modal_form_wrapper('meu_form', $form_state);

 

    // If the form has been submitted, there may be additional instructions
    // such as dismissing the modal popup.

    if (!empty($form_state['ajax_commands'])) {
      $output = $form_state['ajax_commands'];
    }

    // Return the ajax instructions to the browser via ajax_render().
    print ajax_render($output);
    drupal_exit();
   }
   else {
    return drupal_get_form('meu_form');
  }
}

 

//Estrutura do meu form
function meu_form($form, $form_state) {

  $form = array();

  $form['body'] = array(
    '#type' => 'textarea',
    '#required' => TRUE,
  );

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

  return $form;
}

 

//Ação do seu form submit
function meu_form_submit(&$form, &$form_state) {
  /**
  *Faça aqui as ações do seu Form submit
  **/ 

  // Fecha o seu modal depois das ações.
  $form_state['ajax_commands'][] = ctools_modal_command_dismiss();

  // Redireciona o usuário para alguma página, caso necessário.
  $form_state['ajax_commands'][] = ctools_ajax_command_redirect('home');

}

 

Veja o resultado final:

 

Até o próximo post galera! ;)