Как мне сделать сортировку таблиц с помощью CodeIgniter?
За последние несколько недель я разрабатывал сайт, используя CodeIgniter в качестве основы. Я думал о лучшем способе достижения чего-либо, что во многих других средах на других языках относительно просто: сортируемые таблицы. CodeIgniter отключает строки запроса по умолчанию, потому что ваши URL содержат параметры метода. Таким образом, URL может выглядеть так:
/controller/method/param1/param2
Вы можете подумать, что вы можете просто добавить в sortBy
а также sortOrder
как два дополнительных параметра к методу контроллера. Я не особо хочу этого делать, в основном потому, что хочу иметь контроллер многократного использования. Когда вы используете параметры строки запроса, PHP может легко сказать, есть ли параметр с именем sortBy
, Тем не менее, когда вы используете параметры на основе URL, они будут отличаться в зависимости от каждого контроллера.
Мне было интересно, каковы были мои варианты. Насколько я вижу, они что-то вроде:
- Пройти в мой
sortBy
а такжеsortOrder
параметры, просто смирись с этим, и разработай для него какой-то не пригодный для повторного использования компонент. - Есть дополнительный контроллер, который будет хранить
sortBy
а такжеsortOrder
в сеансе (хотя он должен знать, откуда вы пришли, и отправить вас обратно на исходную страницу). - Имейте некоторую функцию AJAX, которая вызовет контроллер выше; затем перезагрузите страницу.
- Взломайте CodeIgniter, чтобы снова включить строки запроса. На самом деле, если это единственный вариант, любые ссылки на то, как это сделать, приветствуются.
Я просто не могу поверить, что такая простая задача создаст такую проблему! Я что-то пропустил? У кого-нибудь есть рекомендации?
Отредактируйте для уточнения: я люблю jQuery, и я уже использую его на сайте, поэтому TableSorter - хороший вариант. Тем не менее, я хотел бы выполнить сортировку на стороне сервера, так как есть несколько страниц с потенциально большим количеством результатов, включая нумерацию страниц.
5 ответов
Я использовал этот метод: http://codeigniter.com/forums/viewthread/45709/
Я также расширил его, чтобы установить файлы cookie на основе сортировки, поэтому, когда кто-то возвращается, таблица сортируется так же, как и раньше.
Если вы согласны с сортировкой на стороне клиента, плагин Tablesorter для jQuery очень хорош.
Я использую это: 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/
Я столкнулся с этим с довольно сложной таблицей. Сложность заключалась в том, что таблица могла увеличиваться / уменьшаться в зависимости от определенных переменных!! Большая боль:(
Вот как я справился с этим..
Скорректирован 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 был таким:
/ Контроллер / Сортировщик / ColumnName, 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
}
Таким образом, вам даже не нужна отдельная функция - и вы можете использовать третий сегмент для определения вашей сортировки.
Недавно я добавил этот сортировщик таблиц (который использует Prototype) на несколько моих страниц. Это быстро и довольно легко реализовать.