Limit amount of links shown with Laravel pagination

前端 未结 11 2199
一个人的身影
一个人的身影 2020-12-14 02:10

Any easy way to limit how many links are shown with Laravels pagination?

Currently it shows 13 links at most (Prev, 1 2 3 4 5 7 8 .. 78 79 next)

This however

11条回答
  •  天命终不由人
    2020-12-14 02:33

    The old way of defining a custom presenter doesn't work with Laravel 5.3+, the number of links shown seems to be hard-coded in the $onEachSide parameter of Illuminate/Pagination/UrlWindow::make():

    public static function make(PaginatorContract $paginator, $onEachSide = 3)
    

    I ended up just writing my own render() function, stealing some code from LengthAwarePaginator

    /**
     * Stole come code from LengthAwarePaginator::render() and ::elements() to allow for a smaller UrlWindow
     *
     * @param LengthAwarePaginator $paginator
     * @param int $onEachSide
     * @return string
     */
    public static function render(LengthAwarePaginator $paginator, $onEachSide = 2)
    {
        $window = UrlWindow::make($paginator, $onEachSide);
    
        $elements = array_filter([
            $window['first'],
            is_array($window['slider']) ? '...' : null,
            $window['slider'],
            is_array($window['last']) ? '...' : null,
            $window['last'],
        ]);
    
        return LengthAwarePaginator::viewFactory()->make(LengthAwarePaginator::$defaultView, [
            'paginator' => $paginator,
            'elements' => $elements,
        ])->render();
    }
    

    }

    We use Twig, so I registered this as a Twig filter, I imagine something similar could be done for Blade.

提交回复
热议问题