Иногда при разработке сайтов возникает необходимость, для удобства ввода данных, создавать поля с автозаполнением (autocomplete field). Примерами таких полей могут быть виджеты для cck-полей Node reference i User reference. Рассмотрим программное создание такого рода полей.
Согласно Drupal Forms API reference свойство #autocomplete_path можно добавить только для элемента texfield. Это свойство определяет путь, по которому автоматически включенный JavaScript-код Друпала пошлет HTTP-запросы, используя JQuery.
Первым делом, объявим textfield в форме:
php
$form['example'] = array(
'#type' => 'textfield',
'#title' => t('Example Textfield'),
'#autocomplete_path' => 'products/autocomplete',
);
Теперь в hook_menu() определим callback для нашего автозаполнения:
php
/**
* Implementation of hook_menu
*/
function module_menu() {
$items['products/autocomplete'] = array(
'page callback' => 'module_products_autocomplete',
'type' => MENU_CALLBACK,
'access arguments' => array('administer nodes'),
);
return $items;
}
И в завершение, нам нужно описать саму функцию обратного вызова, которая передаст некий массив функции drupal_json():
php
function module_products_autocomplete($string) {
$matches = array();
$res = db_query("SELECT title, nid FROM {node} WHERE LOWER(title) LIKE LOWER('%s%%')", $string);
while ($row = db_fetch_array($res)) {
$matches[$row['nid']] = $row['title'];
}
drupal_json($matches);
}
Теперь у вас есть полноценное автозаполняющееся поле.
