Несмотря на наличие тем для шаблона bitrix24 разработчики не предусмотрели никаких механик позволяющий влиять на это поведение, таким образом для изменения состава тем так или иначе приходится явно использовать папку /bitrix/templates/bitrix24/themes
и сохранять эти изменения в системе контроля версий.
Однако подобный вариант является достаточно варварским изменением системных файлов, что не является приемлемым в разработке коробочных версий. Существует не очень красивый способ, которым можно переопределить стандартные шаблоны не затрагивая стандартные механики.
Для того чтобы этого достичь необходимо:
- Полностью скопировать папку с шаблонами (
/bitrix/templates/bitrix24/themes
) - Подменить системный файл по работе с темами (
/bitrix/modules/intranet/tools/theme_picker.php
) - Добавить пост-обработку обновленных тем
Проделаем указанные шаги для получения желаемой цели: получение возможности изменять состав стандартных тем.
- Скопируем файлы директории
/bitrix/templates/bitrix24/themes
в директорию/local/themes
. Эту директорию будем использовать для хранения наших тем. - Отредактируем файл
config.php
таким образом, чтобы в разделеsubThemes
остались толькоdefault
и нужные нам темы. РазделbaseThemes
изменять не нужно. - Из папок
dark
иlight
удалим все ненужные папки, кроме нужных нам тем - Используя структуру папки
local
из предполагаемого нами варианта разместим в файлеlegacy.php
фрагмент кода 1. - Создадим файл
/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";
}
}
Таким образом мы произвели замену стандартного селектора тем.