Как мне выполнить сортировку таблиц с помощью CodeIgniter?

StackOverflow https://stackoverflow.com/questions/115167

Вопрос

Последние несколько недель я разрабатывал сайт, используя CodeIgniter в качестве платформы.Я думал о том, как лучше всего добиться чего-то, что во многих других средах на других языках относительно просто:сортируемые таблицы.CodeIgniter по умолчанию отключает строки запроса, поскольку ваши URL-адреса содержат параметры метода.Таким образом, URL-адрес может выглядеть так:

/controller/method/param1/param2

Вы можете подумать, что можно просто добавить sortBy и sortOrder в качестве двух дополнительных параметров метода контроллера.Я не особо хочу этого делать, главным образом потому, что хочу иметь многоразовый контроллер.Когда вы используете параметры строки запроса, PHP может легко сказать вам, существует ли параметр с именем sortBy.Однако когда вы используете параметры на основе URL-адреса, они будут различаться в зависимости от контроллера.

Мне было интересно, какие у меня есть варианты.Насколько я вижу, это что-то вроде:

  • Передай мне sortBy и sortOrder параметры, просто смиритесь с этим и разработайте для него какой-нибудь малоиспользуемый компонент.
  • Иметь дополнительный контроллер, который будет хранить sortBy и sortOrder в сеансе (хотя он должен будет знать, откуда вы пришли, и отправить вас обратно на исходную страницу).
  • Иметь какую-то функцию AJAX, которая вызывала бы указанный выше контроллер;затем перезагрузите страницу.
  • Взломайте CodeIgniter, чтобы снова включить строки запроса.На самом деле, если это единственный вариант, будем признательны за любые ссылки на то, как это сделать.

Я просто не могу поверить, что такая простая задача может создать такую ​​проблему!Я что-то пропустил?Есть ли у кого-нибудь рекомендации?


Изменить для пояснения:Я люблю jQuery и уже использую его на сайте, поэтому TableSorter — хороший вариант.Однако я хотел бы выполнить сортировку на стороне сервера, поскольку на некоторых страницах потенциально большое количество результатов, включая нумерацию страниц.

Это было полезно?

Решение

Я использовал этот метод:http://codeigniter.com/forums/viewthread/45709/#217816

Я также расширил его, чтобы устанавливать файлы cookie на основе сортировки, чтобы, когда кто-то возвращается, таблица сортировалась так же, как и раньше.

Другие советы

Если вас устраивает сортировка на стороне клиента, плагин Tablesorter для jQuery это довольно приятно.

Я столкнулся с этим с довольно сложной таблицей.Самое сложное заключалось в том, что таблица могла увеличиваться/сжиматься в зависимости от определенных переменных!Большая боль :(

Вот как я с этим справился..

Скорректирован system/application/config/config.php, чтобы разрешить использование символа запятой в URI:

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-,';

Настройте мой контроллер с помощью функции сортировки:

function sorter() {
  //get the sort params
  $sort = explode(",",$this->uri->segment(3)); //the 3rd segment is the column/order
  //pass the params to the model
  $data = $this->model_name->get_the_data($sort[0],$sort[1]);
  $this->_show($data);
}
function _show($data) {
  //all the code for displaying your table
}

Я упростил, но вы поняли.Цель состоит в том, чтобы иметь такой URL-адрес:

/контроллер/сортировщик/имя столбца, порядок сортировки

Функция сортировщика вызывает другую внутреннюю функцию для работы с логикой отображения/шаблона/представления — ее задача — обрабатывать вызов сортировки и получать соответствующие данные из модели.

Конечно, это можно свести к вашей текущей функции:

function showGrid() {
  $sort = $this->uri->segment(3);
  if ($sort) {
    //get the data sorted
  } else {
    //get the data the default way
  }
  //rest of your view logic
}

Таким образом, вам даже не понадобится отдельная функция — и вы можете использовать третий сегмент для определения сортировки.

Я использовал это: http://net.tutsplus.com/tutorials/php/codeigniter-from-scratch-displaying-sorting-tabular-data/

с сайта net.tutsplus.com

К сожалению, он использует то, что вам не нравится (/controller/method/param1/param2), но я добавил это (функцию отображения) для каждого контроллера, когда мне нужна нумерация страниц.Или сделать из него помощника.

Другой пример здесь: http://www.robertmullaney.com/2010/09/19/tablerecord-sorting-made-easier-for-codeigniter/

Я недавно добавил это Настольный сортировщик (который использует Prototype) на кучу моих страниц.Это быстро и довольно легко реализовать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top