我有一个产品目录,可以通过几个不同的选择和复选框元素进行过滤。过滤器操作SearchController通过 ajax 发布到用户过滤器时,结果会立即显示。搜索词/变量不会附加到 URL。我遇到了分页问题,因为默认的 Laravel 分页会重新加载页面,因此会丢失用户已经过滤的内容。我将分页更改为使用 ajax 以试图迅速解决问题。我的问题是 ajax 分页重新运行SearchController以使集合抵消结果。然后再次重置搜索条件,因为过滤器没有与分页 ajax 一起发布。我想在通过我的分页 ajax 调用时抵消原始集合。这个结果集是否存在并被重用?public function filter(Request $request, Stock $Stock){ // Enable query log DB::enableQueryLog(); $Stock = $Stock->newQuery(); if($request->has('model')) { $the_model = $request->model; $request->request->add([$the_model => 1]); } if ($request->has('car') && $request->input('car') == 'true') { $Stock->orWhere('car', 1); } if ($request->has('bike') && $request->input('bike') == 'true') { $Stock->orWhere('bike', 1); } if ($request->has('productTypes_chosen')) { $Stock->whereIn('productType', $request->productTypes_chosen); } if ($request->has('manufacturers_chosen')) { $Stock->whereIn('manufacturer', $request->manufacturers_chosen); } $Stock->where('show_website', 1); $stockItems = $Stock->get(); $stockItems = $Stock->paginate(15); if($request->ajax()) { $view = view('partials.filtered-results')->with(compact('stockItems')); $view = $view->render(); return $view; }}分页 AJAX$(function() { $('body').on('click', '.pagination a', function(e) { e.preventDefault(); var url = $(this).attr('href'); getStock(url); window.history.pushState("", "", url); }); function getStock(url) { $.ajax({ url : url }).done(function (data) { $('.machines').html(data); $('html, body').animate({ scrollTop: $('.machines').offset().top - 150 }, 'slow'); }).fail(function () { alert('Stocklist could not be loaded.'); }); }});
1 回答
慕妹3146593
TA贡献1820条经验 获得超9个赞
我相信要解决您的问题,您需要使用以下方法:
use Illuminate\Pagination\Paginator;
public function filter(Request $request, Stock $Stock)
{
// Your filters here
$page = $request->has('page') ?? 1;
$limit = $request->has('limit') ?? 15;
Paginator::currentPageResolver(function () use ($page) {
return $page;
});
$stockItems = $Stock->paginate($limit);
}
- 1 回答
- 0 关注
- 105 浏览
添加回答
举报
0/150
提交
取消