Чтобы наделить поле функцией автодополнения нужно:
1. Добавить полю свойство #autocomplete_path
и прописать в нём путь, по которому будут возвращаться данные:
/**
* Form builder.
*/
function mymodule_myform() {
$form['myfield'] = array(
'#type' => 'textfield',
'#title' => 'My field',
'#autocomplete_path' => 'mymodule/autocomplete', // <--
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Submit',
);
return $form;
}
2. Зарегистрировать в hook_menu()
указанный путь:
/**
* Implements hook_menu().
*/
function mymodule_menu() {
$items['mymodule/autocomplete'] = array(
'page callback' => 'mymodule_autocomplete',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
3. В соответствующей callback функции вернуть данные в json формате:
/**
* Autocomplete callback.
*/
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);
}
Profit.
Написанное актуально для
Drupal 7
Похожие записи
- Восстанавливаем позицию текстового курсора при ajax обновлении формы
- Как выполнять свой js-код до или после любых AJAX запросов (изменение работы AJAX API)
- AJAX в форме корзины Commerce 2
- Как в #ajax callback сгенерировать новую форму чтобы ей не мешали GET и POST данные текущего запроса
- AJAX команда для сброса значений полей формы
Комментарии
Мне в Вашем коде единственно что не нравится что у Вас нет проверки на присутствие результатов. Если их не будет, произойдет варнинг от php в foreach. Я бы написала так:
если результатов не будет, то цикл просто не выполнится, никаких варнингов не будет
При выделении нужного варианта в поле ввода вставляется его просто текст, а как потом обработать это дело, я имею ввиду что нод стаком именем может быть несколько, можно конечно заменить
,но тогда там просто число ни очем не говорящее(непонятно что за статья) хотя нид можно использовать.
Как тут лучше поступить ?
а вдруг там 2 статьи с одинаковым названием, всякое бывает
добавляйте nid в конец названия
И пугать пользователя непонятными цифрами. Буэээ
http://www.linkexchanger.su/2008/39.html
ключевое слово extraParams
jQ встроена в Drupal
А как сделать в drupal 6, чтобы при клике или нажатию Enter среди найденного сразу происходил Submit по данному значению?
Неплохо бы добавить, что для того чтобы фишка с hook_menu сработала, т.е. добавилась бы псевдостраничка, нужно очистить кэш...
Скажите пожалуйста, а возможно ли таким образом переопределить выводимую информацию уже для существующего поля ССК, ссылающегося на ноду ?
То есть, допустим, есть ноды с населенными пунктами и у них есть таксономия - регионы России. И есть ноды другого типа, в которых есть ССК-поля - ссылки на эти населенные пункты.
Так вот, возможно ли сделать так, чтобы если пользователь хочет выбрать нас. пункт "Николаевка", то чтобы ему показывалось не "Николаевка, Николаевка, Николаевка", а "Николаевка (Ростовская обл.), Николаевка (Московская обл.), Николаевка (Краснодарский край)" ?
hook_menu_alter или hook_ajax_render_alter или hook_query_alter
Так а каким образом мне узнать, какой пункт меню в этом случае нужно переопределить в hook_menu_alter, если я знаю название CCK-поля ?
Допустим, у меня CCK-поле называется field_node_link и переопределяется hook_menu_alter.
посмотреть в фаирбаге
Открыл в firebug.
Вот фрагмент, соотв. одной строке, где autocomplete
[html]
[/html]
Не вот это ли название пункта меню ?
node_reference/autocomplete/node/yrv_news/field_node_link
возможно
Думаю, нужно повнимательнее изучить node_reference.module.
Тогда многое прояснится.
Спасибо, за статью.
К сожалению не работает это решения для комбинированного фильтра поля Views
PS
Сайт очень полезный.
Пожалуйста, не удаляйте его.
Подскажите. Я создал множественное поле textfield в настройках типа материала. Мне необходимо сделать его автодополняемым. В какую сторону копать?
в сторону виджета
Разрабатываю зависимые autocomplete-поля. Столкнулся с трудностью передачи результата выбора значения первого поля во второе (форма выбора адреса, например). Обычными селектами решается все просто, а тут загвоздка. Пробовал передать результат (id улицы) в value созданного автокомплитом поля выбора здания (там где хранится ссылка коллбека) путем замены в js этой ссылки, но в коллбек приходит неизмененные данные. Т.е. ссылка меняется, но в hook_menu приходит неизмененная. Размышлял о кеше формы, но где его править? Поможете?
Добавить комментарий