Drupal中使用form的#autocomplete_path属性完成json格式的ajax文本框自动填充效果

  由于drupal默认添加Jquery支持,而且对json格式支持非常好(如有专门的drupal_json方法等),实现文本框自动填充很方便,今天做了个实例

 

首先是写一个form,我打算让我的“策略名”文本框实现自动填充,写完form后应该是这样,我没有加入ajax功能时候,就是个普通的文本:

 

         $form['autoname'] = array(
            '#title' => t('策略名'),
            '#type' => 'textfield',
            '#size' => '50',
            '#required' => TRUE,
            '#default_value'=>$sname,
         );

 

效果如下:

 

auto1

 

现在为策略名这个textfield加入自动填充功能,就是在表单加个#autocomplete_path属性,如下:

         $form['autoname'] = array(
            '#title' => t('策略名'),
            '#type' => 'textfield',
            '#size' => '50',
            '#required' => TRUE,
            '#autocomplete_path' => 'credit/score/view',
            '#default_value'=>$sname,
         );

 

这时,这个form元素会知道你在使用自动填充功能,而且给其指定了一个异步访问路径,这个textfield会调用Jquery把键入文本框的值传给这个指定的异步地址,接下来的工作就是要自己写个异步取数据库的方法了,如下:

 

menu部分指定一个item可以连接到一个方法

 

   //动态存取测验autocomplete
   $items ['credit/score/view'] = array (
    'title' => t('view strategy name'),
    'page callback' => 'getautoname',
    'access callback' => 'user_access',
    'access arguments' => array('administer credit setting'),
    'type' => MENU_CALLBACK
    );

 

 

然后写出这个取数据库的方法,如下:

 

function getautoname($string = ''){

  $matches = array();
  if ($string) {
    $result = db_query_range("SELECT sname FROM {credit_score_strategy} WHERE LOWER(sname) LIKE LOWER('%%%s%%')", $string, 0, 5);//下拉框显示五个结果
    while ($r = db_fetch_object($result)) {
      $matches[$r->sname] = check_plain($r->sname);
    }
  }

  drupal_json($matches);
}

 

上面程序将取出的结果赋给一个数组,然后调用drupal_json()方法,这个方法会自动将数组转为json格式,然后打印出来,想echo一样

 

之后,加了 '#autocomplete_path'  属性的表单元素会自己接收这个输出的结果然后解析并放在文本框里,届时文本框右侧会出现那个常见的小蓝圆圈,表示你加入了drupal的文本自动填充功能,如下:

auto2

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值