init.php в помощь

Ацамаз  Налдикоев

Программист

Теги: init.php
init.php в помощь

init.php — необязательный файл в рамках структуры файлов Bitrix Framework. Он автоматически подключается в прологе.

Чтобы init.php не превращался в свалку непонятного кода следует код размещать логически группируя по файлам и классам.

Файл init.php в документации.

Перед каждым программистом рано или поздно встает вопрос экономии серверных ресурсов и оптимизации сайта. Каждый по-своему решает эту задачу, благо для этого существует уйма возможностей, начиная от настроек сервера и заканчивая стилем и выдержанностью в написании кода. Об одной из таких, бесспорно, приоритетных задач я вам поведаю в этой статье.

Работу созданного на базе одной из самых популярных на рынке CMS «1С-Битрикс» интернет-магазина необходимо было оптимизировать. В этой статье я затрону лишь один из аспектов нашей работы по оптимизации этого сайта, а именно серверную, путем уменьшения количества запросов к базе данных. Строго говоря, существенной переделки подвергся лишь алгоритм фильтрации товаров каталога.

Свойства фильтруемых товаров могли заполняться заведомо несуществующими в каталоге значениями, излишне трудозатратно для сервера обыгрывалась ситуация отсутствия фильтруемого свойства в текущей группе товаров. И вдобавок ко всему, позволялись выборки с пустым результатом. Сайт пестрил красными надписями «По Вашему запросу ничего не найдено» при поиске по каталогу, как улицы ночного мегаполиса.

И мы, привыкшие доводить начатое до конца и не пасовать перед интересными задачами, стиснув зубы, взялись за работу со свойственным нам энтузиазмом. Почти сразу нам пришла мысль поддерживать свойства и значения фильтра в актуальном состоянии. В этом нам помог чудо файл init.php, расположенный в /bitrix/php_interface/. Его особенность в том, что он выполняется сразу после создания глобальной переменной $APPLICATION и инициализации классов главного модуля ядра, именно поэтому мы можем определить в нем свои классы, функции или обработчики событий. В теле файла мы инициировали два события с одной функцией вызова. Вот так:

AddEventHandler("iblock", "OnAfterIBlockElementUpdate", " actualFilterValues2Props");
AddEventHandler("iblock", "OnAfterIBlockElementAdd", " actualFilterValues2Props");

function actualFilterValues2Props(&$arFields) {
    // код выставления флагов для значений свойств
    // и обновления набора свойств для конкретной группы каталога 
}

Их задача сводится к перехвату событий редактирования и появления нового элемента инфоблока. В тот момент, когда администратор меняет свойства существующего товара или создает новый, срабатывает обработчик, который в свою очередь выполняет функцию actualFilterValues2Props(&$arFields), процесс сбора актуальных свойств товаров и их значений запущен.

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

Комментарии

Тут без вас никак. Поделитесь с нами вашими мыслями

Горячие вакансии