Записки веб-разработчика, 2 страница
![](/upload/resize_cache/iblock/e58/2d6pw7zh17hnajj0qef4ehuh3i4zuk3b/599_419_1/prervat-vypolnenie-ajax-zaprosa.jpg)
Например при переключении вкладок, часть контента подгружается ajax`ом. И если быстро тыкать по вкладкам, это создаст множество асинхронных запросов и, помимо долгой загрузки, результат может быть неожиданный.
![](/upload/resize_cache/iblock/c78/oytosc21wxfs0hr3fc3mrho7brt17hgn/599_419_1/vyvod-razmera-faylov-obedinyennykh-js-css.jpg)
При оптимизации "больших" сайтов удобно смотреть что можно "выкинуть" в объединённых файлах стилей и скриптов. В конце выводится список подключённых файлов. Добавил туда вывод размера этих файлов.
![](/upload/iblock/2e1/i5bextc6dnmfsvvc3foof474wiiqkvr2/google-pagespeed-obnovilsya.jpg)
Теперь проверяет сайт по огромному количеству показателей: доступность для людей с ограниченными возможностями, древность библиотек, проверяет ошибки в консоли и многое другое.
![](/upload/resize_cache/iblock/6b6/5be40pyr9tc5l2cnqoeeg7c6mwupm8lc/599_419_1/otladka-obrabotchikov-sobytiy-bitriks.jpg)
Столкнулся с проблемой: долгая генерация страницы сервером при небольшом количестве запросов. Проблема была в php коде, который срабатывал по событию.
Редирект с несуществующих страниц пагинации
Пример как быстро сделать редирект со страниц вида /?PAGEN_1=999 на последнюю страницу пагинации.
![](/upload/iblock/223/jaksu6h3zco27tibmn4xph6866t86wt7/pole-dlya-lichnoy-podpisi-avtografa.jpg)
Сделано на canvas, работает как на десктопе, так и на "тач" устройствах. Итоговое изображение можно сохранить в jpg файл.
![](/upload/resize_cache/iblock/08b/3de3w6vzcuk7llfn1zk8y4e2zvpqgbkp/599_419_1/otdelnyy-url-u-torgovykh-predlozheniy.jpg)
Опишу вариант создания отдельного урла для торговых предложений битрикс (почти стандартный). На примере: /catalog/code-section-1/code-section-2/code-element/12345/
![](/upload/resize_cache/iblock/950/dop38gh6o8p2fp6stu3iobtpygwka1e5/599_419_1/kastomnoe-polzovatelskoe-pole-tip-privyazka-k-chemu-libo.jpg)
Достаточно простой способ расширить варианты привязок у пользовательских свойств. Покажу на примере "Привязка к свойствам инфоблока".
![](/upload/iblock/d5b/y2n5lei75do64dyz0zct49lyy00hxppy/podderzhka-tyemnoy-temy-na-sayte.jpg)
Всё очень просто, достаточно использовать медиа-запрос "prefers-color-scheme: dark". Он срабатывает, когда на устройстве пользователя включена тёмная тема.
![](/upload/iblock/ad1/4g33nrt6uhcusou006d9d620i6nkmuo6/v-adminke-perestali-podsvechivatsya-vybrannye-varianty-vypadayushchego-spiska.jpg)
Где-то в последних версиях сломали вёрстку админки, но это легко починить.
![](/upload/resize_cache/iblock/769/643i5yqxxkqti0utu3qyi19job07jtd4/599_419_1/kastomnyy-shablon-url-elementov-infobloka.jpg)
Возникла задача: сформировать URL элемента из его символьного кода и символьного кода связанного элемента другого инфоблока. Грубо говоря шаблон должен быть таким: #PROPERTY_BRAND.CODE#/#ELEMENT_CODE#/, где PROPERTY_BRAND.CODE и будет символьный код из свойства привязки. Сразу скажу, так сделать нельзя, только если кастомить методы ядра.
bitrix d7 получить пользовательские поля раздела
Пример кода для получения пользовательских полей раздела. Пригодится когда нужно быстро получить немного данных, где-нибудь в некешируемой области.
Как загрузить изменения в ветку, не переключаясь на неё
Из любой ветки можно загрузить новые коммиты из удалённого репозитория в другую ветку.
Улучшенный вариант ленивой загрузки js плагинов
Исключает повторную загрузку, загружает плагин только при отображении нужного элемента на экране, срабатывает после аякс запросов.
Передача параметров из cron в php скрипт
Когда скрипт очень большой, его нужно выполнять за несколько шагов. Это можно сделать с помощью передачи параметров при запуске скрипта из командной строки (или в планировщике cron).
Регулярка, изменить мл на литры
Пример готовой функции для замены "150мл" на "0.15л", например, в названиях товаров.
base64 decode\encode online
Раньше висела форма конвертации в правом блоке, решил что там ей не место и закинул в статью.
Аттрибут loading="lazy" теперь стандарт?
validator.w3.org больше не ругается на "неизвестный" аттрибут, а caniuse пишет о поддержке 92%
![](/upload/resize_cache/iblock/616/7qjkrz6vmrtbyzz3afm1mtaebpqn07rw/290_203_1/obnovil-dokumentatsiyu-do-22-2.jpg)
Актуальная документация по исходникам ядра битрикс v22.2, со всеми обновлениями на текущий день.
Ошибка Unknown field definition `ID` for \Bitrix\Main\Site
Данная ошибка может возникнуть во время обновления. Исправляется в будущем обновлении, но что бы починить админку нужно немного подправить ядро.
Как в result_modifier вызвать метод класса
Через метод объекта $this->getComponent() доступны все методы класса.
![](/upload/resize_cache/iblock/f58/nworn4osrzf42fkk7sc6lmqv9j17wlve/290_203_1/oshibka-err-ssl-protocol-error-posle-ustanovki-sertifikata.jpg)
Если после установки ssl сертификата вы получили ошибку ERR_SSL_PROTOCOL_ERROR, обновите nginx, похоже что он слишком старый.
![](/upload/resize_cache/iblock/802/3db91vcjdh1ao7hk6guh0xl0pnblrlys/290_203_1/poluchit-roditelskie-razdely-razdela.jpg)
С помощью старого ядра, методом CIBlockSection::GetNavChain. По сути, там в цикле делаются запросы к БД, с каждым запросом достаётся родительский раздел.
![](/upload/iblock/440/djmskud3lewo0zt7uldrt669crhzrxro/uluchshaem-cls-pokazatel-za-schet-shriftov.jpg)
После загрузки кастомного шрифта, браузер заново рендерит текст на странице и т.к. ширина символов может быть сильно разной, размеры блоков меняются и элементы на сайте "прыгают".
![](/upload/iblock/f9a/n1bqgzj6gq3mqakbn4498qj235h2phpq/oshibka-pri-zagruzke-kartinki.jpg)
Если заглянуть в консоль, там будет ошибка с текстом "Mandatory directory has not been created", возникает при загрузке в админке битрикс.
![](/upload/resize_cache/iblock/d2b/ghpnhcl0vd19zkjmfop975orb94e116m/290_203_1/kastomnoe-svoystvo-privyazki-suzhenie-variantov-v-zavisimosti-ot-drugogo-svoystva.jpg)
Кастомное свойство привязки c небольшим костылём. Сделано для удобного заполнения свойства в админке.
Код для отладки
Обычный дамп со сбросом буфера, ничего такого :)