I'm using Drupal 7 and I have made autocomplete function to be called on a field.
File my_module.module:
<?php
function my_module_menu() {
$items = array();
$items['/autocomplete'] = array(
'title' => 'Autocomplete',
'page callback' => 'companyAutocomplete',
'access arguments' => array('autocomplete'),
'type' => MENU_LOCAL_TASK,
'weight' => 1,
'file' => 'my_module.autocomplete.inc'
);
return $items;
}
File my_module.autocomplete.inc:
<?php
function companyAutocomplete($fieldInput) {
$returnArray = array();
$query = db_select('node', 'n')
->fields('n', array('nid', 'title'))
->condition('n.title', '%'.db_like($fieldInput).'%', 'LIKE')
->condition('n.type', 'company', '=')
->orderBy('n.title', 'ASC')
->range(0, 10);
// print strtr((string) $query, $query->arguments());
$results = $query->execute();
foreach ($results as $result) {
$returnArray[$result->title] = check_plain($result->title);
}
drupal_json_output($returnArray);
}
File template.php:
<?php
function my_theme_preprocess_field(&$vars) {
if ($node = menu_get_object()) {
if ($node->type == 'company') {
if ($vars['element']['#field_name'] == 'field_company') {
$company = entity_metadata_wrapper('node', $vars['items']['0']['#markup']);
$vars['items']['0']['#markup'] = $company->label();
}
}
}
}
and I have a field company (I use this field to enter NID):
$form['field_company'] = array(
'#type' => 'textfield',
'#default_value' => $defaultCompany,
'#title' => 'Company',
'#autocomplete_path' => '/autocomplete',
);
When I type something in field, autocomplete returns correct text value of the searched term and that is ok.
How can I modify companyAutocomplete()
function or the field itself for autocomplete to works as it is, but to write NID instead title in $form['field_company']['und'][0]['value']?