Карточки одинаковой высоты в Bootstrap 4

Иногда требуется, чтобы блоки однотипного контента, помещенного в одну строку, имели одинаковую высоту, например, в случае формирования товарного каталога или карусели товаров. Реализовать это можно с помощью такого кода:

<div class="row equal">
    <div class="col-12 col-md-4 d-flex pb-3">
        <div class="card">
             ........
        </div>
    </div>
</div>

Икононочные шрифты в актуальном фреймворке

Как известно, из Bootstrap 4 выпилили иконочный фонт. Хорошее решение — сгенерировать свой набор из тех пиктограмм, которые реально нужны. И поможет в этом fontello.com. А если каких-то из готовой библиотеки не хватает, то можно добавить кастомные в svg. И еще один хороший фонтовый сервис поможет подготовить файлы и код для того, чтобы не подгружать шрифты с Гугла. Это небольшое разъяснение будет тут не лишним.

Подключаем Google Recaptcha в PHP-коде

Довольно простой способ прикрутить recaptcha к сайту с проверкой без использования curl:

$verifyResponse = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$secret.'&response='.$_POST['g-recaptcha-response']);
$responseData = json_decode($verifyResponse);
if($responseData->success) ...

Полезно явно указать язык при вызове скрипта
<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit&hl=ru" async defer>

Два варианта сделать рекапчу адаптивной:

А еще лучше — использовать Invisible recaptcha. Вот так можно подружить ее с Bootstrap, когда используется валидатор форм.

Компактный вывод блоков разной высоты в несколько колонок

Найдена и опробована в действии неплохая masonry-библиотека Salvattore, которая легко внедряется в проект, например, с использованием bootstrap. В CSS-код с нашей стороны было внесено маленькое дополнение для создания отступов у колонок:

#grid .size-1of2:nth-child(2n) {
    margin-left: 10%;
}
#grid .size-1of3:nth-child(3n+2) {
    margin-left: 5%;
    margin-right: 5%;
}

Действующий пример можно посмотреть здесь.

Автоматическое кадрирование изображений

Инновационная фича — автоматический кроп, основанный на анализе информативности областей изображения. Обязательно испробуем, ведь генерация качественных тамбнейлов заданной геометрии — нетривиальная и архиполезная вещь.

Список с множественным выбором на jQuery

Понравился плагин Chosen, который решили использовать для админки нового движка. Плагин старенький, но не потерявший своей актуальности. Прост в установке и является отличной заменой стандартному multiple-select’у. Выбранные опции выводятся в виде боксов с возможностью удаления. Реализован быстрый поиск по всему списку, что весьма актуально при большом количестве позиций.

Chosen - Select Box Enhancement Plug-in

Менеджер файлов для TinyMCE 4x

Перепробовав для реализации современной админки несколько вариантов менеджеров загрузки картинок, остановили свой выбор на Responsive filemanager. Бесплатен, прост в установке, имеет приятный дизайн, поддерживает множественную загрузку файлов.

Responsive FileManager

Некоторые особенности работы с сессиями

Сюрприз #1. В Debian Linux отключен контроль PHP за удалением сессий. Разработчики почему-то решили, что эту задачу надо решать с помощью cron, а создатели ISP Manager этого не учли, т.е. в стандартной конфигурации подобного задания нет. Лечится это элементарно — установкой session.gc_probability = 1 в php.ini с последующим рестартом Apache. Не проделав этого легко получить переполнение файловой системы (а вернее — inodes).

Сюрприз #2. Продление времени жизни сессии определенного сайта оказалось нетривиальной задачей. Можно попытаться задать его в php-скрипте:
$expiry = 60*60*24*30; // 30 дней храним сессию
ini_set('session.gc_maxlifetime', $expiry); // количество секунд, после чего данные будут считаться 'мусором' и зачищаться
ini_set('session.cookie_lifetime', $expiry); // период хранения куки в секундах

Но тут выясняется, что если сессии сохраняются в стандартной директории, то у сборщика мусора PHP с установками, рассчитанными на меньшее время хранение, более высокий приоритет, и он все равно удалит все файлы, которые сочтет устаревшими. Так что эти установки без переопределения параметра session.save_path (директории, куда будут записываться сессии) бессмысленны. А в этом случае нужно еще озаботиться написанием собственной процедуры удаления устаревших сессий, которую будет запускать крон. Так что самым простым и действенным методом является увеличение параметра session.gc_maxlifetime для сборщика мусора в php.ini, который, увы, будет распространяться на все сайты данного веб-сервера.

Установка мобильной версии интернет-магазина в Битриксе 12.5.11

Настройка wap-версии магазина оказалась увлекательным квестом. Пришлось изрядно погуглить, чтобы найти решение. Дополнение от Битрикса «Мобильная версия сайта» не вполне совместимо с новой версией движка. Но все решаемо.

Continue reading