2013-01-31 24 views
0

我正在尝试为特定角色类型usersname创建一个带自动完成文本字段的表单。但它不起作用。虽然当我使用“用户/自动完成”,这是例如在drupal.org它的工作给予默认路径...#autocomplete_path不能在Drupal 6中工作

这是hook_menu ---

function scout_bucks_menu(){ 
    $items = array(); 
    $items['scouts/autocomplete'] = array(
    'page callback' => 'scout_bucks_autocomplete', 
    'type' => MENU_CALLBACK, 
    'access arguments' => array('administer scout bucks'), 
); 
    return $items; 
} 

此ID为形式 -

function scoutbucks_add_bucks_form(&$form_state){ 
    $form = array(); 
    $form['scout_name'] = array(
    '#type' => 'textfield', 
    '#title' => t('Scout Name'), 
    '#maxlength' => 60, 
    '#autocomplete_path' => 'scouts/autocomplete', 
    '#reguired' => TRUE, 
); 
    $form['submit'] = array(
    '#type' => 'submit', 
    '#title' => t('ADD BUCKS TO SCOUT PROFILE'), 
    '#prefix' => '<div class="submit-button-bucks">', 
    '#suffix' => '</div>', 
); 
    return $form; 
} 

这是自动完成的功能---

function scout_bucks_autocomplete($string = '') { 
    $matches = array(); 
    $userobj = db_fetch_object(db_query("SELECT users.name, users.uid FROM {users}, {users_roles} WHERE users.uid = users_roles.uid AND users_roles.rid = 7")); 
    while ($row = db_fetch_array($userobj)) { 
    $matches[$row['users.uid']] = $row['users.name']; 
    } 
    drupal_json($matches); 
} 

什么能是什么原因?

回答

0

您需要将drupal_json更改为drupal_to_js

function scout_bucks_autocomplete($string = '') { 
    $matches = array(); 
    $userobj = db_fetch_object(db_query("SELECT users.name, users.uid FROM {users}, {users_roles} WHERE users.uid = users_roles.uid AND users_roles.rid = 7")); 
    while ($row = db_fetch_array($userobj)) { 
    $matches[$row['users.uid']] = $row['users.name']; 
    } 
    drupal_to_js($matches); // the edited line. 
} 

希望这个作品......从我的网站的一个工作自动完成

+0

我有问题,因为我没有通过参数值$字符串查询,一旦我做了&列表。但它仍然不像masqurade那样过滤......但是给出了所有的名字......不过我会尝试使用drupal_to_js并查看会发生什么...... – RajeevK

0

样品: 功能module_menu(){

$items['app/autocomplete/%'] = array(
    'title'   => 'Some title', 
    'description'  => '', 
    'page callback' => '_module_autocomplete', 
    'page arguments' => array(2), 
    'type'    => MENU_CALLBACK, 
); 
} 

function _module_autocomplete($param) { 
    $result = db_query('SELECT id,stuff FROM {table} WHERE a=%d', $param); 
    while ($row = db_fetch_object($result)) { 
     $ret[$row->id] = $row->stuff; 
    } 

    drupal_json($ret); 
} 

我剪下来和我一样的感觉安全的,但我确实认为它只是在菜单回调中定义了%。

+0

最近,我已经以与显示的相同的方式实现了自动完成功能在你的答案中。我遇到的问题是,在将数据结果输入到名称(东西)列表中时,选择其中一个会导致文本字段显示该ID。有什么办法让文本字段在存储ID的地方显示名称(id est,隐藏字段),还是必须使用数据库查询在表单提交时查找名称的ID? –