Как сделать сортировку таблиц с помощью CodeIgniter? - PullRequest
9 голосов
/ 22 сентября 2008

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

/controller/method/param1/param2

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

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

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

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


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

Ответы [ 5 ]

5 голосов
/ 23 сентября 2008

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

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

2 голосов
/ 22 сентября 2008

Если вы согласны с сортировкой на стороне клиента, плагин Tablesorter для jQuery довольно хорош.

1 голос
/ 02 августа 2013

Я использовал это: 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/

1 голос
/ 23 сентября 2008

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

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

Скорректирован 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 был таким:

/ контроллер / сортировщик / имя_столбец, SortOrder

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

Конечно, это можно сократить только до текущей функции:

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
}

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

0 голосов
/ 22 сентября 2008

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

...