Живой поиск в поле формы на Drupal7

Задача - Перехватывать событие ввода текста в поле формы и выводить нужный нам ответ в нужном нам месте.

Решение.

//Добавляем к модулю файл js
function mymodule_init() {
drupal_add_js(drupal_get_path('module', 'mymodule') .'/myjs.js');
}

//Добавляем код в файл myjs.js
(function ($) {
$(function(){
//#selector селектор активирующий событие по вводу символов
$("#selector").keyup(function(){
var search = $(this).val(); //данная переменная хранит то что мы ввели
jQuery('#selector_output').load('testajax/'+search); //Передаем на вывод в нужный селектор страницу и аргумент
});
});
})(jQuery);

//Регистрируем в меню 2 меню . Первое для отображения формы. Второе для приема результатов ajax
function mymodule_menu(){
$items['testpage'] = array(
'title' => 'Главное окно',
'page callback' => 'menu_page',
'access callback' => TRUE,
'type' => MENU_NORMAL_ITEM,
);

$items['testajax/%'] = array(
'title' => 'Главное окно',
'page callback' => 'ajax_page',
'page arguments' => array(1),
'access callback' => TRUE,
'type' => MENU_NORMAL_ITEM,
'delivery callback' => 'callback_ajax',
);
return $items;
}

//Функция вывода страницы
function menu_page(){
$output = drupal_render(drupal_get_form('myform'));
return $output;
}

function myform(){

$form['selector'] = array(
'#type' => 'textfield',
'#size' => 60,
'#maxlength' => 128,
'#required' => TRUE,
);

$form['selector_output'] = array(
'#type' => 'textarea',
);
return $form;
}

//Фунция возврата аякс
function ajax_page($search){
//Возврат данных в utf8
header('Content-Type: text/html; charset=utf-8');

$query = db_query(" SELECT title FROM node where title LIKE '%$search%'")->fetchAll();
//Если ничего не найдено
if(count($query) == 0){
echo 'Ничего не найдено';
}
//Выводим результат
foreach($query as $row){
echo ($row->title."\n");
}
}

function callback_ajax($page_callback_result) {
// Only render content
print drupal_render($page_callback_result);
// Perform end-of-request tasks.
drupal_page_footer();
}

Категория: 
The code has been tested and works
Мультитег: 

Add new comment

Filtered HTML

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.