• Как свертать так использую шаблонизатор blade?

    Вёрстка - html + css, в блейде используются в своём нативном виде.
    Верстаете и всё, а вот живые данные уже выводите через {{ }}

    Надо только разобраться с наследованием / расширением шаблонов, но это решает банальным изучением документации.
    Ответ написан
    Комментировать
  • Правильно ли я делаю логику счетчика просмотров поста?

    firstOrCreate/ firstOrNew помогут упростить код
    https://laravel.com/docs/5.8/eloquent#other-creati...
    Ответ написан
    Комментировать
  • Какое css свойство здесь не поддерживается, что у монетки нету краев?

    5d27ce4011bce094653290.png
    Проблема в этой строке, почему-то Crome и Firefox по разному этот поворот обрабатывают,
    в результате в лисе элемент поворачивается так, что как бы "схлопывается" от наблюдателя.
    Поставьте там 85%, сразу поймете, о чем говорю.
    Как исправить - хз, нет особо времени ковыряться в этом странном поведении

    5d27cf2a2e55a792446615.png

    P.S. вообще, я бы такие "плюшки" подальше от рабочих проектов держал, они разве что на эксперименты годятся, чтобы подивиться мощностью css-трансформаций. Имхо.
    Ответ написан
    1 комментарий
  • Как обратиться к одному из элементов списка?

    {{ header(1) }}

    methods: {
      header(id) {
        let el = this.list.find((item) => {
          return item.id === id
        })
        return el.name
      }
    }
    Ответ написан
    Комментировать
  • Как настроить перенаправление в backend/web по адресу admin на хостинге?

    Часть htaccess с рабочего проекта на advanced-шаблоне, где админка лежит по адресу /admin:

    Options +SymlinksIfOwnerMatch
    IndexIgnore */*
    RewriteEngine On
    
    # Если запрос начинается с /admin, то заменяем на /backend/web/
    RewriteCond %{REQUEST_URI} ^/admin
    RewriteRule ^admin\/?(.*) /backend/web/$1
    
    RewriteCond %{REQUEST_URI} !^/(frontend/web|backend/web|admin)
    RewriteRule (.*) /frontend/web/$1
    
    # Если frontend запрос
    RewriteCond %{REQUEST_URI} ^/frontend/web
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /frontend/web/index.php
    
    # Если backend запрос
    RewriteCond %{REQUEST_URI} ^/backend/web
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /backend/web/index.php
    Ответ написан
    Комментировать
  • Как запретить вывод placeholder в yii2-images?

    Михаил Балагура, дак всё равно решение в подобных случая аналогичное, что указано по ссылке elliot ...
    Наследуемся от yii2-images, ищем место, где отдается плейсхолдер, переопределяем метод на свой.

    Если прямо совсем частный случай рассматривать, то сейчас там есть такой код:

    public function getPlaceHolder(){
            if($this->placeHolderPath){
                return new PlaceHolder();
            }else{
                return null;
            }
        }


    Т.е. если в конфиге модуля не задавать/обнулить placeHolderPath, то и вернёт null

    Если это не поможет, то совет из начала точно уже справится.
    Ответ написан
    Комментировать
  • Как убрать контур с кнопки, при клике с мыши, но, что бы он оставался при навигации через tab?

    Нормального, человеческого способа нет.
    Вариант 1) Забить болт, оставить нативное поведение
    Вариант 2) Если всё же пипец надо, то я бы сделал как-то так:
    • Всем кнопкам добавил бы какой-то дополнительный класс, типа "not-pressed"
    • Для кнопки с наличием этого класса прописал бы аутлайн нужный, а так как класс этот по умолчанию есть, то переключаясь табом мы обводку увидим
    • При клике на кнопку этот класс бы убирался js-ом, для кнопки без класса аутлайн в css скрыть надо
    • По какому-то тригеру возвращал бы кнопке класс, чтобы вернуть нормальное состояние с наличием обводки, какой триггер - вопрос хороший, тут надо экспериментировать. Так, чисто на правах размышлений - может что-то типа "по клику вне кнопки" или "по нажатию клавиши"


    Ничего подобного на практике не пробовал, но как адский костыль должно сработать. Вроде.
    Ответ написан
    1 комментарий
  • Сайт для квеста?

    Квест только планируется? Или уже работает?
    Вопрос мой к тому, понятна ли структура процесса бронирования?
    Мы для квестов писали CRM с нуля, даже при наличии бюджета на покупку готовых решений. А все потому, что ни одно найденное решение не соответствовало потребностям. Основная проблема была в том, что у квестов есть четкое расписание с "временными ячейками" (типа 13-00, 14-30, 16-00 и т.д). и каждая ячейка должна иметь возможность быть занятой в режиме реального времени, отключенной, иметь свою системную или несистемную цену и т.д.
    По итогам - готового варианта не предложу, но есть много наработанного опыта и программных решений, 3 года итерационных обновлений привели к довольно богатому функционалу, отработанному на маленькой региональной сети квестов. Всё это в какой-то не очень дальней перспективе мы хотим упаковать в SaaS.
    Можете мне в телеграм (в профиле) постучать - как минимум опытом поделюсь.
    Ответ написан
    Комментировать
  • Автоматизация аренды сайтов?

    Сделать простой флаг - хоть в бд, хоть на файлах, грубо говоря blocked: true - сайт заблокирован, blocked:false - сайт показывается.
    Написать скрипт, который по крону проверяет дату окончания аренды и при истечении меняет флаг с true на false.
    Ответ написан
    Комментировать
  • Как установить preloader?

    Что значит любого js-кода?
    Показывание "солнышка" - тоже js код, уходим в рекурсию?
    Тогда уж в нужных местах выкидывать событие старта лоадера и финиша.
    А по событиям показывать-отключать загрузку.
    Ответ написан
    Комментировать
  • Карусель как в Яндексе?

    Конечно есть, их просто дикое количество...
    Несколько вспомнил без гугла
    OwlCarousel2
    slider-pro
    swiper
    Ответ написан
  • Как добавить SPA vue в Yii2?

    Максим верно написал.
    API на Yii - отдельное приложение, SPA на vue - отдельное.
    Могут лежать как угодно, хоть на разных доменах, хоть на поддомене, хоть в субдиректории.
    Я обычно vue-app кладу в 'domain.ru/', а Yii на поддомен 'api.domain.ru'
    Ответ написан
  • Обьясните логику работы auth на примере nuxt auth?

    1. Запрос /api/login/ ожидает в ответ токен пользователя. Как из ответа выбрать токен - указывается в настроках auth. Т.е. сервер получает логин и пароль, проверяет. Если они верны - выбирает из базы токен этого пользователя и возвращает его.
    2. После получения nuxt'ом токена он сохраняется в localStorage и, вроде, дублируется в кукис
    3. Этот токен потом надо при каждом запросе добавлять в заголовок и проверять на сервере
    4. /api/user/ запрашивается после токена и в ответ надо дать профиль пользователя
    5. Если профиль получен, он сохраняется в store и для пользователя устанавливается переменная loggedIn на true
    6. Всё, пользователь залогинен
    Ответ написан
    1 комментарий
  • Как выяснить причину расхождения по времени?

    Скорее всего такие дела: если даты выводятся через Yii::$app->formatter, то он может выводить дату через ICU.
    https://www.yiiframework.com/doc/guide/2.0/en/outp...
    You can specify date and time formats using the ICU syntax. You can also use the PHP date() syntax with a prefix php: to differentiate it from ICU syntax.


    У меня было так, что в системе стояла старая версия ICU и в ней был бардак с зимним/летним временем, как я понял. После обновления стало ок.
    В другом случае обновиться не получилось, так как не было доступа к серверу, там переписал все даты на "PHP date() syntax", он выводился правильно
    Ответ написан
  • Готовый CSS есть ли такое?

    Зачем резать бутстрап?
    Есть куча легковесных фреймворков

    https://milligram.io/
    https://bulma.io/
    beauter.outboxcraft.com
    https://github.com/box2unlock/look

    И огромный вагон других на любой вкус и цвет.

    Ищете по запросу light css framework
    Ответ написан
    Комментировать
  • Как зафиксироваться footer в конце страницы?

    Футер должен быть приклеен книзу при скролле? Или просто всегда быть внизу при любой длине страницы?
    Если второе, то либо "старое доброе решение":
    <body>
    <div class="page-wrapper">
     
    <div class="page-buffer"></div>
    </div>
    <div class="page-footer">
     
    </div>
    </body>


    html, body {
        height: 100%;
        margin: 0;
        padding: 0;
    }
    .page-wrapper {
        min-height: 100%;
        margin-bottom: -50px;
    }
    * html .page-wrapper {
        height: 100%;
    }
    .page-buffer {
        height: 50px;
    }


    Либо flexbox, либо js
    Ответ написан
  • Как сделать batchinsert yii2 с обновлением дубликатов?

    У меня так сделано в одном из проектов, наверняка можно оптимизировать, но работает

    $fullarray = [.....]; //Массив с данными
     $fields = ['product_id','name','group_id','manufacturer','fullname','code'];
           
    $db = Yii::$app->db;
    $sql = $db->queryBuilder->batchInsert(self::tableName(), $fields, $fullarray);
    $product_insert_count = $db->createCommand($sql . ' ON DUPLICATE KEY UPDATE name = VALUES(name), group_id = VALUES(group_id), manufacturer = VALUES(manufacturer), fullname = VALUES(fullname), code = VALUES(code)')->execute();
    Ответ написан
    Комментировать
  • КАк организовать панельку новичку в Yii2?

    Если без аякса (а он тут и не шибко нужен), и надо, чтобы кнопки писались один раз, то есть два очевидных варианта (и куча неочевидных):
    Вариант 1.
    Кнопки делаем любым виджетом меню, хоть стандартным, хоть своим. Или просто верстаем в основной view-шке.
    С каждой кнопки ссылаемся на один экшн контроллера, передавая get-параметр. К примеру: /site/cabinet?page=status
    В actionCabinet контроллера возвращаем view-шку cabinet, и также передаем в неё параметр page.
    Внутри view-шки cabinet сначала выводим общее меню, потом смотрим, какой параметр получен и в зависимости от него рендерим дочерний view, соответствующий нужному разделу.
    Вариант 2.
    Кнопки делаем своим виджетом, можно унаследовать от стандратных, чтобы назначить в нём ссылки.
    Ссылаемся в меню на разные экшены/контроллеры.В каждом view экшена добавляем виджет с кнопками. Если надо поменять все кнопки - меняем виджет.
    Ответ написан
    3 комментария
  • Как вывести в виджете элементы неограниченного уровня вложенности?

    В целом задача с неограниченно вложенностью решается рекурсией.

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

    class NavWidget extends Widget
    {
    
        public $items = [];
    
        /**
         * Renders the menu.
         */
        public function run()
        {
            $items = $this->items;
            if (!empty($items)) {
                echo Html::tag('ul', $this->renderItems($items));
            }
        }
    
    
        protected function renderItems($items)
        {
            $lines = [];
            foreach ($items as $item) {
                $menu = $this->renderItem($item);
                if (!empty($item['items'])) {
                    $menu .= Html::tag('ul', $this->renderItems($item['items']));
                }
                $lines[] = Html::tag('li', $menu);
            }
            return implode("\n", $lines);
        }
    
    
        protected function renderItem($item)
        {
            $link = 'Тут собранная ссылка';
            return $link;
        }
    }


    P.S. А вообще, всё отлично видно и понятно в стандартных виджетах типа yii\widgets\Menu и в данном случае он всё это сделает прекрасно. Если что-то надо изменить, можно от него унаследоваться.
    Ответ написан
    Комментировать
  • Как реализация вкладки на сайте?

    Тут скорее не вкладки, а фильтрация контента.
    В вашем примере реализована она на серверной стороне - при клике делается ajax-запрос и заменяться контент.
    Тут базовый алгоритм простой - отслеживаем через JS клик по "вкладке", делаем нужный ajax-запрос на сервер, потом заменяем старый контент на полученный в ответе на запрос. Ну и обвешиваем доп. плюшками, типа подсветки активного пункта меню (вкладки), спиннеры при загрузке и прочее.

    Небольшие списки контента можно фильтровать и на клиентской стороне, есть разные js-плагины, к примеру вот:
    https://www.kunkalabs.com/mixitup/
    Ответ написан
    1 комментарий