У меня есть каталог товаров, который можно отфильтровать с помощью нескольких различных элементов select и checkbox. Действия фильтра отправляются на 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.');
});
}
});