drupal ctools popup 流程

1.在hook_menu()中定义弹窗路径(带'/nojs',定义中为'/**/%ctools_js')

function member_menu(){
   $items = array();

   $items['member/invitation/%ctools_js'] = array(
    'page callback' => 'user_invitation_callback',
    'page arguments' => array(2),
    'access callback' => 'user_is_logged_in',
    'file'  => 'includes/user_invitation.inc',
    'type' => MENU_CALLBACK,
    );

   return $items;
}


2.定义hook_menu()中路径调用的函数(ajax callback)

function user_invitation_callback($ajax){

  if ($ajax) {
    ctools_include('ajax');
    ctools_include('modal');
 
    $form_state = array(
      'ajax' => TRUE,
      'title' => '请输入您朋友的信息',
    );
 
    // Use ctools to generate ajax instructions for the browser to create
    // a form in a modal popup.
    $output = ctools_modal_form_wrapper('generate_invitation_code_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('generate_invitation_code_form');
  }
}


3.定义弹窗中的form--'generate_invitation_code_form'

function generate_invitation_code_form($form, $form_state){

  $form = array('#prefix' => '<div id="generate-invitation-code-form-wrapper">', '#suffix'=> '</div>');

  $form['invitee'] = array(
     '#prefix' => '<div id="invitee-info">',
     '#suffix' => '</div>'
    );
  $form['invitee']['real_name'] = array(
     '#type' => 'textfield',
     '#title' => '姓名',
     '#element_validate' => array('element_validate_realname'),
     '#required' => true,
  );

  $form['invitee']['email'] = array(
     '#type' => 'textfield',
     '#title' => '邮箱',
     '#required' => true,
     '#element_validate' => array('element_validate_email_address'),
  );

  $form['invitee']['send'] = array(
     '#type' => 'submit',
     '#name' => 'send',
     '#ajax' => array(
     'callback' => 'generate_invitation_code_form_ajax_send',
     'event' => 'click',
     'wrapper' => 'generate-invitation-code-form-wrapper',
     'progress' => array('type' => 'throbber', 'message' => '请稍候...'),
     'method' => 'html',
     'effect' => 'fade',
  ),
  '#value' => '发送邀请',
  ); 
  
  return $form;

}

4.定义提交后的ajax函数--generate_invitation_code_form_ajax_send()

/*
* ajax to send the reg code
*/
function generate_invitation_code_form_ajax_send($form, &$form_state){
  if($errors = form_get_errors()) {
     foreach($errors as $field => $error) {
       $selector = '#edit-'. str_replace('_', '-', $field) .'-error';
       $form_state['ajax_commands'][] = ajax_command_invoke($selector, 'html', array($error));
     }
     drupal_get_messages();//clear messages

   }else{
     global $user;
     $updated_nbr = db_query('SELECT quota FROM {member_invitation_quota} WHERE uid = :uid', array(':uid' => $user->uid))->fetchField();
     $form_state['ajax_commands'][] = ajax_command_invoke('#quota-nbr', 'html', array($updated_nbr));
     $form_state['ajax_commands'][] = ajax_command_invoke('#modal-title', 'html', array('系统提示'));
     $form_state['ajax_commands'][] = ajax_command_html('#generate-invitation-code-form-wrapper', theme('status_messages'));
   }

   $page = array('#type' => 'ajax', '#commands' => $form_state['ajax_commands']);
   ajax_deliver($page);
   drupal_exit();
}

5.效果如图


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值