0

特定の役割タイプのユーザー名のオートコンプリート テキスト フィールドを含むフォームを作成しようとしています。しかし、それは機能していません。drupal.org の例で指定されているデフォルト パスである「user/autocomplete」を使用すると動作しますが...

これは 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);
}

理由は何ですか?

4

2 に答える 2

0

私のサイトの 1 つでオートコンプリートを実行するサンプル: function 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);
}

私は安心できる限り削減しましたが、メニュー コールバックでその % を定義するのが最善だと思います。

于 2013-02-01T18:13:54.620 に答える
0

drupal_to_jsに変更する必要がありdrupal_jsonます。

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.
}

これがうまくいくことを願っています...

于 2013-01-31T12:03:42.373 に答える