在做开发时,一个常见任务就是显示上一条文章以及下一条文章的链接。在查看某篇文章或博客时,显示上一条和下一条,方便用户阅读。
在PHP的其它框架中取得上下文章中,使用类似如下代码:
public function get_previous_article_by_id($post_id)
{
$result = $this->fetch_row('article', 'id = (SELECT MAX(id) FROM aws_article WHERE id < '.$post_id.')');
unset($result['message']);
return $result;
}
public function get_next_article_by_id($post_id)
{
$result = $this->fetch_row('article', 'id = (SELECT MIN(id) FROM '.'aws_article'.' WHERE id > '.$post_id.')');
unset($result['message']);
return $result;
}
本文讨论如何在Laravel框架中编写。
从数据库中获取一条记录:
$post = Post::where('slug', $slug)->firstOrFail();
现在我们获取到了数据库记录。然后获取当前文章的上一条记录,即记录中id小于当前顺序存储id的降序排列,然后使用first()取回单条记录,也可以使用select()限制返回的数据。
$previous = Post::where('id', '<', $post->id)->orderBy('id','desc')->first();
获取完毕后,可以调用其属性显示。如下代码:
//id
$previous->id
//title
$previous->title
获取下一条记录,和获取上一条记录很像。如下代码:
$next = Post::where('id', '>', $post->id)->orderBy('id')->first();
然后将$previous和$next传递给view视图。注意,在视图中显示时,要检查两个对象是否存在。如下代码示例:
从数据库中获取一条记录:
$post = Post::where('slug', $slug)->firstOrFail();
现在我们获取到了数据库记录。然后获取当前文章的上一条记录,即记录中id小于当前顺序存储id的降序排列,然后使用first()取回单条记录,也可以使用select()限制返回的数据。
$previous = Post::where('id', '<', $post->id)->orderBy('id','desc')->first();
获取后,可以调用其属性显示,如:
//id
$previous->id
//title
$previous->title
获取下一条记录,和获取上一条记录很像:
$next = Post::where('id', '>', $post->id)->orderBy('id')->first();
然后将$previous和$next传递给view视图。注意,在视图中显示时,要检查两个对象是否存在。如下代码示例:
@if(isset($next_posts->slug))
<a href="/article/{{$next_posts->slug}}" class="next" style="font-size: 14px;">上一篇<i class="las la-chevron-circle-left"></i> {!! str_limit($next_posts->title,40) !!}</a>
@else
<a href="javascript:void(0)" class="next" style="font-size: 14px;">上一篇<i class="las la-chevron-circle-left"></i> 没有了</a>
@endif
@if(isset($previous_posts->slug))
<a href="/article/{{$previous_posts->slug}}" class="prev" style="font-size: 14px;float: right;">下一篇<i class="las la-chevron-circle-right"></i> {!! str_limit($previous_posts->title,40) !!}</a>
@else
<a href="javascript:void(0)" class="next" style="font-size: 14px;">上一篇<i class="las la-chevron-circle-left"></i> 没有了</a>
@endif
本文为 @ 21CTO 创作并授权 21CTO 发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。