【问题标题】:Laravel ajax pagination with original collectionLaravel ajax 分页与原始集合
【发布时间】:2020-04-25 23:26:27
【问题描述】:

我有一个产品目录,可以通过几个不同的选择和复选框元素进行过滤。过滤器操作通过 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.');
        });
    }
});

【问题讨论】:

  • 你用的是什么版本的laravel?
  • @KayoBruno laravel 6.0

标签: php ajax laravel laravel-5 pagination


【解决方案1】:

我相信要解决您的问题,您需要使用这个:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 2017-02-28
    • 2013-02-20
    • 2015-06-06
    • 2021-12-13
    • 2019-05-15
    • 2017-10-04
    相关资源
    最近更新 更多