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

    myks92
    @myks92 Куратор тега Yii
    Islam Ibakaev,
    картинки появляются чуть позже, когда загрузятся.
    вот поэтому и путаница получилась)

    в-общем, я пришёл к такому варианту, теперь осталось понять куда это положить, чтобы применить глобально


    Вот сюда:
    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, [
               'maxButtonCount' => 3,
      'prevPageLabel' => Html::img($app->urlManager->createUrl('img/svg/icon-chevrons-left-gray.svg'), ['alt' => 'назад']),
      'nextPageLabel' => Html::img($app->urlManager->createUrl('img/svg/icon-chevrons-right-gray.svg'), ['alt' => 'вперёд']),
      'firstPageLabel' => Html::img($app->urlManager->createUrl('img/svg/icon-skip-back-gray.svg'), ['alt' => 'начало']),
      'lastPageLabel' => Html::img($app->urlManager->createUrl('img/svg/icon-skip-forward-gray.svg'), ['alt' => 'конец']),
    
            ]);
        }
    }


    в web-fonfig.php
    'bootstrap' => [
            frontend\bootstrap\Bootstrap::class
        ],
  • Как сделать такую расширенную пагинацию в yii2?

    myks92
    @myks92 Куратор тега Yii
    Islam Ibakaev, в принципе вообще можно было не разводить эту дискуссию) Такие простые вопросы так долго не обсуждаются. Достаточно было просто посмотреть какие публичные свойства есть и их заменить. В самой документации написано какое публичное свойство что изменяет. Но я Вам дал готовое решение. Заодно показал, как это можно настаивать. Вопрос популярный, поэтому пусть будет. Главное, чтобы у Вас было понимание и, думаю, оно есть! Не за что!)
  • Как сделать такую расширенную пагинацию в yii2?

    myks92
    @myks92 Куратор тега Yii
    smigles, странно. У меня на телефоне эти иконки не появляются.
  • Как сделать такую расширенную пагинацию в yii2?

    myks92
    @myks92 Куратор тега Yii
    Пример из представления:
    echo LinkPager::widget([
        'pagination' => $pagination,
        'maxButtonCount' => 7,
        'firstPageLabel' => 'Начало',
        'lastPageLabel' => 'Конец',
    ]);
    Стесняюсь спросить чем Ваш ответ отличается от моего?)) Кроме того пример ещё и дали не правильный. В ответе вроде бы поняли, что и как, но толку не хватило оформить правильно или как?))

    Вот что просит автор по вашему ответу:
    echo LinkPager::widget([
      'prevPageLabel' => false,
      'nextPageLabel' => false,
       'maxButtonCount' => 3,
    ]);

    Но а теперь главное. Что вы будете делать если используете этот LinkPager на нескольких страницах? И как вы его будете менять, если используете DataProvider?
  • Как сделать такую расширенную пагинацию в yii2?

    myks92
    @myks92 Куратор тега Yii
    smigles, не знаю что у вас там не работало. Посмотрите как работает расчёт количества кнопок и, возможно, поймёте что Вы не так делали. Может использовали не тот LinkPager который применили в DI. Всего я знать не могу. Я вижу, что в исходном коде это никак не должно влиять. Он не изменят данное число, даже если передавать свой Paginator.
  • Как сделать такую расширенную пагинацию в yii2?

    myks92
    @myks92 Куратор тега Yii
    Islam Ibakaev, smigles да. Что-то я Вас ночью попутал!) Islam Ibakaev, хорошо. Раз уж я Вас спутал Вот два примера:

    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:
    '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');
  • Как сделать такую расширенную пагинацию в yii2?

    myks92
    @myks92 Куратор тега Yii
    smigles,

    1. Это вы не правильно вопрос ставите и поняли меня. Задавайте вопросы развёрнуто. Вроде бы не первый день на тостере и не знаете, что хорошо заданный вопрос - пол ответа. Я Вас правильно понял. Любое изменение пагинации связано с этим файлом. Я вам скинул не готовое решение, а документацию этого класса. Настраивайте под себя.

    2. DI это один из способов. Вы сейчас меня обвиняете в своей неполноте вопроса. Откуда мне знать как вы будете использовать. Если у вас теряется что-то в конструкторе - это значит вы не умеете пользоваться DI. Классы для работы с DI нужно создавать не через new (), а через Yii:createObject([...]). Тогда DI подтянет все зависимости.

    Вы так же можете создать свой класс App\LinkPager::class наследованный от базового, в нем заменить необходимые настройки и у вас так же будет работать. Это тоже хорошая практика.

    Ещё раз повторяюсь. Я вам показал где это настраивается, а уж как и где это вы будете настраивать вопрос другой. Можете хоть на каждой странице передавать параметры.
  • Правильно ли я сделал на yii2 (Code review)?

    myks92
    @myks92 Куратор тега Yii
    Дмитрий, ладно. Не буду мучать автора) Выложил готовое
  • Правильно ли я сделал на yii2 (Code review)?

    myks92
    @myks92 Куратор тега Yii
    Дмитрий, ничего)) Пусть не думает, что программирование это легко)
  • Какие способы формирования запросов к БД в Yii2 лучше?

    myks92
    @myks92 Куратор тега Yii
    Максим Тимофеев,
    Нет. Обход ORM это не то что не хороший ход, это совершенно неправильный ход.

    Почему он не правильный? Наоборот. Обход ORM при чтении Данных очень даже хорошо, я считаю. Объяснимо это даже тем, что сущность не нуждается в лишних связях. Связи в сущности нужны только для её модифицирования. Весь код (в том числе репозитории) разделяется на чтение и и модифицирование. Например, вам нужно составить сложную выборку из 5 таблиц. Если использовать связи AR это будет ужас. И, если AR ещё как-то быстро это делает, то Doctrine тяжелей. Можете и ORM использовать. Никто не запрещает. Нужно понимать плюсы и минусы обоих подходов.

    По мимо этого вы ещё следуете паттерну CQRS и SOLID. Разделение кода на чтение и изменение (по своим ответственностям). А если уж совсем большая система, то для чтения данных можно подготавливать выводя их в свою (no sql) базу данных. И как там применить нашу ORM?) На эту тему есть хорошая статья пошаговой разборки этого подхода, правда не на php, но суть понятна.

    Производительность надо поднимать за счет кеширования, индексов, Master-Slave репликации и т.д.

    Я считаю кэш - это последнее дело Для оптимизации. Так как при возникновении проблем с кэшем или удалении всех данных у вас сайт может рухнуть. Для работы с кэшем надо хорошо понимать как он устроен. Прогревать данные в кэше и так далее. Для большинства проектов на YII до кэша и не дойдёт, если применить все другие способы. Есть люди, у которых по 180 запросов в базу и они думают как их оптимизировать и прибегают к кэшу.

    Если проект маленкий, то да. Но в крупном проекте, рушить MCV потому что лень гуглить InnerJoin - так себе затея.

    Все наоборот. Если проект большой как раз таки одной MVC не обойтись. Там уже CQRS и асинхронные команды. Опять же статья выше.

    twig в yii отвратителен, да и поддержка IDE нулячая (речь только о связке twig-yii2).

    С этим соглашусь. Yii2 в целом для новых проектов заброшен. Поэтому мало что для него развивается. Но вот у symfony поддерживается twig
  • Как настроить рендер при входе через соцсети dektrium/yii2-user?

    myks92
    @myks92 Куратор тега Yii
    Александр Вербицкий, тогда уж лучше потратить время на изучения, чем разбираться в устаревшем коде и костылить. В итоге придёт время и все равно придётся переделывать)

    Для YII есть курсы Дмитрия Елисеева. Изучайте)
  • Как настроить рендер при входе через соцсети dektrium/yii2-user?

    myks92
    @myks92 Куратор тега Yii
    Александр Вербицкий, в этом модуле сделан вход через ajax. Поэтому страницу и не перезагружает. Можно тогда сделать на js принидительный refresh.

    Но это все такие костыли. Почему не хотите один раз написать под свои нужны эту часть сайта. Не такая уж и проблема. Он написан не плохо по тем временам, но уже устарел и не поддерживается.

    Я бы не стал использовать такую важную часть с устаревшей библиотеки
  • Yii2 навигация по сайту Bootstrap?

    myks92
    @myks92 Куратор тега Yii
    cr1gger, виджет тут особо не причём. Посмотрите через инспектор какие классы там есть и настройте стили css так, как вам нужно. Виджет не занимается стилями.
  • Как правильно прописать такую проверку в Yii2?

    myks92
    @myks92 Куратор тега Yii
    lilwings, правильное использование есть в документации
  • Как правильно прописать такую проверку в Yii2?

    myks92
    @myks92 Куратор тега Yii
    Не понятно что вы хотите
  • Как получить вложенные данные Yii2?

    myks92
    @myks92 Куратор тега Yii
    German Jet, это относится в принципе ко многому в хороших в проектах. На симфони, с использованием Doctrine, такая же история. Поэтому, лучше всего изменять данные через AR, а читать через QB. Недавно отвечал на подобный вопрос Какие способы формирования запросов к БД в Yii2 лучше?
  • Принцип DIP из SOLID и Autowiring из DI-контейнеров?

    myks92
    @myks92 Куратор тега PHP
    7876010, вам просто нужно прочитать, а не задавать кучу вопросов) Вы на правильном пути. Только немного вдумчивости, спокойствия и внимательности)
  • Принцип DIP из SOLID и Autowiring из DI-контейнеров?

    myks92
    @myks92 Куратор тега PHP
    7876010, я вам тут не опишу лучше, чем в документации. Скинул выше вам ссылки на симфони и yii2. Там можно понять.

    вам особо не нужно знать как внутри это все работает. Сейчас главное понимать что нужно сделать для того, чтобы это работало как нужно. А если хотите углубиться будете изучать.

    Вы же не знаете как там компьютер выстраивает все процессы. Вы просто тыкаете по клавишам и происходят определенные действия. Так же и тут. Вы просто выставляете зависимости в DI, а уже как он их определяет особо не важно сейчас для вас.
  • Принцип DIP из SOLID и Autowiring из DI-контейнеров?

    myks92
    @myks92 Куратор тега PHP
    7876010, в вашем примере public function log(LoggerInterface $logger) { }
    Типом является LoggerInterface