При работе форм через ajax callback функция вызывается по пути system/ajax
. Если в форме есть таблица с сортировкой, то все ссылки в хидере таблицы и пагинаторе будут начинаться с system/ajax. Чтобы избежать этого можно сделать так:
<?php
// Если есть сортировка - запоминаем ее.
$get = drupal_get_query_parameters();
if (isset($get['order'])){
variable_set(__FUNCTION__, array(
'sort' => $get['sort'],
'order' => $get['order']
)); // запоминаем сортировку
// тоже самое, но если нужно чтобы работало
// для каждого пользователя отдельно используем сессию
// $_SESSION['mymodule'][__FUNCTION__] = array(
// 'sort' => $get['sort'],
// 'order' => $get['order']
// );
}
// добавляем последнюю сортировку
if (variable_get(__FUNCTION__)){
$_GET += variable_get(__FUNCTION__); // если есть сортировка добавляем её
// если используем сессию
// $_SESSION['mymodule'][__FUNCTION__] = array(
// 'sort' => $get['sort'],
// 'order' => $get['order']
// );
}
// подменяем текущий путь, чтобы путь сортировки был верный
// ссылка на страницу, на которой находится текущая форма
$_GET['q'] = 'path/to/this/page';
Вставляем это в начало функции hook_form().
Профит. Занавес, аплодисменты =)