Laravel 5.2.42.
Сделал так: создал свой класс пагинации на основе \Illuminate\Pagination\LengthAwarePaginator и в ней изменил public function url($page) под себя.
<?php
use Illuminate\Pagination\LengthAwarePaginator;
namespace App\Models;
class Paginator extends \Illuminate\Pagination\LengthAwarePaginator
{
public function url($page)
{
if ($page <= 0) {
$page = 1;
}
return
$this->pageName
.$page
.$this->buildFragment();
}
}
А так же в контроллере беру данные о странице и из них строю запросы, а потом передаю в пагинатор, который и создаёт ссылки.
public function index(Post $postModel, Request $request, $page=1){ // если нет данных о странице, то по-умолчанию - первая
$perpage = 2; // новостей на страницу
$total = DB::table('posts')->where('published', '=', '1')->count(); // кол-во новостей
if($page > ceil($total/$perpage)) return redirect()->route('posts'); // если страница больше чем последняя, то редиректим
$posts = DB::table('posts')
->select('posts.*','users.name as author',DB::raw('GROUP_CONCAT(tags.tag) as tags'))
->leftjoin('post_tag', 'post_tag.post_id', '=', 'posts.id')
->leftjoin('tags', 'tags.id', '=', 'post_tag.tag_id')
->leftJoin('users', 'users.id', '=', 'user_id')
->where('published', '=', '1')
->groupBy('posts.id')
->orderBy('published_at', 'desc')->skip(($page-1)*2)->take(2)->get(); // посты с тегами и авторами
if(strpos($request->getPathInfo(),'blog/page')) $pageName=''; else $pageName='blog/page/'; // если не на главной, то не надо добавлять 'blog/page/'
$posts=new Paginator($posts, $total, $perpage, $page, ['path'=>'path','pageName'=>$pageName]);
В итоге у меня получилось что на главной всегда первая страница, а при переходе на другую адрес уже становится site.ru/blog/page/2. Можно убрать blog/ и тогда получится просто site.ru/page/1
По-хорошему может даже надо разделить контроллеры со страницами и бе3. В планах ещё изучить render() и сделать свой. Может я не совсем правильно делаю, но пока только учусь...
Laravel 5.2.42. Сделал так: создал свой класс пагинации на основе \Illuminate\Pagination\LengthAwarePaginator и в ней изменил public function url($page) под себя.
А так же в контроллере беру данные о странице и из них строю запросы, а потом передаю в пагинатор, который и создаёт ссылки.
Ну и во вьюхе:
Роуты:
В итоге у меня получилось что на главной всегда первая страница, а при переходе на другую адрес уже становится site.ru/blog/page/2. Можно убрать blog/ и тогда получится просто site.ru/page/1 По-хорошему может даже надо разделить контроллеры со страницами и бе3. В планах ещё изучить render() и сделать свой. Может я не совсем правильно делаю, но пока только учусь...