Порядок сортировки по умолчанию для других столбцов таблицы
Я визуализирую таблицу с помощью theme_table()
и использую для этого сортировку таблиц (sql). Все это прекрасно работает.
За исключением начальной/стандартной сортировки в других таблицах. Параметр сортировки пользователей еще не определен. Пример:
Name | Age ▼
Сортировка по "возрасту" определена в $header
. Пользователь нажимает на "Имя". Теперь это сортируется по возрастанию. Несмотря ни на что! Мне нужно по убыванию.
Нажмите:
Name ▲ | Age
Но мне нужно/я хочу:
Нажмите:
Name ▼ | Age
Изучение кода это определяет порядок сортировки по умолчанию, в tablesort_header я сталкиваюсь со следующим:
else {
// If the user clicks a different header, we want to sort ascending initially.
$ts['sort'] = 'asc';
$image = '';
}
Я не вижу способа избежать этого. А ты? Я пропустил какой-то параметр, опцию? Я отказываюсь верить, что Drupal делает такое глупое предположение, не позволяя разработчикам переопределить его.
4 answers
Нет, на данный момент это невозможно.
Для этого есть проблема, я предлагаю вам попробовать это и сообщить об этом, чтобы это можно было сделать в ближайшее время: http://drupal.org/node/109493
Вы можете переопределить его, но, вероятно, не так, как вам хотелось бы. tablesort_header
вызывается изнутри theme_table
. Я предполагаю, что причина, по которой это было так жестко запрограммировано, заключается в том, что это служебная функция для функции темы.
Вы можете переопределить theme_table
и изменить поведение, хотя я должен признать, что было бы лучше, если бы оно определялось переменной.
Есть обходной путь, если вы можете определить ссылку, которая приведет вас на страницу с таблицей, которую вы хотите отсортировать.
Просто создайте ссылку такой же, как если бы вы нажали на столбец, чтобы сделать его нисходящим. Ссылка будет содержать имя столбца таблицы и сортировку, определенные как фрагменты: www.domain.com/table_page?order=title&sort=desc
По крайней мере, это не основной взлом, и он будет сохраняться по ссылкам на страницы.
Вот как я сделал это с помощью пользовательского модуля, используя #прикрепленный и .поведение js:
Example.js
(function ($) {
Drupal.behaviors.myFoo = {
attach: function (context, settings) {
var th = document.querySelectorAll('#my-container table.sticky-table thead th');
if (th) {
for (var i = 0; i < th.length; i++) {
var el = th[i];
if (el.classList.contains('active')) { continue; } // Skip the active column.
var a = el.querySelector('a');
a.setAttribute('href', a.getAttribute('href').replace('sort=asc', 'sort=desc'));
}
}
}
};
}(jQuery));
Он просто перебирает каждый столбец в таблице (пропуская активный столбец), заменяет sort=asc
на sort=desc
в каждой ссылке.
Быстро и грязно, вот что она сказала.