ユーザープロファイルにフィールド組織があります(フィールドは複数の値を受け入れることができます)。このフィールドにオートコンプリートを追加したいと思います。これの私のコードは
<?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']
組織フィールドのすべての入力要素で機能させるにはどうすればよいですか?
ありがとう
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';
}
}
}
}