Laravel PHP: дополнительные страницы разбиения на страницы результатов не могут быть получены должным образом

0

Я работаю над приложением Laravel PHP, где на домашней странице пользователь выбирает определенную категорию, и результаты возвращаются после того, как пользователь делает свой выбор. В настоящий момент результаты возвращаются правильно, за исключением одной проблемы, если есть несколько страниц результатов.

Например, допустим, что у меня есть 15 записей, относящихся к категории 1. Прямо сейчас у меня установлена разбивка на страницы, чтобы на странице отображалось 10 результатов. Таким образом, эти 15 записей должны отображаться следующим образом: Страница 1 содержит 10 записей и содержит 5 записей. Однако проблема заключается в том, что на странице 1 отображаются первые 10 записей для выбранной категории, но при выборе Page 2 она отображает ВСЕ дополнительные записи, а не только оставшиеся 5 записей, относящихся к категории 1.

контроллер:

 <!-- Form -->

 {{Form::model(array('method' => 'GET', 'route' => 'overview_select', 'files' => true)) }}    

 <div class="form-group">
 {{ Form::label('category', 'Category:') }}
 {{ Form::select('category', array('category1' => 'Category1', 'category2' => 'Category2', 'category3' => 'Category3', 'category4' => 'Category4'), (isset($category) ? $category : 'category')) }}

 <div class="form-group">
 {{ Form::submit('Select Category', array('class' => 'btn btn-primary')) }}
 </div>

 {{ Form::close() }}

 </div>

   public function index()
{
    $vdo = Video::query();
    $pic = Picture::query();
    if($category = Input::get('category')){
        $vdo->where('category', $category);
        $pic->where('category', $category);
    }

    $allvids = $vdo->paginate(10);
    $allpics = $pic->paginate(10);
    $data = compact('allvids','allpics');
    $data['category'] = Input::get('category');
    $this->layout->content = \View::make('home.pics_vids_overview',$data);
}

Посмотреть:

<div class="panel-body">
            @if ($allvids->count())
                <dl class="dl-horizontal">
                    <!-- Add this div class to make the table responsive -->
                    <div class = "table-responsive">
                        <table class="table">
                            <b>Results: </b>{{ $allvids->count() }}<br>
                            <tr>
                                <th>ID</th>
                                <th>Name</th>
                                <th>Description</th>
                                <th>Corner</th>
                                <th>Rock</th>
                                <th>Category</th>
                                <th>Project</th>
                                <th>Update Video</th>
                            </tr>        
                    @foreach($allvids as $video)
                    <tr>
                         <td>{{ $video->video_id }}</b></td>
                         <td>{{ $video->video_name }}</td>
                         <td>{{ $video->video_description }}</td>
                         <td>{{ $video->video_corners }} </td>
                         <td>{{ $video->video_rocks }}</td>
                         <td>{{ $video->category }}</td>
                         <td>{{ $video->video_project }}</td>

                         <td><b>{{ link_to_route("show_video", 'Edit', array($video->video_id)) }}</b></td>
                    </tr>     
                    @endforeach
                    {{ $allvids-> links()}}
                        </table>
                    </div>    


                </dl>
            @else
                <b>{{ 'No Videos in this category.' }}</b>
            @endif
        </div>

routes.php

Route::post('pics_vids', array('as'=>'overview_select', 'uses' => 'OverviewController@index'));

Route::get('pics_vids', array('as'=>'overview', 'uses' => 'OverviewController@index'));

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

Теги:
laravel-4

1 ответ

1
Лучший ответ

Я считаю, что проблема заключается в том, что вы извлекаете разбивку на страницы по категориям. Лучше использовать метод GET для получения результатов листинга, потому что использование метода POST для разбивки на страницы может вызвать предупреждение о повторной отправке формы в некоторых браузерах, когда пользователи нажимают кнопку "Назад".

Теперь, причина, по которой вы получаете все продукты на странице 2,

   if($category = Input::get('category')){
    $vdo->where('category', $category);
    $pic->where('category', $category);
}

Здесь, когда нажата вторая ссылка, запрос больше не отправляется, поэтому метод Input :: get() пуст. Измените маршрутизацию так, чтобы категория формировалась как часть URL-адреса, либо в форме строки запроса, либо в строке URI.

РЕДАКТИРОВАТЬ:

Я изменил форму в представлении от:

{{Form::model(array('method' => 'GET', 'route' => 'overview_select', 'files' => true)) }}    

чтобы:

{{Form::open(array('method' => 'GET', 'route' => 'overview_select', 'files' => true)) }}

Итак, теперь поле "категория" появится в URL после того, как пользователь сделает свой выбор.

По мнению, я изменил

{{ $allvids-> links()}}

чтобы:

{{ $allvids->appends(array('category' => $category))->links()}}

И теперь разбивка на страницы будет работать для дополнительных страниц.

Ссылка ниже помогла мне с моим решением, а также дает хорошее объяснение того, как методы GET/POST работают в формах для Laravel 4.

Разбиение страницы в Laravel 4 работает на одну страницу, но не работает для другого

  • 0
    У меня проблемы с реализацией твоего предложения. Когда вы говорите об изменении маршрутизации, вы имеете в виду мои фактические маршруты для моих страниц обзора в (rout.php) или как мои представления создаются в моем контроллере?
  • 0
    Одна вещь, которую я изменил в своем коде формы, я изменил «Form :: method (...)» на «Form :: open (...)», и теперь, когда я выбираю категорию, она фактически появляется в URL только для первая страница Теперь мне просто нужно выяснить, что будет отображаться в URL для дополнительных страниц.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню