3 способа сделать транслитерацию с помощью SlugBehavior в Yii2 по ГОСТ
Для генерации slug в Yii2 используется поведение SlugBehavior, но без дополнительных настроек у него есть довольно неприятная особенность в сочетании с русским языком, он неверно преобразует некоторые буквы, к примеру: букву ш он переводит в s, а хотелось бы видеть sh. Давайте разберемся как этого избежать.
React input автофокус с помощью ref
Представьте ситуацию, когда вам нужно поставить фокус в инпут. Для input’а, который есть на странице в момент загрузки — никаких проблем, в документации указано как использовать ref. Остается только вызвать метод .focus()
Но если элемента на странице нет, например, по клику на «Логин» появляется модальное окно, и в нем нужно установить фокус в input…
читать далее
Храним Emoji смайлики в mysql используя Yii2
Вначале в конфигурации подключения к БД меняем кодировку подключения на utf8mb4
'components' => [ 'db' => [ 'class' => 'yii\db\Connection', 'charset' => 'utf8mb4', ], ],
Далее заменяем кодировку таблиц базы данных с utf8_general_ci на utf8mb4_general_ci. Вставляем смайлики и радуемся что они корректно сохраняются в таблицах.
Загрузка файла на Яндекс.Диск с помощью REST API и php
Подразумевается, что вы успешно зарегистрировали приложение с доступом к Яндекс Диску, получили токен и даже отправили запрос на получение ссылки для загрузки файла на Яндекс.Диск и записали этот url в переменную link. Теперь дело за малым, нужно только отправить файл PUT методом, но в этом и проблема, в официальной документации этому моменту почти не уделено внимания и вроде все делается довольно просто, так оно и есть на самом деле. Ниже представлен php код, который загрузит файл.
Объединение результатов нескольких потоков в gulp
Собственно не часто, но возникает задача объединить результаты нескольких потоков в один, при этом желательно сохранить порядок, дабы далее выполнять необходимые действия уже с результирующими данными. С этим нам поможет плагин streamqueue.
Webpack source map для удобной отладки
Сегодня на операционном столе сайт с интерфейсом администратора. Причина заболевания: переезд с gulp на webpack.
Первая проблема: удобный source map.
Поехали 😉
Переопределяем __set и __get методы для аттрибута модели Yii2
Не всегда получается красиво сохранить приходящие данные в БД, к примеру такая ситуация может возникнуть при сохранении списка в одну ячейку, чтобы было более понятно приведу часть кода представления:
$form->field($model, 'color')->checkboxList(Yii::$app->params['color'], [ 'item' => function($index,$label,$name, $checked, $value){ return Html::checkbox($name, $checked, [ 'value' => $value, 'label' => '<label class="color ' . $label .'" for="' . $value . '"></label>', 'id' => $value ]); } ]);
Здесь мы выводим список чекбоксов в которых предлагаем выбрать нужные цвета, данное представление нам отправит массив отмеченных значений.
Глобальный .gitignore
Собственно, все указано в заголовке. Вам остается только создать новый .gitignore или указать на существующий.
git config --global core.excludesfile ~/.gitignore
Стандартный url для определенного контроллера
'admin' => 'admin/index', 'admin/<action:[\\w\\-]+>' => 'admin/<action>'
Данный правила можно разместить в секции rules urlManager’а в конфигурации приложения и получить стандартные url для определенного контроллера, в нашем случае для контроллера admin. При этом enablePrettyUrl и enableStrictParsing могут быть установлены в true. Полезно когда нужно, чтобы без дополнительной головной боли работали стандартная сортировка и фильтрация в GridView для admin, а так же срабатывали другие правила для формирования ЧПУ в другом контроллере.
Получить список всех слушателей jQuery объекта
Пост буквально одной строкой! Проблема — производительность.
Почему? Часто навешиваете обработчик и забываете его снять? Работаете в команде, и не можете гарантировать, что кто-нибудь не навесил случайно на $(window).on(‘resize’,..) кучу тяжелых функций?
Посмотрите список всех обработчиков
jQuery._data( window, "events" );
P.S. и да, не забывайте давать своим событиям «namespace», например так:
$(window).on('resize.playstop', myFunction) //потом легко снять $(window).off('resize.playstop')
P.P.S подсмотрел кусочек про _data на StackOverflow.