devellopah
@devellopah

Как сделать такую расширенную пагинацию в yii2?

Доброго времени суток. Есть такая пагинация(это вёрстка портала, которую нужно посадить на yii2).
В самом портале, когда добавил пагинацию получил следующий вид
5e49bb1408a56264069150.jpeg

То, что отдал фреймворк по дефолту - не совсем то, что нужно. Картинка ниже показывает желаемый результат.
5e4aac19bf84b493944684.jpeg
  • Вопрос задан
  • 660 просмотров
Решения вопроса 2
myks92
@myks92 Куратор тега Yii
Нашёл решение — пометь вопрос ответом!
Очень просто. Измените дефолтные настройки в DI контейнере этого класса.

1. С использованием DI Контейнера
<?php

declare(strict_types=1);

namespace frontend\bootstrap;

use Yii;
use yii\base\BootstrapInterface;
use yii\di\Container;
use yii\widgets\LinkPager;

/**
 * @author Maxim Vorozhtsov <myks1992@mail.ru>
 */
class Bootstrap implements BootstrapInterface
{
    /**
     * @inheritDoc
     */
    public function bootstrap($app)
    {
        /** @var Container $container */
        $container = Yii::$container;

        $container->set(LinkPager::class, [
            'prevPageLabel' => false,
            'nextPageLabel' => false,
            'maxButtonCount' => 3,
        ]);
    }
}

Так же DI можно настаивать в config. Я обычно настраиваю там, но кто-то создает такой bootstrap файл. Тут уж выбирайте сами. Я выбираю config. Вот пример:
'container' => [
        'singletons' => [
            CheckAccessInterface::class => yii\rbac\DbManager::class,
            IdentityInterface::class => function () {
                return Yii::$app->user->getIdentity();
            },
        ],
    ],

Но для понимания оформил в bootstrap. Чтобы работало не забудьте поместить этот класс в секцию Bootstrap config фала:
'bootstrap' => [
        frontend\bootstrap\Bootstrap::class
    ],


2. C созданием класса, наследованный от базового
<?php

declare(strict_types=1);

namespace frontend\widgets;

class LinkPager extends \yii\widgets\LinkPager
{
    public $prevPageLabel = false;
    public $nextPageLabel = false;
    public $maxButtonCount = 3;
}


И используйте как обычно. Если нужно заменить в DataProvider используйте DI контейнер. Либо подмените класс на свой:
Yii::$container->set('yii\widgets\LinkPager',  'frontend\widgets\LinkPager');
Ответ написан
@smigles
Ссылки на первую и последнюю страницу настраиваются через firstPageLabel и lastPageLabel. Ссылки на предыдущую и следующую страницу — через prevPageLabel и nextPageLabel. Количество постраничных кнопок — через maxButtonCount. Документация.

Пример из представления:
echo LinkPager::widget([
    'pagination' => $pagination,
    'maxButtonCount' => 7,
    'firstPageLabel' => 'Начало',
    'lastPageLabel' => 'Конец',
]);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы