Я загрузил стартовый комплект для laravel с помощью часового из GitHub.
Пока все в порядке. На странице блога есть разбиение на страницы. Я могу изменить количество элементов на странице, как мне нравится, изменив одно и то же значение pagination (x).
Теперь проблема в том, что я создал новую страницу вручную самостоятельно под названием «Поиск», которая отображает результаты поиска по ключевым словам.
Здесь я добавил ту же самую разбивку на страницы, что показывает количество элементов на странице, как указано, номера страниц, стрелки. Все идеально, но когда я нажимаю на странице 2, он показывает BLANK PAGE. Источник страницы пустой страницы также пуст. URL-адрес идеально подходит для второй страницы. Он генерирует правильно, как
sitename.dev/search?page=2
Пожалуйста, направляйте меня, где я ошибаюсь. Диалоговое окно страницы блога все еще работает нормально. Проблема возникает только во вновь созданных страницах страницы.
Это мой контроллер
public function postSearch() { $searchString = Input::get('searchInput'); $posts = Post::where('title', 'LIKE', '%' . $searchString . '%')->orderBy('created_at', 'DESC')->paginate(4); if($searchString){ return View::make('frontend/search', compact('posts'))->with('success', 'Account successfully updated')->with('posts', $posts); } else{ return Redirect::route('home')->with('error', 'Please enter Search Term'); } }
Это мой маршрут
Route::any('/search', 'BlogController@postSearch');
Прежде всего
return View::make('frontend/search', compact('posts'))->with('success', 'Account successfully updated')->with('posts', $posts);
При выполнении compact
вы уже включаете $posts
var, который будет использоваться как $posts
в представлении, точно так же, как вы использовали бы with('posts', $posts)
. Таким образом, это последнее можно удалить. Если вы хотите загрузить больше варов с помощью compact
просто разделите имена переменных запятыми.
Вы разбиваете страницы на элемент в действии POST
Search
, когда вы нажимаете какую-либо postSearch
на страницы или вызываете page=2
вы не используете метод postSearch
, вы, вероятно, вызываете getSearch
поскольку вы не делаете сейчас POST
запрос.
Посмотрите на контроллеры RESTful
Форма поиска лучше используется с использованием метода GET, потому что это упрощает закладку / сохранение URL-адреса для последующего использования. В Pagination Laravel 4 существует метод добавления строки запроса. Таким образом, мы можем сохранить поисковую последовательность на других страницах.
Документы: http://laravel.com/docs/pagination#appending-to-pagination-links
Мой код:
Форма поиска
<form method="get" action="{{{ URL::to('lib/search') }}}"> <input class="input-xxlarge" name="q" type="text" placeholder="Search..."> <div class="control-group"> <div class="controls"> <input type="submit" class="btn" id="submit" value="Submit" /> </div> </div>
маршрутизация
Route::get('lib/search', 'LibraryController@getSearch');
контроллер
public function getSearch() { $search = Input::get('q'); $posts = $this->post->where('title', 'like', '%'.$search.'%')->paginate(10); return View::make('site/libraries/list', compact('posts', 'search')); }
View / Blade В способе отображения разбивки на страницы:
{{ $posts->appends(array('q' => $search))->links() }}
Таким образом, мы можем сохранить q =? querystring на других страницах (например: / lib / search? page = 2 & q = apple)
Несколько вещей, чтобы проверить.
app/routes.php
. <?php echo $articles->links(); ?>
<?php echo $articles->links(); ?>
. В конечном итоге, похоже, происходит некоторая ошибка, поэтому страница выглядит пустой. Попытка превратить php-ошибки в ваш dev env и посмотреть, что произойдет после этого.
добавляет, решила мою проблему. Также использование добавок позволит нашим пользователям сохранять / заклавировать URL для будущего использования.
Но одна проблема заключается в том, что она не добавляет первую страницу результата.