Задать вопрос
  • Как эффективнее всего изучать yii2?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый день.
    Читать документацию, смотреть проекты на github, пытаться написать своё решение для какой-либо задачи....
    Вот несколько ссылок, которые Вам помогут:
    1) rmcreative.ru (блог одного из разработчиков yii2)
    2) https://github.com/samdark/yii2-cookbook (рецепты от того же разработчика)
    3) www.elisdn.ru/blog/tag/Yii2 (один из блогов, где можно учиться работать с yii2)
    4) https://github.com/yiisoft/yii2/tree/master/docs/g... (документация на русском от разработчиков yii2)
    Ответ написан
    1 комментарий
  • Как решить ошибку при открытии проекта на сервере?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Ну так доступа к бд нет. Проверяйте имя пользователя и пароль.

    ПС. Вы бы не палили ip сервера и имя пользователя
    Ответ написан
  • Рассчитать монетизацию сайта?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Открою Вам страшную тайну: монетизируют свои ресурсы через рекламные сети либо люди совсем без фантазии, либо дорвейщики и прочий мусор.
    Если у Вас есть понятная, качественная аудитория - составляете список рекламодателей кому она может быть интересна, нанимаете продажников и вперед по списку. Только не надо продавать очередные банеры. Делайте спецпроекты, это гораздо выгодней.
    Это не говоря уже про прямые монетизации сервиса.
    Ответ написан
    1 комментарий
  • Книги для изучения symfony?

    Комментировать
  • В чем могут помочь js фреймворки(React, Angular)?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    C MVC фреймворками все понятно, но они меня не интересуют. А что делать с инструментами, нацеленными больше на фронтенд (React, Angular) ?


    Открою вам страшную тайну - MVC фреймворки как раз на фронтэнд и нацелены, а не на бэкэнд.

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

    Angular - полноценный фреймворк, к которому можно подключить тот же React для вьюх. Используют его в основном при реализации Single Page Application-ов.

    Были ли у вас практические задачи, с которыми мог справиться только js фреймворк? Какие?

    Все задачи можно решить на чем угодно. Вопрос в сроках и кривости. Angular позволяет организовать структуру приложения, разделить его на слои, предоставляет ViewModel... все то что писать с нуля маленький ад и скучно. Ну и опять же все можно покрыть тестами и т.д.

    Могут ли быть полезны данные инструменты в совместной работе с Rails, например?

    Если брать ангуляр - я его использую только в контексте SPA. Это может быть не все приложение а только какая-то его часть но все же... А для SPA разницы нет вообще на чем бэкэнд реализован. От бэкэнда нужна только апишка.

    Реакт же можно использовать в принципе для построения view на клиенте. Так что можно и его юзать. Зависит от задачи. Скажем если в задачи входит организация работы жирной формы - то лучше взять knockout.js. А если вам нужно рендрить какие-то данные в реалтайме - можно вооружиться реактом.

    Нужно ли вообще тратить время и искать себе задачи, которые можно решить привычным jQuery, который в большей степени знают все (вопрос дальнейшей поддержки) ?

    Куча народу знает jQuery но не знает JS. И это грусть и печаль. Скорее всего если у вас в задачах стоит реализовать слайдер какой или что-то такое то ни Angular ни React вам не нужны. Ну или в контексте сайтиков тоже не особо есть от них польза (только в специфических случаях). А вот если пишите приложения какие-то, можно уже задуматься ибо если вам придется реализовывать весь бойлерплейт, да еще и не будет DI то с высокой долей вероятности (все же нормальные разработчики существуют) вы получите шматок гуано дико связанный и приносящий боль при рефакторинге. А еще использование только jQuery это на 99% отсутствие каких-либо тестов на фронтэнде.

    p.s. Я на ангуляре пишу админки к примеру для своих проектов. Ну и все все все что вписывается в концепцию SPA. Реакт планирую использовать как альтернативу phonegap (react-native вышел), поскольку он является слоем абстракции над формированием представления (за счет промежуточного виртуального DOM).
    Ответ написан
    1 комментарий
  • Готовая сборка Web сервер на Linux (без мусора)?

    jamakasi666
    @jamakasi666 Куратор тега Linux
    Просто IT'шник.
    Ставите freebsd, самая чистая система получится. На нее накатываете все необходимое. Получится крайне легкая и шустрая система.
    Ответ написан
    Комментировать
  • Как оптимизировать массив и вывод данных?

    @dimoff66
    Кратко о себе: Я есть
    Без разницы абсолютно.

    По настоящему правильно было бы сделать кэш для страницы, если много много раз там выводятся одни и те же данные.
    Ответ написан
    4 комментария
  • Как добавить несколько строк в БД одной формой?

    @dimoff66
    Кратко о себе: Я есть
    Либо поставить селекту атрибут multiple
    <select name="rab" multiple>

    Либо создать несколько селектов, как у вас, и в имя прописать
    <select name="rab[]" multiple>
    В обоих случаях на сервере вы получите массив
    Ответ написан
    Комментировать
  • Как сделать условие для регулярного выражения?

    xpert13
    @xpert13
    Full Stack Developer
    Забыли точку перед png заэкранировать.
    preg_match_all("/(\/\/[0-9a-zA-Z\.\/_-]+\.png)/i", $url, $res)
    Ответ написан
    1 комментарий
  • Как сделать Windows 10 безопаснее без антивируса?

    Jump
    @Jump Куратор тега Windows
    Системный администратор со стажем.
    Как сделать Windows 10 безопаснее без антивируса?
    Ну во первых там есть встроенный антивирус от майкрософта, который существует еще со времен Windows 7, и прекрасно работает, практически не влияя на быстродействие.

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

    Отличная система защиты это UAC - работает по принципу sudo в Linux. Он отсекает кучу проблем защищая любителей работать с правами администратора.

    На данный момент наилучшей защитой является грамотная работа с правами.
    Не работайте под админом - вы же не каждый день ставите софт, если надо поставить не трудно набрать пароль от админской учетки.
    Ограничивайте права на запуск программ откуда попало с помощью политик - в идеале запуск разрешен только из специальных папок - Windows и ProgrammFiles, а с других мест запрещен. В итоге даже если зловред попадет на компьютер - в системную папку он не попадет, ибо прав нет, а из другой просто не запустится ибо запрет.
    Для офисных компьютеров идеальная вещь. И не надо думать что это только в домене - все работает и без домена прекрасно.

    Ну и одна из самых эффективных, простых и доступных защит - банальный бэкап системы.
    Тут следует оговорится - он защищает от утраты, и повреждения данных, но не защищает от утечки.
    Если вы не храните на ПК сверхсекретной информации, утечка которой способна нанести миллионый ущерб, то можно этой защитой и ограничится.
    Настраиваете бэкап и спокойно работаете - если вдруг словите что-то нехорошее, просто откатываетесь назад.
    Нажатие одной кнопки и за 5-10минут система откатится к точке бэкапа и вы получите работающую систему со всеми файлами.
    Причем встроенная система бэкапа идущая "из коробки" вполне конкурентоспособна и неплохо работает, поэтому можно использовать ее.

    Множество неприятностей идет из браузера и тут неплохо справляются альтернативные DNS например от Яндекса, которые просто не резольвят вредоносные сайты.
    Так же эффективен ADblock хоть он и создан немного для другого.

    Плюс немного осмотрительности - внимательно следите откуда качаете софт, следите за расширениями файлов.
    Не запускайте разнообразные файлы типа хороший_фильм.torrent.exe или скан_накладной.exe
    Если вы невнимательны - смотрите выше про UAC и политики ограниченного использования программ.
    Ответ написан
    3 комментария
  • Почему Yii/Yii2 не подходит для крупных проектов?

    @karminski
    Senior React.JS Developer
    У нас в компании 4 энтерпрайзных проекта на Yii2. В том числе CRM. В том числе и связь с телефонией, 1С, баг-трекером. Всё работает отлично, без нареканий. О каких "слабых" местах вы говорите? Прекратите читать - начните делать!
    Ответ написан
    7 комментариев
  • Почему не работает javascript после ajax получения ответа?

    Fernus
    @Fernus
    Техник - Механик :)
    Почему такой вариант не рассматривается?

    $(document).on('click', 'element', function () {
     // .. //
    });

    Я так пользуюсь давно...сам когда-то натыкался на это, но так же быстро решил...оказывается это прям ВОПРОС))

    Для извращенцев, вот так ещё можно:
    $(document).find('element').on('click', function () {
     // .. //
    });
    Ответ написан
    5 комментариев
  • Как указать класс для конкретного 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
    Всем спасибо за внимание. Пока! )))
    Ответ написан
    Комментировать
  • Можно ли написать сайт только на Python?

    Symphony
    @Symphony
    Можно ли собрать хороший автомобиль имея только двигатель, не используя трансмиссию, колеса, руль?
    Можно ли приготовить борщ имея только свеклу, не используя воду, картошку, томат?
    Ответ написан
    Комментировать
  • Как Перейти с Proxmox на Hyper-v?

    @obg2211
    admin
    нужно воспользоваться утилитами для конвертации образов гостевых ОС qemu-img или StarWind V2V Image Converter в vhdx формат
    Ответ написан
    9 комментариев
  • Как сделать чтобы git не видел .idea?

    nazarpc
    @nazarpc
    Open Source enthusiast
    Папка .idea это ваше локальное окружение, оно в репозитории упоминаться не должно, не нужно его засовывать в .gitignore.
    Вот что нужно сделать:
    d4cbe31f7e4147a8ab3ae319c639fb93.pngedaf451152dd4a79b82e9d394b0da31f.png
    Ответ написан
    4 комментария
  • Как создать такую зубчатую border?

    @Kjuri
    с помощью очень крутого инструмента разработчика - фотошопа
    Ответ написан
    Комментировать
  • Как отобразить часть контента используя Pjax yii2?

    slo_nik
    @slo_nik Куратор тега Yii
    Добрый день.
    У Вас есть выпадающий список
    <select name="spjax" id="spjax">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
    </select>

    Где-то в другом месте страницы есть блок, который надо обновить. При обновлении к заголовку необходимо добавить значение переменной $Ipjax. Оборачиваем этот блок Pjax и добавляем пользовательский js.
    <?php
       Pjax::begin([
           'id' => 'view-mode-pjax'
       ])
    ?>
    <div class="col-lg-4">
        <h2>Heading <?= $Ipjax ?></h2>
    
        <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et
            dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
            ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
            fugiat nulla pariatur.</p>
    
        <p><a class="btn btn-default" href="http://www.yiiframework.com/doc/">Yii Documentation &raquo;</a></p>
    </div>
    <?php
      Pjax::end();
    $this->registerJs("
    $(function(){
      $('#spjax').on('change', function(){
        var Id = $(this).val()
        console.log(Id)
        $.pjax.reload({
            container: \"#view-mode-pjax\", // контейнер, в котором надо обновить данные.
            url: window.location.href,
            timeout: 0,
            data: {
               'id': Id // данные, которые отправляются на сервер.
            },
        });
      })  
    })    
    ", View::POS_END)
    ?>

    А в контроллере, в действии, которое подключает данный вид передаёте нужную переменную.
    public function actionIndex()
    {
        $Ipjax = Yii::$app->request->get('id') ?: null;
        return $this->render('index', ['Ipjax' => $Ipjax]);
    }

    Отлавливаете изменение выпадающего списка и запускаете pjax. Идёт запрос на сервер, проверяется переменная и возвращается всё тот же вид, но уже с переменной.
    И Pjax, ушлый зверёк, обновит не всю страницу, а только тот блок, который Вы укажите.

    p.s. Пример сделан на yii2-basic, в файле views/index и в DefaultController.
    Ответ написан
  • Кто читал Мэтт Зандстра PHP: объекты, шаблоны и методики программирования. 4-е издание?

    @klokovdy
    php developer
    Точно не скажу, но коллега купил последнее издание, отличается незначительно по страницам и видимо туда просто добавили главу про GIT
    Ответ написан
    1 комментарий