Laravel - 在主页上显示一些帖子,然后 link 休息
Laravel - show few posts on homepage, then link to rest
我正在尝试在 Laravel 中创建简单的博客,但我被这个小细节卡住了。我有博客 post,想在主页上显示一些内容,并在路线 localhost/posts 上向其他人显示 link。
问题是我不知道如何为来自主页的分页 post 创建一个 link,所以分页从主页最后一个 post 结束的地方开始。
编辑:我希望用户能够点击路线 'posts' 并查看所有 post,甚至是主页
中的那些
例子
localhost/ - has first 3 posts
localhost/posts?page=2 - has the rest starting from 4th post
我已经试过了,但是没有用。
路线
Route::get('posts?page={page}', ['as' => 'rest', 'uses' => 'Controller@getRest']);
控制器有这个功能
public function getRest($page) {
Paginator::setCurrentPage($page);
$posts = Post::paginate(3);
return View::make('posts')->with('posts', $posts);
}
我尝试在主页 view 模板中创建 link,如下所示:
<a href="{{ URL::route('posts?page={page}', 2) }}">Show the rest of posts</a>
感谢您的帮助。
这应该有效。唯一的问题是,当用户在主页中单击 page 2
link 时,用户将看到 10 post 秒,从第 13 个开始,而不是第 3 个 post。虽然将 Controller::posts
中的 ->skip(3 + ($page - 1) * 10)
更改为 ->skip(3 + ($page - 2) * 10)
似乎可以解决问题,但 page 1
link 将失败。
路线
Route::get('/', [ 'as' => 'home', 'uses' => 'Controller@home' ]);
Route::get('posts', [ 'as' => 'posts', 'uses' => 'Controller@posts' ]);
控制器
class Controller extends BaseController {
public function home()
{
$posts = Post::take(3)->get();
$pagination = Paginator::make($posts->toArray(), Post::count(), 10);
$pagination->setBaseUrl(route('posts'));
return View::make('home', compact('posts', 'pagination'));
}
public function posts()
{
// Current page number (defaults to 1)
$page = Input::get('page', 1);
// Get 10 post according to page number, after the first 3
$posts = Post::skip(3 + ($page - 1) * 10)->take(10)->get();
// Create pagination
$pagination = Paginator::make($posts->toArray(), Post::count(), 10);
return View::make('posts', compact('posts', 'pagination'));
}
}
home.blade.php
@foreach ($posts as $post)
{{ $post->title }}
@endforeach
{{ $pagination->links() }}
我正在尝试在 Laravel 中创建简单的博客,但我被这个小细节卡住了。我有博客 post,想在主页上显示一些内容,并在路线 localhost/posts 上向其他人显示 link。
问题是我不知道如何为来自主页的分页 post 创建一个 link,所以分页从主页最后一个 post 结束的地方开始。
编辑:我希望用户能够点击路线 'posts' 并查看所有 post,甚至是主页
中的那些例子
localhost/ - has first 3 posts
localhost/posts?page=2 - has the rest starting from 4th post
我已经试过了,但是没有用。
路线
Route::get('posts?page={page}', ['as' => 'rest', 'uses' => 'Controller@getRest']);
控制器有这个功能
public function getRest($page) {
Paginator::setCurrentPage($page);
$posts = Post::paginate(3);
return View::make('posts')->with('posts', $posts);
}
我尝试在主页 view 模板中创建 link,如下所示:
<a href="{{ URL::route('posts?page={page}', 2) }}">Show the rest of posts</a>
感谢您的帮助。
这应该有效。唯一的问题是,当用户在主页中单击 page 2
link 时,用户将看到 10 post 秒,从第 13 个开始,而不是第 3 个 post。虽然将 Controller::posts
中的 ->skip(3 + ($page - 1) * 10)
更改为 ->skip(3 + ($page - 2) * 10)
似乎可以解决问题,但 page 1
link 将失败。
路线
Route::get('/', [ 'as' => 'home', 'uses' => 'Controller@home' ]);
Route::get('posts', [ 'as' => 'posts', 'uses' => 'Controller@posts' ]);
控制器
class Controller extends BaseController {
public function home()
{
$posts = Post::take(3)->get();
$pagination = Paginator::make($posts->toArray(), Post::count(), 10);
$pagination->setBaseUrl(route('posts'));
return View::make('home', compact('posts', 'pagination'));
}
public function posts()
{
// Current page number (defaults to 1)
$page = Input::get('page', 1);
// Get 10 post according to page number, after the first 3
$posts = Post::skip(3 + ($page - 1) * 10)->take(10)->get();
// Create pagination
$pagination = Paginator::make($posts->toArray(), Post::count(), 10);
return View::make('posts', compact('posts', 'pagination'));
}
}
home.blade.php
@foreach ($posts as $post)
{{ $post->title }}
@endforeach
{{ $pagination->links() }}