Задать вопрос
  • Как сделать каждому checkbox свой input в Yii2?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Используйте "checkboxTemplate" - он тут больше к месту:
    $checkboxTemplate = "<div class=\"checkbox\">\n{beginLabel}\n{input}\n{labelTitle}\n{endLabel}\n{error}\n{hint}\n</div>"


    <?= $form->field($model, 'email', $checkboxTemplate)->textInput();?>


    www.yiiframework.com/doc-2.0/yii-bootstrap-activef...
    Ответ написан
    Комментировать
  • Как указать класс для конкретного td в GridView Yii2?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Меня возможно сейчас возненавидят многие программисты, но мне надоело уже слышать о том что
    GridView - плохой и не гибкий. Ну во первых, он наследует от других виджетов, и если не полениться, то можно найти несколько, так вот, мой пример кода, не идеальный, исключительно, как один из видов решения, чтобы вы понимали, что из него можно выжать.
    Пишем функцию в модель News():
    ...
    <?php 
        public function sklonen($n,$s1,$s2,$s3, $b = false){
            $m = $n % 10; $j = $n % 100;
            if($b) {$n = '<b>'.$n.'</b>';}
            if($m==0 || $m>=5 || ($j>=10 && $j<=20)) {return $n.' '.$s3;}
            if($m>=2 && $m<=4) {return  $n.' '.$s2;}
            return $n.' '.$s1;
        }
    ...


    В контроллере:

    ...
        public function actionNews()
        {
            $searchModel = new NewsSearch();
            $dataProvider = $searchModel->search(Yii::$app->request->queryParams); // ищешь через LIKE
            return $this->render('news', [
                'searchModel' => $searchModel,
                'dataProvider' => $dataProvider,            
            ]);
        }
    ...


    В модели NewsSearch():

    ...
    $dataProvider = new ActiveDataProvider([
        'query' => News::find()->where(['visibility'=>1])->orderBy('date DESC'),
        'pagination' => [
            'pageSize' => 20, // говоришь системе мне нужно вывести 20 записей
        ],
    ]);
    ...


    Теперь во view:

    <?php
        use yii\helpers\Html;
        use yii\widgets\Pjax;
        use yii\grid\GridView;
        use budyaga_cust\users\models\News;
        $this->title = 'Новости';
        $this->params['breadcrumbs'][] = $this->title;
    ?>
    <?php Pjax::begin(); ?> 
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        //'filterModel' => $searchModel,
        'showHeader' => false, // вырезаем шапку таблицы
        'tableOptions' => [
            'class' => 'table' // можно задать свой, тут 100% ширина блока
        ], 
        'options' => ['tag' => 'div', 'class' => 'col-lg-12'], // оборачиваем в div с Bootstrap CSS
        'emptyTextOptions' => ['tag' => 'p', 'class' => 'text-center text-danger'],
        'emptyText' => 'По вашему запросу ничего не найдено',
        'summary' => '<br/><p class="text-center text-muted">Всего найдено '.News::sklonen( '{totalCount}', 'новость', 'новости', 'новостей').'</p>', // 127
        'layout' => '{summary}{items}',  // настраиваем внешний вид как нам надо
            'columns' => [
                //['class' => 'yii\grid\SerialColumn'], // нумерация строк может вообще не пригодится
                [
                    // 'attribute' => 'img', // если много атрибутов в контенте можно это не писать
                    'format' => 'raw',
                    'label' => '',
                    'content'=>function($data){
                        return '
                                <div class="row">
                                    <div class="col-md-3">
                                        '.Html::a(Html::img('/img/box/'.$data->img,
                                                [
                                                    'class' => 'thumbnail', 
                                                    'alt' => $data->header, 
                                                    'style' => 'width:100%;'
                                                ])
                                        ,'/new/'.$data->link).'                                
                                    </div>
                                    <div class="col-md-9 products">
                                    '.Html::a($data->header, '/new/'.$data->link).'
                                    '.Html::tag('p', $data->text).'
                                    '.Html::a('подробнее', '#',['class' =>'buttons pull-right']).'
                                    </div>
                                </div>
                            ';
                    }
                ],
            ], // может понадобится по дизайну, чтобы пагинация была в другом месте
        ]); ?>
    <?= GridView::widget([
        'dataProvider' => $dataProvider,  
        'showHeader' => false,
        'showOnEmpty' => false,
        'summary' => 'страницы {page} из {pageCount}',
        'layout' => '<div class="page-nav td-pb-padding-side">{pager}<span class="pages">{summary}</span></div>', // формируем внешний вид пагинации
        'pager' => [
            'maxButtonCount' => 5, // максимум 5 кнопок
            'options' => ['id' => 'mypager', 'class' => 'pagination'], // прикручиваем свой id чтобы создать собственный дизайн не касаясь основного.
            'nextPageLabel' => '<i class="ionicons ion-arrow-right-c"></i>', // стрелочка в право
            'prevPageLabel' => '<i class="ionicons ion-arrow-left-c"></i>', // стрелочка влево
        ],  
    ]); ?> 
    <?php Pjax::end(); ?>

    ВСЁ ! Здесь показан рабочий код, настраивайте по вашему вкусу, возможно будет критика, но! Этот код имеет адаптивную вёрстку! То есть вы можете сделать из этого поиск по товарам и услугам, да по любому контенту, и он будет гибким для всех устройств, плюс ajax сделает это невероятно быстро и легко, словно вы нажимаете на табы. Наследованные виджеты я брал из коробки, ничего не выдумывал, материал собрал из документации.

    --
    Это был полный разбор виджета GridView
    Всем спасибо за внимание. Пока! )))
    Ответ написан
    Комментировать
  • Как сделать private chat между двумя пользователями на php, yii?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте, Николай.
    В этой ситуации действительно понадобятся сокеты, я реализовывал подобное на Yii2 через Ajax, используя два параметра, id - пользователя и его токен, токен у каждого пользователя индивидуальный, поэтому с его помощью можно создавать много разных парных диалогов, а потом по этому токену находить диалоги, и выводить на странице. В случае уникальных айдишников и токенов нет риска, что перепутаются миллионы других диалогов, да и с помощью токена можно сортировать переписку так, чтобы последнее сообщение было внизу, и через javascript скролить окно всё время вниз, чтобы пользователь видел что ему написали, без прокрутки вручную.
    Мой метод может быть и костыльный, для кого-то, но я сам его придумал так, до сох пор работает и не подводит. Пробуйте, успехов вам.
    Ответ написан
    Комментировать
  • Как в Yii2 организовать вставку формы и обработчикадля нее в любое место на сайте админом?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте. )))
    Если вы пользовались gii - генератором на Yii2, то наверняка знаете, что там можно заниматься генерацией любых форм. Так вот, если это нужно лично вам, для быстрой реализации создания форм, то это решение прямо у вас под носом, если вы хотите это для пользователей, не совсем понятно конечно, в чём соль, то возьмите функционал из коробки вашего фреймворка, там уже всё продумано и реализовано. Если это CMS система, то будьте готовы к тому, что функционал должен быть понятен самому конченному офисному планктону, или новоявленному менеджеру, и даже старушке на пенсии, иначе весь функционал, труды, и потраченное время - будут в пустую. Что расстроит больше, чем не рабочий код.
    Ответ написан
    1 комментарий
  • Как Yii2 перед 404 ошибкой проверить URL в контент страницах?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте.
    --
    я так понимаю, что ссылки вы формируете не по id, а по некоему столбцу в БД, который имеет строковое значение.
    так вот, если вы делаете get-запрос, то лучше это делать так:
    // код action
    ...
    public function actionName($link= ''){ // обращаемся к той переменной, которая выводит get
    $model = Catalog::find()->where(['link' => $link])->one(); // обращаемся к БД с вопросом, есть ли такая запись
    if ($link == NULL) {return $this->redirect(['catalog']);}  // если нету, то делаем редирект*
    ...

    ---
    * - если вставить последнюю строчку, вы избегаете страницы 404, метода случайных подборов на несуществующие страницы, а следствие, мешаете хакерам с инекциями, пользователь остаётся на сайте, и может выбрать что-то другое, а не пытаться понять, что значат эти три цифры. Не выводится страница с пустыми гет запросами, что очень важно!!! Редиректить можно куда угодно, куда укажете.

    Буду рад знать, что помог.
    Ответ написан
  • Как отправить две формы на одном экшене Yii2?

    Isolution666
    @Isolution666 Автор вопроса
    Full-Stack Developer
    Решение очень простое:

    ...
    $string = Yii::$app->request->post('send');
       if (isset($string)) {
             ...
       }
    ...
    Ответ написан
    Комментировать
  • Редактор для yii на виртуальной ОС ubuntu?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Делать сайты на фреймворке Yii2 лучше через IDE NetBeans, есть много причин, использовать именно его.
    Быстро ищет use, и правильно находит путь к виджетам, моделям, контроллерам, можно перейти к ним как по ссылке, - это очень удобно. Быстрые подсказки уже по существующему коду. Кастомизированный и понятный интерфейс, поддерживает много разных языков программирования:
    Java, JavaScript, Python, PHP7, C/C++
    Программа бесплатная, темы и подсветка синтаксиса настраиваются как вам нравится.
    Созданные проекты можно заливать прямо через программу, подключаясь к реальным сайтам как на FileZilla, только быстрее.
    Можно просматривать картинки))) Лично для меня это большой плюс, к медиафайлам так же легко прокладывать путь, пользуясь подсказками, в списке есть уже все созданные папки и файлы, нужно только выбрать, что вставить. Файлы можно заливать прямо в дерево проекта, по несколько файлов, а не по одному, так же можно перетаскивать из одной папки в другую.
    Видно все синтаксические ошибки и способы решения, как их исправить.
    Всё под рукой, а программа одна!

    Из минусов, на старом железе очень сильно тормозит, но работает
    Ответ написан
    Комментировать
  • Как изменить кодировку с помощью миграций?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Могу предположить, что вы писали сайт на Notepad++ или таблица в Excel в кодировке windows 1251
    Потому что, если писать проекты на IDE, там выставляется кодировка ещё до создания проекта, и все последующие файлы создаются в одной кодировке из настройки.

    Если я угадал с таблицей, то создай пустой документ Excel, перейди во вкладку "данные", "получение внешних данных", "из текста", выбираешь таблицу, выставляешь кодировку utf-8, разделитель ";", и сохраняешь как csv файл, именно в этой кодировке, теперь можешь заливать в БД и не париться, всё будет по русски без вопросов.

    Могу ещё предположить, что таблица создавалась не в той кодировке, зайди в PhpMyAdmin, и посмотри, что там за кодировка у самой таблицы, и у каждой строки в таблице, если сайт в UTF-8, то в таблице должно быть utf_8_general_ci - кажется так пишется.
    ---
    Миграции - https://yiiframework.com.ua/ru/doc/guide/2/db-migr...
    Создание и удаление таблиц - https://metanit.com/web/php/7.3.php
    Создание базы данных MySQL - php.net/manual/ru/function.mysql-create-db.php
    Ответ написан
    Комментировать
  • Как работать с очень большими данными в MySQL?

    Isolution666
    @Isolution666 Автор вопроса
    Full-Stack Developer
    HeidiSQL - подходит для работы с большими, по крайней мере для PhpMyAdmin таблицами.
    Ещё MariaDB.
    Хэйди уже опробовал, быстрая программа, правки, SQL-запросы выполняет быстро, не тормозит, понятный интерфейс, есть соединение с реальным сервером даже по защищённому соединению.

    Марию ещё не пробовал, но частенько слышал о ней от тех кто работал с большим объёмом информации.

    Хэйди открывает таблицы на много быстрее браузерного PhpMyAdmin.
    К плюсам можно отнести и то, что:
    Не надо вводить логин и пароль каждые 1440 секунд.
    Операции выполняются мгновенно, внизу программы видно все запросы, которые были выполнены.
    Легче копировать необходимые элементы.
    Подключение к нескольким серверам в одном окне.
    Подключиться через туннель SSH или выполнить настройки SSL.
    Управление пользовательскими привилегиями
    Импорт текстовых файлов
    Экспорт строк таблицы в виде CSV, HTML, XML, SQL, LaTeX, Wiki Markup и PHP Array
    Ответ написан
  • Как сделать поиск не по точному вхождению поискового слова?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Если делали через GRUD-генератор в gii, то у вас должен был создаться некий класс NameSearch
    Подключайтесь к нему любым удобным для вас способом, я использовал виджеты DetailView и ListView. В принципе, умеючи, можно выводить информацию в любом виде. Минимум кода, нумерация, пагинация, пересчёт количества отображаемых записей, формировать внешний вид можно, как вы хотите, в классе поиска уже предусмотрены такие моменты. Не знаю как у других, у меня по любому совпадению выводилась инфа, даже по одному символу, хоть по 3 символа, без разницы )))
    Ответ написан
    Комментировать
  • Какая самая лучшая IDE для Java?

    Isolution666
    @Isolution666
    Full-Stack Developer
    IDE NetBeans со сборкой под ваш язык программирования, либо общей сборки, так же подойдёт для python , хотя рекомендуют покупать пичарм, лучше этой IDE я не находил, её возможности переплёвывают сам саблайн, который все привыкли нахваливать, однако я не встречал ещё, чтобы IDE подключалась к реальному сайту, как FileZilla, помнила все названия папок, файлов, подсказывала классы и айдишники из всех созданных css, просмотр изображений, заливка файлов любого формата прямо в дерево проекта, перейти к классам можно как по ссылке, "помнит" все классы и функции которые вы создали в проекте, подсказывает синтаксис, подсвечивает начало и конец кода, цвет синтаксиса тоже можно настроить на свой вкус, работает и с C++, C#, Java, javascript
    Замыкает парные теги, если таковые есть, показывает лишние, и это далеко не всё что я там увидел, даже PHPstorm не делает того что NetBeans, правда есть один косяк, иногда при открытии проекта, или при обновлении забирает почти все ресурсы компа, и не возможно ничего сделать, пока сие действо не закончится. Выбор за вами )))
    Ответ написан
    Комментировать
  • Как воспроизвести rtmp от 101.ru на стороннем сайте?

    Isolution666
    @Isolution666
    Full-Stack Developer
    1) Установка flash плеера 101.ru на свой сайт.
    2) Установка javascript кода 101.ru на свой сайт.
    3) Решить вопросы с директориями
    4) Решить вопрос с SSL-сертификатом
    5) Постоянно следить за обновлениями сайта, чтобы ваше радио работало 24/7
    6) Возможно придётся сделать некий свой API или иной метод, который бы возвращал исходный код плеера с чужого сайта.

    Если кто не знал, сайт 101.ru использовал плагин плеера с uppod.com, так что, изучите документацию, может сделаете своё собственное радио. В любом случае успехов вам.
    Ответ написан
    Комментировать
  • Yii Framework: почему появляется ошибка PHP notice Trying to get property of non-object?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте, Антон.

    Скорее всего у вас так настроен сервер, в вашей версии php должен быть файл php.ini
    Посмотрите, что написано в строке с параметром
    error_reporting = '....
    Иногда, в серверах указывается вывод ошибки, некоторые при настройке Битрикса там меняют параметры.

    Чтобы не вылезала ошибка "Trying to get property of non-object", напишите так:
    error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT

    На виртуальных хостингах эти ошибки скрываются, и существуют как паранормальные явления, никто не верит, что эти ошибки есть, но они существуют, просто тайные хостинг-провайдеры скрывают от вас правду, чтобы вы не знали об этом, но уверяю вас non-object существует!
    Это был сарказм, конечно же вы это знаете, иначе бы не написали об этом здесь.
    Ответ написан
    3 комментария
  • Как в bootstrap изменить размер экрана при сжатии меню?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Используй @media screenтут подробно изложено как этим пользоваться, так же советую использовать responsinator, если используете OpenServer, то через него тоже можно заняться адаптацией. Советую использовать 4 параметра, как предлагает сам bootstrap

    Очень маленькие устройство
    Телефоны (<768px)

    Малые устройства
    Планшеты (≥768px)

    Средние устройства
    Настольные (≥992px)

    Большие устройства
    Настольные (≥1200px)
    Ответ написан
    Комментировать
  • Почему метод className() в yii2-basic не работает как надо?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте.
    --
    Вас ждёт ещё один сюрприз. Дело в том что разработчики Yii2 Framework, решили вопрос с нагрузками на сайте, и им пришлось отказаться от ::className(), так как в php7 уже есть решение по обращению к классам, то вся конструкция будет заменена на ::class().

    Так что, даже если вы решите вопросы с алиасами, ваши классы могут опять перестать работать. Лично я нахожу удобным такое обращение к классам, заметно сокращается код, да и по показаниям дэбагера всё гораздо лучше ))
    Ответ написан
    Комментировать
  • Где в Yii2 файлы ошибок 404 и 403(хочется перевести эти страницы)?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Здравствуйте товарищи программисты.
    ---
    Не так страшен код, как его трактуют ))
    Подсказку к этому вопросу как ни странно, я нашёл в папке "views/site/"
    Файл: error.php
    ===
    Разработчики поняли, что программисты столкнуться с таким вопросом, поэтому оставили подсказки:
    <?php
    
    use yii\helpers\Html;
    
    /* @var $this yii\web\View */
    /* @var $name string */
    /* @var $message string */
    /* @var $exception Exception */
    
    $this->title = $name;
    ?>


    Из них мы видим, что переменную <?=$name?>
    нам даёт <?=$this->title;?>
    А свалился этот нейм на наши головы из класса View !
    Проведя рефакторинг, я понял, что за <?=$message;?>
    Отвечает языковой пакет Yii2/
    А именно. /vendor/yiisoft/yii2/messages/ru/
    Если конечно вы в конфиге файла main.php указали русский язык. Там их куча, вы можете в этом убедится, да и сам класс показал, что используется модель подставки сообщений, через конструкцию: <?=Yii::t('yii','значение');?>

    Вы спросите, а нахера такой геморрой нужен??

    Отвечаю, во-первых, это не геморрой, а очень даже классное решение! Убивает сразу двух зайцев наповал! Мультиязычность - раз, Повторяющиеся элементы - два! Благодаря такому решению не надо ковырять весь код, достаточно заменяющие элементы заменить такой конструкцией, и всё, поменял текст или дизайн кнопки "обновить", сделал это в одном месте, в файле yii.php и всё, дизайн и текст поменялся во всём сайте, а отредактировали один файл!!! Это невероятно удобно. Так и с ошибками и с сообщениями, зачем писать на каждой страничке ручками "ваше сообщение успешно отправлено", если можно прописать значение = перевод. Так вот, в голове кода была ещё одна подсказка /* @var $exception Exception */
    и в самом классе ссылка на мануал php7 - php.net/manual/ru/exception.getmessage.php

    Таким образом мы имеем:
    class HttpException extends UserException
    {
        /**
         * @var int HTTP status code, such as 403, 404, 500, etc.
         */
        public $statusCode;
    
    
        /**
         * Constructor.
         * @param int $status HTTP status code, such as 404, 500, etc.
         * @param string $message error message
         * @param int $code error code
         * @param \Exception $previous The previous exception used for the exception chaining.
         */
        public function __construct($status, $message = null, $code = 0, \Exception $previous = null)
        {
            $this->statusCode = $status;
            parent::__construct($message, $code, $previous);
        }
    
        /**
         * @return string the user-friendly name of this exception
         */
        public function getName()
        {
            if (isset(Response::$httpStatuses[$this->statusCode])) {
                return Response::$httpStatuses[$this->statusCode];
            } else {
                return 'Error';
            }
        }
    }

    Ну так, раз мы можем указать код ошибки, public $statusCode;
    То можно тупо и условия поставить, например:
    <?=($exception->statusCode == '404') ? $this->title = "Ошибка 404" : ''; ?>
    <?=($exception->statusCode == '403') ? $this->title = "Доступ запрещён" : ''; ?>
    <?=($exception->statusCode == '500') ? $this->title = "Внутренняя ошибка сервера" : ''; ?>

    А текст ошибки под заголовком редактируется в языковом пакете:
    /vendor/yiisoft/yii2/messages/ru/yii.php
    $message

    <?php
    return [
    ...
    'Page not found.' => 'Страница не найдена.',
    'You are not allowed to perform this action.' => 'Вам не разрешено производить данное действие.',
    'An internal server error occurred.' => 'Возникла внутренняя ошибка сервера.',
    ...
    ];

    Выводится как <?=Yii::t('yii', 'Page not found.');?> и т д...
    Но вам выводить ничего не надо, класс сам определит код ошибки и выведет её текст.
    Как заменить заголовок ошибки я уже написал выше.

    --
    Это был полный разбор страницы ошибок, благодарю всех за внимание. Пока :)
    Ответ написан
    Комментировать
  • Как в Yii2 сделать ListView с кастомным фильтром (Ajax/Pjax) и пагинацией?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Ну во первых, надо понимать, что Ajax это технология максимально связана с языком javascript
    Чтобы обновлялась информация по Ajax, нужно создать поле (DOM-дерево), с неким id, которое будет привязано к функции.
    Pjax это лишь вспомогательный класс, инструмент, для манипуляции с контентом, поэтому сети блока с классом Pjax надо раскинуть ровно на столько, на сколько это будет касаться обновления контента. В некоторых случаях мне приходилось захватывать во вью всю страничку экшена, паганацию можно вывести отдельно, вне ListView, и эта технология описана в документации Yii2

    Вот пример рабочего экшена, пусть написано криво, но сообщения отсылаются мгновенно и без перезагрузки страницы, со временем я сделаю этот код более удобным и простым:
    public function actionMessages($id ='', $token ='')
        {
    
            $model = new Message(); // обращаемся к классу привязанному к таблице БД
                if ($model->load(Yii::$app->request->post()) && $model->save()) // убеждаемся что передача данных проходит успешно
                {
                    $model = new Message(); // возвращаем то что обновили
                }    
    
            $send = Message::find()->where(['token' => $token])->orderBy(['id' => SORT_ASC ])->all(); // выводим всю переписку с конкретным пользователем
            $col = Message::find()->where(['token' => $token])->count(); // выводим количество сообщений с конкретным пользователем (например, чтобы скрыть пустой код, если переписки ещё не было)
            $getm = User::find()->where(['id' => $id])->one(); // так мы определим с кем мы переписываемся (имя, аватарка, возраст, что угодно)
            
            return $this->render('messages', ['model' => $model, 'col' => $col, 'send' => $send, 'getm' => $getm, 'id' => $id, 'token' => $token,]); // рендерим всё к чему прикоснулись, чтобы работало.
        }

    Вроде всё понятно, и это всё работает внутри "пиджака", через javascript по конкретному id в блоке div возможно кто-то уже нашёл готовое решение, я лишь делюсь своим скромным опытом.
    Что касается конкретно класса пагинации:
    <?php
    use yii\data\Pagination;
    ?>

    Это класс хорошо работает с классом:
    <?php
    use yii\widgets\LinkPager;
    ?>

    Который надо прописать во вью, и прописать вот такую не хитрую конструкцию:
    <?php echo LinkPager::widget(['pagination' => $pages,]);?>

    Там, где следует отобразить саму пагинацию. Как говорилось выше, надо применить некий id к коду выше, думаю как прописать это в коде - вы знаете, если вдруг фокусы с ListView не прошли.
    Никому не нужны костыли, но если нужно срочно что-то решать, то сойдёт и рабочий код:
    Controller::action /
    $query = Guestbook::find()->where(['level' => 1])->orderBy(['time' => SORT_DESC,]); // создаём конструкцию обращения
            $pages = new Pagination(['totalCount' => $query->count(),'pageSize' => 5]); // обращаемся к классу чтобы сказать сколько записей за раз нужно отобразить, например 5
            $pages->pageSizeParam = false; // отключаем самодеятельность параметров
            $models = $query->offset($pages->offset)->limit($pages->limit)->all(); // теперь зная количество записей и лимиты, мы заставляем скрипт показывать нам ровно столько сколько нам нужно


    На сколько мне известно, теги и айдишко можно прописать и в самом ListView , класс не привередливый, лёгкий и гибкий, решает практически все потребности и капризы заказчиков, почитай о всех возможностях здесь: https://xn--d1acnqm.xn--j1amh/%D0%B7%D0%B0%D0%BF%D... и здесь: www.yiiframework.com/doc-2.0/yii-widgets-linkpager.html думаю это будет приятным чтивом, потому как тут очень много ответов и решений.
    ну и наконец ссылочка, которая лично мне очень помогла: https://nix-tips.ru/examples/simplegridview/index

    Благодарю за внимание.
    Ответ написан
    Комментировать
  • Как сделать выборку уникальных значений через ActiveRecord в Yii2?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Я не стал изобретать велосипед. Оказалось, что вывести список записей через цикл на столько просто и легко и элементарно)) Повторяющиеся записи исчезают, остаётся список только уникальных записей!

    Просто в экшене контроллера напиши:

    public function actionPage(){
            $select = City::find()->select(['obl'])->distinct()->all();
            return $this->render('page', ['select' => $select,]);
        }



    Немного поясню City это модель, которая обращается к некой таблице в БД
    obl - название столбца в таблице, записи которого хотите вывести


    Топорный пример вывода списка записей через select:

    <select class="form-control">
                        <?php foreach ($select as $m) { ?>
                            <option value="<?=$m->obl;?>"><?=$m->obl;?></option>
                        <?php } ?>
                    </select>


    Испытано лично, работает! Подсчёт уникальных записей, это:
    ->count();

    --

    $select = City::find()->select(['obl'])->distinct()->count();

    --
    <p>У вас всего <?=$select;?> уникальных записей</p>

    В документации Yii взял, там и черпаю знания, кому помог? )) Был рад стать полезен. Успехов!
    Ответ написан
    5 комментариев
  • Магия с проводником windows, или почему не видны файлы при загрузке на сайт?

    Isolution666
    @Isolution666 Автор вопроса
    Full-Stack Developer
    Я разобрался в чём дело, кому интересно, читаем.

    Существуем множество способов сохранения файлов на свой компьютер, но некоторые способы весьма неблагоприятно влияют на память проводника. Кто-то жмёт на файл правой кнопкой мыши, в выпадающем списке ищет "сохранить картинку как...", и жмёт "сохранить". Кто-то использует комбинацию Ctrl+S или Ctrl+Shift+S, а кто-то, как я ))) перетягивает картинку курсором прямо в папку. И она там сохраняется. НО, сохраняется не всегда как файл, дело в том, что основой отображения в проводнике windows являются ярлыки, даже если есть ярлык, не факт, что есть файл, который надо прочесть или отредактировать. При наборе команд, выбора из выпадающего списка, система запоминания работает НОРМАЛЬНО. Видимо криворукие программисты MicroSoft не очень то позаботились о функции drag, которая например в php работает как AJAX. Но ОС написана на языке C# и очевидно там фокусы с перетаскиванием и сохранением хромают.

    Чтобы не случилось такой магии как у меня, перетаскивать файлы в проводник не рекомендуется, так как иногда это приводит к сбою ярлыков, и вам будет казаться что файл вы у себя сохранили. В случае ошибки обычно вылезает файл desktop.ini - вы его не увидите, но он создастся. Его можно увидеть через FTP-клиент, или если настроить проводник так, чтобы он показывал скрытые папки и файлы. Полезно это будет тем, кто пользуется git, чтобы убедиться, что папка .git появилась. Так что, если вам в дальнейшем файл понадобится для закачки в сеть интернет, сохраняйте его через клик правой кнопки мыши. И всё будет работать.

    Что с этим делать и как это исправить, я не знаю. Шутки ради, рекомендую изучить C# и C++, и допилить код windows, чтобы функция drag не лагала.

    Всё. Всем спасибо за внимания, и успеха в делах.
    P.S. Ezhyg - 666 - число человеческое, означает температуру тела 36,6 в библии это написано, я посчитал учитывая подсказку, поэтому мне смешно читать про проклятие. К тому же все чудеса появляются от незнания, объяснить можно всё, но не всем.
    Ответ написан
  • Как сделать чтобы в Input можно было вводить только цифры?

    Isolution666
    @Isolution666
    Full-Stack Developer
    Есть более интересный способ www.yiiframework.com/doc-2.0/yii-widgets-maskedinp... если ваш сайт на фреймворке Yii2, или то что предложил Алексей. Лично я применяю его, и очень доволен, так как маскировать, задавать формат этим способом легко и быстро, в одну строчку, меньше чем за минуту, вот пример того как это работает https://serenitisever.com/contact
    Ответ написан
    Комментировать