Порядок сортировки по умолчанию для других столбцов таблицы


Я визуализирую таблицу с помощью 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
Author: kiamlaluno, 2011-04-28

4 answers

Нет, на данный момент это невозможно.

Для этого есть проблема, я предлагаю вам попробовать это и сообщить об этом, чтобы это можно было сделать в ближайшее время: http://drupal.org/node/109493

 3
Author: Berdir, 2011-04-28 13:12:02

Вы можете переопределить его, но, вероятно, не так, как вам хотелось бы. tablesort_header вызывается изнутри theme_table. Я предполагаю, что причина, по которой это было так жестко запрограммировано, заключается в том, что это служебная функция для функции темы.

Вы можете переопределить theme_table и изменить поведение, хотя я должен признать, что было бы лучше, если бы оно определялось переменной.

 2
Author: googletorp, 2011-04-28 13:12:40

Есть обходной путь, если вы можете определить ссылку, которая приведет вас на страницу с таблицей, которую вы хотите отсортировать.

Просто создайте ссылку такой же, как если бы вы нажали на столбец, чтобы сделать его нисходящим. Ссылка будет содержать имя столбца таблицы и сортировку, определенные как фрагменты: www.domain.com/table_page?order=title&sort=desc

По крайней мере, это не основной взлом, и он будет сохраняться по ссылкам на страницы.

 0
Author: codexmas, 2011-07-01 14:08:13

Вот как я сделал это с помощью пользовательского модуля, используя #прикрепленный и .поведение 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 в каждой ссылке.

Быстро и грязно, вот что она сказала.

 0
Author: tyler.frankenstein, 2019-07-02 18:59:13