Laravel (3) Сортировка и фильтрация разбивки на страницы

У меня есть список всех «серверов» на моей «серверной» таблице, возвращенной на мой взгляд с разбивкой на страницы. Я изо всех сил пытался выяснить, как получить сортировку (по возможности, по возможности) и фильтрацию (поиск в результатах).

Вот мой код контроллера:

$servers = Server::paginate(5); return View::make('servers.list') ->with('game', '') ->with('servers', $servers); 

Вот мой код просмотра для сортировки:

 <ul class="nav"> <li class="active"><a href="#"><i class="icon-angle-down"></i>{{ Lang::line('servers.rank')->get() }}</a></li> <li><a href="#">{{ Lang::line('servers.date')->get() }}</a></li> <li><a href="#">{{ Lang::line('servers.language')->get() }}</a></li> <li><a href="#">{{ Lang::line('servers.uptime')->get() }}</a></li> <li>{{ HTML::link(URL::full() .'?sort=votes', Lang::line('servers.votes')->get()) }} </li> </ul> 

Я хотел бы, чтобы сортировка выполнялась с помощью простых привязных ссылок, а нажатие на «Голоса» или «Ранг» или «Дата» вернет данные с этой сортировкой. Нажатие на тот же сортировочный якорь, который выбран в данный момент, изменит направление сортировки.

У меня также есть куча параметров «фильтр», таких как категории и целые диапазоны, которые при применении будут «фильтровать» / искать в таблице и возвращать результаты с той же сортировкой, что и до фильтра.

Все ли это возможно с классом разбивки на страницы? Если не так, как я могу это сделать? Не совсем уверен, что лучший способ использования laravel.

Related of "Laravel (3) Сортировка и фильтрация разбивки на страницы"

Это легко сделать в laravel благодаря отличной разбивке на страницы и классу ввода. Попробуйте это в своих взглядах:

Пример просмотра

Очищенный вид

 <form action="" method="get" id="filter"> Show <select name="game_id"> <option value="">All</option> <?php foreach ($games as $game):?> <option value="<?=$game->id?>" <?=($game->id == Input::get('game_id')) ? 'selected="selected"' : null?>><?=$game->name?></option> <?php endforeach;?> </select> Show <select name="server_id"> <option value="">All</option> <?php foreach ($servers as $server):?> <option value="<?=$server->id?>" <?=($server->id == Input::get('server_id')) ? 'selected="selected"' : null?>><?=$server->name?></option> <?php endforeach;?> </select> <input type="submit" value="Filter" rel="filter"> </form> <hr> <?php if (count($servers) > 0):?> <?=$pagination?> <table> <tr> <th><a href="<?=URL::to('servers?sort=id'.$querystr)?>">ID</a></th> <th><a href="<?=URL::to('servers?sort=rank'.$querystr)?>">RANK</a></th> <th><a href="<?=URL::to('servers?sort=date'.$querystr)?>">DATE</a></th> <th><a href="<?=URL::to('servers?sort=language'.$querystr)?>">LANGUAGE</a></th> <th><a href="<?=URL::to('servers?sort=uptime'.$querystr)?>">UP TIME</a></th> <th><a href="<?=URL::to('servers?sort=votes'.$querystr)?>">VOTES</a></th> </tr> <tr> <td> ... </td> </tr> </table> <?=$pagination?> <?php else:?> <h2>No results found.</h2> <?php endif;?> 

Пример контроллера

 public function get_action() { // CACHE SORTING INPUTS $allowed = array('rank', 'date', 'language', 'uptime', 'votes'); // add allowable columns to search on $sort = in_array(Input::get('sort'), $allowed) ? Input::get('sort') : 'id'; // if user type in the url a column that doesnt exist app will default to id $order = Input::get('order') === 'asc' ? 'asc' : 'desc'; // default desc $servers = Server::order_by($sort, $order); // FILTERS $game = null; $server = null; if (Input::has('game_id')) { $servers = $servers->where('game_id', Input::get('game_id')); $game = '&game_id='.Input::get('game_id'); } if (Input::has('server_id')) { $servers = $servers->where('server_id', Input::get('server_id')); $server = '&server_id='.Input::get('server_id'); } // PAGINATION $servers = $servers->paginate(5); $pagination = $servers->appends( array( 'game_id' => Input::get('game_id'), 'server_id' => Input::get('server_id'), 'sort' => Input::get('sort'), 'order' => Input::get('order') ))->links(); return View::make(servers.list)->with( array( 'game' => null, 'servers' => $servers, 'pagination' => $pagination, 'querystr' => '&order='.(Input::get('order') == 'asc' || null ? 'desc' : 'asc').$game.$server )); }