Записки веб-разработчика, 4 страница
position: sticky; фиксация за низ блока
Чаще это свойство используют для "шапок" сайта, но если вы укажете position: sticky; top: 0; блоку, который больше высоты экрана, то часть его контента не будет доступна, пока вы не доскроллите до конца родительского блока.
CSS, JS inline в Битрикс
Добиваю Google Pagespeed, до идеального результата осталось несколько пунктов. На данный момент пришлось "заинлайнить" стили и js для того, чтобы не было лишних запросов к серверу.
Удалить пользователей которые никогда не авторизовывались
Если через форму регистрации наспамило много новых пользователей, то таблицу хорошо бы почистить. Неактивных можно удалить через админку. А вот тех что никогда не авторизовывались, только скриптом.
Ленивая загрузка виджетов Retail Rocket
Их виджеты с рекомендованными товарами блокируют страницу на 7 секунд. Google PageSpeed это очень не нравится. Да и зачем отрисовывать товары сразу, если они, обычно, находятся внизу страницы.
Как найти, откуда устанавливаются мета-теги
Мета-теги страницы обычно устанавливаются через метод SetPageProperty. Использовать его можно сколько угодно раз и в любом месте сайта. Поэтому найти откуда же в итоге установились теги, бывает, крайне сложно.
Загрузка и инициализация API Яндекс карт при скролле
API карт весит много, js код тяжёлый. Загружать сразу - плохая идея. Если карта появляется по клику, в попапе или она находится внизу страницы (т.е. не видна на первом экране), то и загрузку можно отложить до момента, когда карта станет "видна".
Настройка формы фильтрации элементов в админке
Например, при добавлении товаров в заказ или выборе элементов в свойстве-привязке, в окне выбора есть фильтр. Его можно настроить, добавив в него различные свойства, по которым будет происходить фильтрация.
Пользовательское поле для ссылок
Понадобилось сделать поле для раздела инфоблока, в котором администратор мог бы добавлять ссылки (тег </a> с названием). У элементов есть хотя бы тип "строка с описанием", у UF_ полей можно воспользоваться только типом html, но при этом велик шанс, что в поле добавят еще какой-то код.
Ошибка bitrix-env-7.5-0.el7.noarch has missing requires of php-pecl-xdebug
Как-то многовато ошибок после обновления BitrixEnv. Эта возникла при попытке обновить сервер. Решение простое, удалить php-pecl-xdebug3 и установить php-pecl-xdebug
Как переделать пагинацию на ЧПУ
Например с /?PAGEN_1=3 на /page-3/. Казалось бы добавил правило в urlrewrite, поменял компонент system.pagenavigation и готово, но нет.
Как узнать что включен режим правки?
В коде. Есть метод $APPLICATION->GetShowIncludeAreas(), возвращает true если режим правки включен.
Ошибка: Работа с сокетами (check_socket): Fail Connection to ssl
Если у вас настроено битрикс окружение и сертификат LetEncrypt, то при проверке сайта может возникнуть ошибка "Работа с сокетами". Решается обновлением корневых сертификатов.
Получить список статусов заказа
Код запроса в БД для получения STATUS_ID и их название на нужном языке
Проверяем наличие товара на складе
Хоть в битрикс склады и используются только для вывода информации, многие их переделывают под реальные задачи. Например для вывода доступности в регионах (несколько складов под каждый регион). Ядро позволяет очень гибко проверить наличие на складах, покажу на примерах.
Как вывести элементы инфоблока без учета активности
Для вывода как активных, так и неактивных элементов, нужно в фильтр передать ACTIVE = ''
Микроразметка картинок с ленивой загрузкой
Возник вопрос, если путь картинке находится в data-src, то как добавить микроразметку изображения?
Быстрая минификация css для bitrix
Идея в том, чтобы взять готовую php библиотеку для минификации css и рекурсивно пройтись им по всем css файлам шаблона, создавая min копии, которые битрикс подхватывает автоматически.
could not start session because headers have already been sent
Ошибка чаще всего возникает либо из-за лишних символов (например пробел перед <?php), либо если файл сохранен в кодировке UTF8 с BOM.
jquery получить имя файла input file
Если надо кастомный вид поля загрузки файла (почти всегда), то само поле можно скрыть и работать с ним с помощью js
Загрузка js по событию начала активности пользователя
Я всё мучаю загрузку яндекс карт. Уж слишком они тяжелые, сразу грузить нельзя, а при открытии они загружаются очень долго.
Не отображается iframe, хотя заголовок x-frame-options отсутствует.
Столкнулся с тем, что при любом значении заголовка x-frame-options, iframe не отображается на других сайтах. Удаление заголовка так же не помогло.
Intersection Observer API, плавное появление элементов
Экспериментальный скрипт добавления анимации появления элементов при сколле. Использовать только для опытов)
htaccess редирект с пробелом и кириллицей в URL
При таком URL может возникнуть проблема, что правило не будет обрабатываться, т.к. в браузере адрес в одном виде, а сервер его понимает иначе. Решение простое: URL нужно взять в кавычки, а кириллицу писать как есть без URL-кодирования.
Рейтинг в виде звёзд, по-быстрому
Берем svg иконки звезд, далее в зависимости от рейтинга, проверяем на php какая иконка нужна (закрашенная или пустая) и выводим её
В заказе ограничить выбор типа плательщика
Например, стоит задача ограничить выбор пользователям, которые зарегистрированы как юр. лица. (запретить оформлять как физ лицо)
jquery поиск выбранного input:focus
Варианта два: $('input:focus'), либо при клике на input добавлять ему класс.
js, как узнать кол-во блоков в ряду
Решение достаточно простое: берем ширину родителя и ширину блоков, делим одно на другое и получаем кол-во блоков, которое может поместиться в одной строке. Возможно есть более правильное решение, не знаю.
Как в битрикс обновить множественное свойство Файл у элемента?
Если нужно заменить одну из картинок с сохранением порядка, можно сделать это напрямую, работая с \Bitrix\Iblock\ElementPropertyTable
Главный модуль, история изменений
Сохранил список изменений главного модуля на всякий случай, вдруг кому пригодится.