Если Вы когда-нибудь пробовали пользоваться поиском Google или Yandex, то наверняка знаете, что после ввода символа в текстовое поле появляется выпадающий список, который содержит десяток строк со примерами поиска, начальные символы которых совпадают с теми символами, которые Вы уже успели ввести. Так работает Autocomplete системы. И многие задаются вопросом: А почему бы не сделать так же на своем сайте на Drupal? Ведь это удобно. К тому же с Form API Друпала это вовсе не так и сложно…

Чтобы наделить поле функцией автодополнения нужно:

  1. Добавить ему свойство #autocomplete_path, в котором прописать путь, по которому будут возвращаться данные:

function mymodule_myform() {
  $form['myfield'] = array(
    '#type' => 'textfield',
    '#title' => 'My field',
    '#autocomplete_path' => 'mymodule/autocomplete',
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Submit',
  );
  return $form;
}
  1. Зарегистрировать в hook_menu указанный путь:

function mymodule_menu() {
  $items['mymodule/autocomplete'] = array(
    'page callback' => 'mymodule_autocomplete',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );
  return $items;
}
  1. В соответствующей callback функции вернуть данные в json формате:

function mymodule_autocomplete($string) {
  // для примера, возвратим заголовки нод
  $result = db_select('node', 'n')
    ->fields('n', array('title'))
    ->condition('title', '%' . db_like($string) . '%', 'LIKE')
    ->range(0, 10)
    ->execute();

  $matches = array();
  foreach ($result as $row) {
    $matches[$row->title] = check_plain($row->title);
  }

  drupal_json_output($matches);
}

Написанное актуально для Drupal 6 и Drupal 7

Комментарии

comments powered by Disqus