Иногда при разработке сайтов возникает необходимость, для удобства ввода данных, создавать поля с автозаполнением (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); }
Теперь у вас есть полноценное автозаполняющееся поле.