2013-01-31 47 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? –