При работе форм через 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().
Профит. Занавес, аплодисменты =)

Другие посты