• Как указать класс для конкретного 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
    Всем спасибо за внимание. Пока! )))
    Ответ написан
    Комментировать
  • Как сверстать такую кнопку?

    RAX7
    @RAX7
    Ответ написан
    Комментировать
  • Что нужно освоить веб разработчику чтобы облегчить себе жизнь?

    tot0ro
    @tot0ro
    Front - end developer
    1. IDE
    2. xdebug
    3. git
    4. composer
    5.bower
    6.npm/bower
    6. less/stulys/sass
    7. grunt/gulp/webpack
    8. apache/nginx
    9. apc/opcache/memcache/varnish etc
    10. bootstrap
    11. VIM!!!!!!!!!
    12. English!!!!!!!!!!
    13. Все дырки через границу
    14. Умение не читать ИТ литературу русских программистов за исключением Макарова, Индутного
    15. Ненавидеть Попова
    Ответ написан
    40 комментариев
  • Зачем нужен Gulp?

    @artinnok
    бекенд-программист
    CSS и JS:
    К примеру, у вас имеется большое количество (Х штук) css или js файлов, которое вы подключаете на своих страницах посредством тэгов <link> и <src>.
    При загрузке страницы, браузер клиента будет отправлять X запросов к вашему серверу, а ваш сервер должен будет ответить на X запросов.
    Это:
    1. Тормозит загрузку страницы - будете ждать ответа от сервера
    2. Загружает ваш сервер

    С помощью сборщиков фронтэнда вы можете "склеить" все файлы в один - main.css и main.js, которые будут отдаваться 2 запросами с сервера. Также, вы сможете минифицировать CSS и JS. Под минификацией подразумевается уменьшение размеров файла на диске. Естественно, более легкий файлы будет быстрее прогружаться + минимальное количество запросов к серверу.

    IMG:
    К примеру, у вас имеется Х изображений размером 700 Кбайт. Клиенту надо будет загрузить 700 * X Кбайт. Если вы пропустите свои изображения через Gulp, то вы получите изображения с меньшим размером на диске и такого же качества, т.е. клиенту придется прогрузить примерно (500-600) * X Кбайт.
    Ответ написан
    1 комментарий
  • Подходит ли данный план обучения для WEB (PHP)?

    at0m1x
    @at0m1x
    Что сейчас наиболее востребовано можешь почитать тут: Что учить PHP разработчику в 2016 году

    А вообще для начала легче всего, и интересней, учится по видео-урокам. Только не просто смотреть их, а повторять все тоже что делает автор. Потому что когда сам пишешь код, пусть даже переписываешь его с экрана (не копипастишь), намного понятнее становится вся суть того что ты изучаешь, лучше усваивается.

    По видео урокам, вот пара ссылок:
    Фреймворки
    Yii

    И еще советовал бы тебе учить не CMS а феймворки. Конечно начинать нужно с простого, но когда ты будешь себя чувствовать более менее уверенно в PHP, то можешь посмотреть на Silex, Slim, или даже Yii, Laravel или Zend Framework. Хотя Zend Framework - это уже можно сказать высокий уровень)

    И да, без практики никуда, что бы научится плавать нужно плавать, так же в программировании и любой другой деятельности. Лучше всего если ты устроишься на работу PHP программистом, пусть даже за минимальную ЗП. В начале будет сложно, но зато преобретеш реальный опыт работы.
    Ответ написан
    Комментировать
  • Какие еще есть блогеры вроде Sorax?

    @kostein
    Сварщик - Верстальщик
    После Sorax'a сложно смотреть кого либо .) Может он нашёл способ завести трактор..

    А вообще я б на месте нашего гос-ва, Или там доморощенных Цукербергов-Дуровых или какие-нибудь Тиньковы, Сечины, Абрамовичи, СамыйДлинныйИзНорильска (тысячи их), таким людям как Зоракс, Кантор и пр., - гранты давал на их просветительскую деятельность, всяко больше пользы для страны чем клепать авиабомбы в три смены, или раскидывать пятирублёвки из окна, а на глинтвейн в куршавеле всяко бы осталось.

    Илья Кантор два курса node js и webpack если тематика подходит, то очень даже.

    p.s. у Ильи ещё курс добавился по "Стакану с трубочкой".
    Ответ написан
    3 комментария
  • Подходит ли данный план обучения для WEB (PHP)?

    edli007
    @edli007
    full stack, team lead
    Курсы Попова,

    В мое время это были самые страшные курсы что можно придумать, хотя сейчас вроде лучше
    Ответ написан
    Комментировать
  • Подходит ли данный план обучения для WEB (PHP)?

    @Silm
    Только не курсы попова!

    Все что нужно:
    www.phptherightway.com

    Не знаю как сейчас, несколько лет назад для начинающих у "специалиста" были хорошие курсы по PHP.
    Ответ написан
    Комментировать
  • Php функция не возвращает значение?

    hummingbird
    @hummingbird
    Вообще какой-то бред вы написали.

    Вы точно понимаете, что вы пишите? Прочитайте про функции и передаваемые им параметры - php.net/manual/ru/functions.arguments.php
    Ответ написан
    3 комментария
  • Место работы для студента: как сделать правильный выбор?

    @EvgeniyKonstantinov
    В первом месте вы получите больше опыта, так как скорее всего будете заниматься там вообще всем начиная с верстки, продолжая PHP, и заканчивая развертыванием веб серверов.

    Во втором месте вы как правили кнопки так и будете править пока не надоест, потому что раскрученная фирма = отточенные бизнес - процессы = каждому винтику свое место.

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

    Решать конечно вам и если для вас критичен размер зарплаты, то выбор конечно же в пользу нее, но надо понимать плюсы и минусы обоих мест. Собственно вы и понимаете.
    Ответ написан
    Комментировать
  • Как реализовать сложный запрос SQL?

    Finesse
    @Finesse
    UPDATE
    	`работник` AS r, 
    	`инвентарь` AS i
    SET 
    	r.status = 2,
    	i.status = 1
    WHERE
    	r.inventar_id = i.id AND
    	r.last_active < нужная_дата
    Ответ написан
    5 комментариев
  • Каков план личностного развития PHP программиста с нуля?

    somenumboola
    @somenumboola
    Team Lead in B-online Solutions
    Буду исходить из "дано" задачи "PHP программист" и из того что автор вопроса стремится заниматься сугубо back-end программированием. Заранее прошу прощения, я несколько увлекся
    Итак:
    1. Установка сервера (Open Server, Xampp, Denver), на начальном уровне. (просто из exe)
    2. Общие принципы.
    2.1. Типы данных.
    2.2. Переменные.
    2.2.1. Работа с переменными по ссылке.
    2.2.2. Методы объявления и уничтожения переменных.
    2.3. Управляющие конструкции (если знаком, то особенности синтаксиса в рамках языка).
    2.3.1. Условия.
    2.3.2. Циклы.
    2.4. Конструкции вывода(print, print_r, echo).
    2.5. Конструкции отладки и управления выполнением(var_dump,die,exit,break в циклах, пустой return;).
    2.6. Пред определенные глобальные переменные($_GET,$_POST,$_REQUEST,$_SERVER), константы зарезервированные под модификаторы (static, function, const, $this)
    2.7. Особенности версий 5.3, 5.4.
    2.7.1. Анонимные функции.
    2.7.2. Замыкания.
    2.7.3. Особенности объявления массивов.
    2.7.4. Пространства имен.
    3. HTTP протокол.
    3.1. Заголовки входящие.
    3.2. Заголовки исходящие.
    3.3. Процесс общения.
    3.4. Метод php “header(…)” в контексте темы.
    3.5. Глобальная переменная $_SERVER[] в контексте темы.
    4. Установка сервера на среднем уровне (основы файла .htaccess и RewriteRule)
    5. Процедурное программирование.
    5.1. Математические методы.
    5.2. Оперирование типами.
    5.2.1. Методы оперирования массивами (array_values,array_keys,array_map и т.д.)
    5.2.2. Методы оперирования строками (strlen,substr и т.д.).
    6. ООП.
    6.1. Классы.
    6.1.1. Инкапсуляция(public,protected,private). Понимать разницу.
    6.1.2. Наследование.
    6.2. Интерфейсы.
    6.2.1. Имплементация интерфейсов.
    6.3. Абстрактные классы.
    6.4. Полиморфизм.
    6.5. Магические методы.
    6.5.1. Базовые (__construct,__get,__set,__destruct)
    6.5.2. Расширенные (__invoke,__serialize,__isset)
    6.5.3. Разобраться когда стоит применять магические методы а когда это плохая практика.
    7. Библиотека SPL, и расширение поведенческих возможностей классов за ее счет.
    8. Базы данных.
    8.1. SQL
    8.2. Примитивный уровень общения с БД. (mysql_connect,mysql_close,mysql_query).
    8.3. Средний уровень общения с БД(PDO и другие кастомные библиотеки).
    8.4. Высокий уровень (ActiveRecord,DataAccessObject,ObjectRelationMapping).
    8.5. NoSql БД на примере MongoBD (настоятельно рекомендуется, но не обязательно).
    9. Фреймворки. На мой вигляд можно начать с Kohana. Сужу по уровню вхождения стажеров которых видел и отсутствию пространств имен с которыми по первах могут возникать проблемы.

    И главное, Внимание! Личностные качества.
    - Усидчивость.
    - Владение Google при оттачивании темы или сложной задаче на уровне, когда поисковик видит в пользователе не то что DDOS а полноценный физический краш. тест.
    - Не брезгливость. Умение заставить себя разбираться в гов… хм. Нелицеприятных дебрях.
    - Збагойствие. Отсутствие паники при различных ошибках и не состыковках. Всегда остыть и попробовать снова, но по другому.
    Ответ написан
    5 комментариев