Fel*_*ime 8 php ajax jquery pagination laravel
在我的网站上,用户可以发布"状态",其他用户可以回复/评论这些状态.例如,在我网站的首页上,我显示了过去3天内最受欢迎的状态.
在我的HomeController.php中:
$statuses = Status::where('is_image', 1)
->where('is_mature', 0)
->where('created_at', '>=', Carbon::now()->subHours(168))
->orderBy('like_count', 'desc')
->take(6)
->get();
Run Code Online (Sandbox Code Playgroud)
状态也可以有回复.回复使用与状态表相同的表.回复几乎只是具有"父"状态的状态,而常规状态只是没有"父"的状态.
从模型status.php:
public function scopeNotReply($query) {
return $query->whereNull('parent_id');
}
public function replies() {
return $this->hasMany('CommendMe\Models\Status', 'parent_id');
}
Run Code Online (Sandbox Code Playgroud)
回到我的主页,这里是如何在主页上加载状态:
home.blade.php:
@if ($statuses->count())
@foreach ($statuses as $status)
<div class="post-container">
...
blah blah blah
...
@foreach ($status->replies->reverse()->slice(0, 3) as $reply)
<div class="status-reply-content">
...
blah blah blah
...
</div>
@endforeach
@if (count($status->replies) > 3)
<a href="#">
View More Comments ({{ count($status->replies) }})
</a>
@endif
</div>
@endforeach
@endif
Run Code Online (Sandbox Code Playgroud)
我想要的是"查看更多评论"按钮加载另一组3条评论.
如果将它们分页,这将很简单.事实上,在我网站的其他地方,我通过ajax加载更多图像.像这样:
if($request->ajax()) {
return [
'images' => view('browse.partials.fullview_partial')->with('images', $images->appends(request()->only('query')))->render(),
'next_page' => $images->nextPageUrl()
];
}
Run Code Online (Sandbox Code Playgroud)
然而,这依赖于通过ajax加载下一组分页.而这种$status->replies关系并没有分页.
那么如何在这种情况下加载更多回复呢?
编辑:
即使是替代解决方案也会有所帮
你需要加载服务器端的第一页回复吗?我想因为你愿意用AJAX加载后续页面,你可以只处理所有客户端,只需要一个提供数据的AJAX端点.
只需对端点进行ajax调用,即可传递状态ID和页码.
// AjaxController
public function replies()
{
$status = Status::findOrFail(request('id'));
return $status->replies()->paginate(3);
}
Run Code Online (Sandbox Code Playgroud)
(页码将自动解析.)
这将返回分页器的JSON表示,其具有前一页和下一页的URL以及当前页的数据.然后只渲染数据客户端.
我最终所做的只是在控制器中为请求本身创建一个新函数,然后发送状态 ID 以及跳过计数(根据已加载的回复数量而增加)以跳过加载的回复。
public function getReplies($statusID, $skip, Request $request) {
$status = Status::findOrFail($statusID);
$replies = $status->replies()->orderBy('created_at', 'desc')->skip($skip)->take(10)->get();
if($request->ajax()) {
return [
'replies' => view('templates.partials.replies')->with('replies', $replies)->render(),
];
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
741 次 |
| 最近记录: |