drupal6的AJAX,ahah学习研究笔记

 

ahah使form能实现ajax效果。使用需要先在form使用DIV划定wrapper区域(可以通过#prefix与#suffix添加DIV外框),传递#ahah参数,#ahah参数决定callback路径、wrapper的ID与过渡效果等。带有#ahah参数的form项被点击或改变状态时将会无刷新访问callback URL, callback会返回一些json结果,来替换(或追加)wrapper区域内的内容。

 

主要实现代码如下:

 

  $form['howmany'] = array( // 表单项定义
    '#title' => t('How many checkboxes do you want?'),
    '#type' => 'select',
    '#options' => array(1=>1, 2=>2, 3=>3, 4=>4),
    '#default_value' => $default,
    '#ahah' => array(   // ahah参数
      'path' => 'examples/ahah_example/autocheckboxes/callback', // callback路径
      'wrapper' => 'checkboxes',    // wrapper ID
      'effect' => 'fade',
    ),
  );

  $form['checkboxes'] = array(
    '#title' => t("Generated Checkboxes"),
    '#prefix' => '<div id="checkboxes">',  // 用div把表单项包住,并设定ID,必须唯一,本例子中作为wrapper区域使用
    '#suffix' => '</div>',
    '#type' => 'fieldset',  // fieldset表单项,一般用于表单项分组
  );

    // wrapper内的表单项,将会被替换的数据部分
    $form['checkboxes']["checkbox1"] = array(
      '#type' => 'checkbox',
      '#title' => "Checkbox 1",
    );

// callback处理函数
function ahah_example_autocheckboxes_callback() {
  $form = ahah_example_callback_helper();   // 自定义方法,用于得到表单最新状态

  $checkboxes = $form['checkboxes'];
  // Remove the wrapper so we don't double it up.
  unset($checkboxes['#prefix'], $checkboxes['#suffix']); // 被替换的部分,不包括wrapper DIV

  $output = theme('status_messages');
  $output .= drupal_render($checkboxes);    // 通过表单数据生成表单HTML

  // Final rendering callback.
  print drupal_json(array('status' => TRUE, 'data' => $output));    // 转为json数据
  exit();

}
posted @ 2011-01-19 09:20  猫之良品  阅读(962)  评论(0编辑  收藏  举报