簡體   English   中英

帶有原始集合的 Laravel ajax 分頁

[英]Laravel ajax pagination with original collection

我有一個產品目錄,可以通過幾個不同的選擇和復選框元素進行過濾。 過濾器操作通過 ajax 發布到SearchController ,以便在用戶過濾時立即顯示結果。 搜索詞/變量不會附加到 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.');
        });
    }
});

我相信要解決您的問題,您需要使用它:

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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM