Ajax фильтрация и сортировка таблиц

mbaev 19.02.2014, 14:46

При работе форм через ajax callback функция вызывается по пути "system/ajax". Если в форме есть таблица с сортировкой, то все ссылки в хидере таблицы и пагинаторе будут начинаться с system/ajax. Чтобы избежать этого можно сделать так:

hook_form()
  1. // Если есть сортировка - запоминаем ее.
  2. $get = drupal_get_query_parameters();
  3. if (isset($get['order'])){
  4.   variable_set(__FUNCTION__, array(
  5.     'sort'  => $get['sort'],
  6.     'order' => $get['order']
  7.   )); // запоминаем сортировку
  8.  
  9.   //  тоже самое, но если нужно чтобы работало
  10.   //  для каждого пользователя отдельно используем сессию
  11.   //  $_SESSION['mymodule'][__FUNCTION__] = array(
  12.   //    'sort' => $get['sort'],
  13.   //    'order' => $get['order']
  14.   //  );
  15. }
  16.  
  17. // добавляем последнюю сортировку
  18. if (variable_get(__FUNCTION__)){
  19.   $_GET += variable_get(__FUNCTION__); // если есть сортировка добавляем её
  20.  
  21.   //  если используем сессию
  22.   //  $_SESSION['mymodule'][__FUNCTION__] = array(
  23.   //    'sort' => $get['sort'],
  24.   //    'order' => $get['order']
  25.   //  );
  26. }
  27.  
  28. // подменяем текущий путь, чтобы путь сортировки был верный
  29.  
  30. // ссылка на страницу, на которой находится текущая форма
  31. $_GET['q'] = 'path/to/this/page';

Вставляем это в начало функции hook_form().
Профит. Занавес, аплодисменты =)