Інколи в процесі розробки сайтів виникає необхідність, для зручності вводу даних, створити поле з автозаповненням (autocomplete field). Прикладами таких полів можуть бути віджети для cck-полів Node reference i User reference.
Розглянемо програмне створення такого роду полів. Згідно Drupal Forms API reference властивість #autocomplete_path можна додати тільки для елемента textfield. Ця властивість визначає шлях, по якому автоматично виключений Javascript-код Друпала пошле НТТР-запити, використовуючи 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); }
Результатом усіх старань у вас є повноцінне автозаповнюване поле.