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

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

Решение.

  1. //Добавляем к модулю файл js
  2. function mymodule_init() {
  3. drupal_add_js(drupal_get_path('module', 'mymodule') .'/myjs.js');
  4. }
  5.  
  6. //Добавляем код в файл myjs.js
  7. (function ($) {
  8. $(function(){
  9. //#selector селектор активирующий событие по вводу символов
  10. $("#selector").keyup(function(){
  11. var search = $(this).val(); //данная переменная хранит то что мы ввели
  12. jQuery('#selector_output').load('testajax/'+search); //Передаем на вывод в нужный селектор страницу и аргумент
  13. });
  14. });
  15. })(jQuery);
  16.  
  17.  
  18.  
  19. //Регистрируем в меню 2 меню . Первое для отображения формы. Второе для приема результатов ajax
  20. function mymodule_menu(){
  21. $items['testpage'] = array(
  22. 'title' => 'Главное окно',
  23. 'page callback' => 'menu_page',
  24. 'access callback' => TRUE,
  25. 'type' => MENU_NORMAL_ITEM,
  26. );
  27.  
  28. $items['testajax/%'] = array(
  29. 'title' => 'Главное окно',
  30. 'page callback' => 'ajax_page',
  31. 'page arguments' => array(1),
  32. 'access callback' => TRUE,
  33. 'type' => MENU_NORMAL_ITEM,
  34. 'delivery callback' => 'callback_ajax',
  35. );
  36. return $items;
  37. }
  38.  
  39. //Функция вывода страницы
  40. function menu_page(){
  41. $output = drupal_render(drupal_get_form('myform'));
  42. return $output;
  43. }
  44.  
  45. function myform(){
  46.  
  47. $form['selector'] = array(
  48. '#type' => 'textfield',
  49. '#size' => 60,
  50. '#maxlength' => 128,
  51. '#required' => TRUE,
  52. );
  53.  
  54. $form['selector_output'] = array(
  55. '#type' => 'textarea',
  56. );
  57. return $form;
  58. }
  59.  
  60. //Фунция возврата аякс
  61. function ajax_page($search){
  62. //Возврат данных в utf8
  63. header('Content-Type: text/html; charset=utf-8');
  64.  
  65. $query = db_query(" SELECT title FROM node where title LIKE '%$search%'")->fetchAll();
  66. //Если ничего не найдено
  67. if(count($query) == 0){
  68. echo 'Ничего не найдено';
  69. }
  70. //Выводим результат
  71. foreach($query as $row){
  72. echo ($row->title."\n");
  73. }
  74. }
  75.  
  76. function callback_ajax($page_callback_result) {
  77. // Only render content
  78. print drupal_render($page_callback_result);
  79. // Perform end-of-request tasks.
  80. drupal_page_footer();
  81. }
Russian
Категория: 
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.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Target Image