Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Перекрытие: Подробное руководство». Вы узнаете экспертные методики работы с перекрытие и научитесь избегать типичных ошибок начинающих разработчиков.
Несмотря на наличие тем для шаблона bitrix24 разработчики не предусмотрели никаких механик позволяющий влиять на это поведение, таким образом для изменения состава тем так или иначе приходится явно использовать папку /bitrix/templates/bitrix24/themes и сохранять эти изменения в системе контроля версий.
Однако подобный вариант является достаточно варварским изменением системных файлов, что не является приемлемым в разработке коробочных версий.
Существует не очень красивый способ, которым можно переопределить стандартные шаблоны не затрагивая стандартные механики.
Для того чтобы этого достичь необходимо:
- Полностью скопировать папку с шаблонами (
/bitrix/templates/bitrix24/themes) - Подменить системный файл по работе с темами (
/bitrix/modules/intranet/tools/theme_picker.php) - Добавить пост-обработку обновленных тем
Проделаем указанные шаги для получения желаемой цели: получение возможности изменять состав стандартных тем.
1. Скопируем файлы директории /bitrix/templates/bitrix24/themes в директорию /local/themes. Эту директорию будем использовать для хранения наших тем.
2. Отредактируем файл config.php таким образом, чтобы в разделе subThemes остались только default и нужные нам темы. Раздел baseThemes изменять не нужно.
3. Из папок dark и light удалим все ненужные папки, кроме нужных нам тем
4. Используя структуру папки local из предполагаемого нами варианта разместим в файле legacy.php фрагмент кода 1.
5. Создадим файл /local/php_interface/classes/Fusion/ThemePicker .php и разместим в нем фрагмент кода 2.
Содержимое файла legacy.php (фрагмент кода 1):
/* Themepicker overload start */
spl_autoload_register(function ($baseClassName) {
if ( $baseClassName != "Bitrix\Intranet\Integration\Templates\Bitrix24\ThemePicker" ) return;
$originalThemePickerContent = file_get_contents(
$_SERVER['DOCUMENT_ROOT']
."/bitrix/modules/intranet/lib/integration/templates/bitrix24/themepicker.php"
);
$originalThemePickerContent = str_replace("class ThemePicker", "class ___VirtualThemePicker", mb_substr($originalThemePickerContent, 5));
eval($originalThemePickerContent);
unset($originalThemePickerContent);
$overrideClassContent = file_get_contents(__DIR__.'/classes/Fusion/ThemePicker.php');
$overrideClassContent = preg_replace('#^<\?(?:php)?\s*#', '', $overrideClassContent);
$overrideClassContent = preg_replace('#extends ([^\s]+)#', "extends ___VirtualThemePicker", $overrideClassContent);
$overrideClassContent = preg_replace('#namespace ([^\s]+);#',
"namespace Bitrix\Intranet\Integration\Templates\Bitrix24;",
$overrideClassContent
);
eval($overrideClassContent);
}, true, true);
/* Themepicker overload end */ Содержимое файла Themepicker.php (фрагмент 2):
<?php
namespace Fusion;
class ThemePicker extends Bitrix\Intranet\Integration\Templates\Bitrix24\ThemePicker
{
public function getThemesPath()
{
return "/local/themes";
}
} Таким образом мы произвели замену стандартного селектора тем.
💡 Экспертное мнение и рекомендации
Практические рекомендации:
- При написании кастомных компонентов для «Перекрытие: Подробное руководство» всегда разделяйте бизнес-логику и представление (шаблон).
- Используйте отладку SQL-запросов через конструкцию
$wpdb->last_queryили стандартный трекер Битрикса, чтобы контролировать нагрузку.
Похожая задача в бизнесе?
Помогу автоматизировать процессы и внедрить ИИ
Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.
или на почту: gorandvas@yandex.ru