Настройка пагинации Laravel 5

В Laravel 5 я использую simplePagination, как описано в документах. Я хотел бы настроить вывод, чтобы вместо двойных шевронов «>>» я мог поставить стрелку вправо. Однако я не вижу нигде, чтобы настроить его.

Кто-нибудь знает, где документация для этого? Или с чего начать искать?


person mattl    schedule 04.04.2015    source источник
comment
Я не могу сказать, есть ли второй ответ на вопрос SO может помочь, в нем упоминается перезапись текста предыдущей/следующей ссылки по умолчанию с помощью пользовательского текста.   -  person SaschaM78    schedule 04.04.2015
comment
да выглядит близко - но я думаю, что это для L4. Не вижу ничего подобного для L5.   -  person mattl    schedule 04.04.2015


Ответы (1)


Хотя это недокументировано, это, безусловно, возможно. Это почти то же самое, что и для Laravel 4. В основном все, что вам нужно, это создать собственный презентер и обернуть экземпляр paginator.

Вот как может выглядеть ведущий:

use Illuminate\Contracts\Pagination\Paginator;
use Illuminate\Contracts\Pagination\Presenter;
use Illuminate\Pagination\BootstrapThreeNextPreviousButtonRendererTrait;
use Illuminate\Pagination\UrlWindow;
use Illuminate\Pagination\UrlWindowPresenterTrait;

class CustomPresenter implements Presenter
{
    use BootstrapThreeNextPreviousButtonRendererTrait, UrlWindowPresenterTrait;

    private $paginator;

    private $window;

    public function __construct(Paginator $paginator, UrlWindow $window = null)
    {
        $this->paginator = $paginator;
        $this->window = is_null($window) ? UrlWindow::make($paginator) : $window->get();
    }

    public function render()
    {
        if ($this->hasPages()) {
            return sprintf(
                '<ul class="pagination">%s %s %s</ul>',
                $this->getPreviousButton("Previous"),
                $this->getLinks(),
                $this->getNextButton("Next")
            );
        }

        return null;
    }

    public function hasPages()
    {
        return $this->paginator->hasPages() && count($this->paginator->items() !== 0);
    }

    protected function getDisabledTextWrapper($text)
    {
        return '<li class="disabled"><span>'.$text.'</span></li>';
    }

    protected function getActivePageWrapper($text)
    {
        return '<li class="active"><span>'.$text.'</span></li>';
    }

    protected function getDots()
    {
        return $this->getDisabledTextWrapper("...");
    }

    protected function currentPage()
    {
        return $this->paginator->currentPage();
    }

    protected function lastPage()
    {
        return $this->paginator->lastPage();
    }

    protected function getAvailablePageWrapper($url, $page, $rel = null)
    {
        $rel = is_null($rel) ? '' : ' rel="'.$rel.'"';

        return '<li><a href="'.htmlentities($url).'"'.$rel.'>'.$page.'</a></li>';
    }
}

Затем с вашего контроллера:

    public function index()
    {
        $users = User::paginate(5);
        $presenter = new CustomPresenter($users);

        return view("home.index")->with(compact('users', 'presenter'));
    }

Вид:

@foreach ($users as $user)
    <div>{{ $user->email }}</div>
@endforeach
{!! $presenter->render() !!}
person kajetons    schedule 05.04.2015
comment
Спасибо. Скоро займусь этим. С Пасхой. - person mattl; 05.04.2015
comment
Спасибо - следуя вашему совету, я сделал свою собственную версию SimpleBootstrapThreePresenter.php. Что потребовало редактирования только двух строк. Но спасибо, что заставил меня начать. - person mattl; 05.04.2015