web-dev-qa-db-ja.com

複数値のオートコンプリート-カスタムフィールド

ユーザープロファイルにフィールド組織があります(フィールドは複数の値を受け入れることができます)。このフィールドにオートコンプリートを追加したいと思います。これの私のコードは

<?php
/**
 * Implementation of hook_menu()
 */
function org_ac_menu() {
  $items = array();
  $items['org_ac/autocomplete'] = array(
    'page callback' => 'org_ac_autocomplete',
    'access callback' => TRUE,
    'access arguments' => array('access dbpedia autocomplete'),
    'type' => MENU_CALLBACK,
  );
  return $items;
}

/**
 * Implementation of hook_form_alter()
 */
function org_ac_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'user_profile_form') {
    //$form['field_organization']['#autocomplete_path'] = 'org_ac/autocomplete';
    $form['field_organization']['und'][0]['value']['#autocomplete_path'] = 'org_ac/autocomplete'; **/* This works but only on the first input field! */**
  }
}

/**
 * Check for possibilities in dbpedia
 */
function org_ac_autocomplete($string = '') {
  $found = array();

  $url = 'http://lookup.dbpedia.org/api/search.asmx/PrefixSearch?QueryString='.urlencode($string).'&MaxHits=5';
  $result = file_get_contents($url);
  $data = simplexml_load_string($result);

  foreach($data->Result as $res_temp)
  {
      $found[check_plain($res_temp->Label)] = check_plain($res_temp->Label);
  }

  drupal_json_output($found);
}

この要素をフォームで参照すると、コードが機能します->

$form['field_organization']['und'][0]['value']['#autocomplete_path'] = 'org_ac/autocomplete'; 

しかし、複数の値を受け入れることができるため、オートコンプリートは残りの要素に対して機能しません-> $form['field_organization']['und'][1] & $form['field_organization']['und'][2]['value']['value']

組織フィールドのすべての入力要素で機能させるにはどうすればよいですか?

ありがとう

4
Jayaram

Hook_form_alterを変更して、field_organizationの$ deltaをループする場合は、複数で機能するはずです...

/**
 * Implementation of hook_form_alter()
 */
function org_ac_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'user_profile_form') {
    foreach($form['field_organization'][LANGUAGE_NONE] as $delta => $field) {
      if(is_array($field) && is_numeric($delta)) {
        $form['field_organization'][LANGUAGE_NONE][$delta]['value']['#autocomplete_path'] = 'org_ac/autocomplete';
      }
    }
  }
}
2
Brent