ПН-ПТ: с 10 до 17
Оставить заявку

кейс по Разработке кастомных блоков для Сайтов24 на 1С-Битрикс: Управление сайтом (бус)

Время чтения: 7 мин

Создание пользовательских блоков для Сайтов24 на платформе Битрикс - это отличный способ добавить функциональные элементы на веб-сайт. В данном кейсе мы расскажем о нашем примере разработки блока для отображения кода с подсветкой синтаксиса.

В качестве примера приведенного в статье, мы разработаем текстовый блок с подсветкой синтаксиса языков программирования.


Документация:

Настройка админ-панели:


Для начала работы требуется доступ к админ-панели БУСа и к локальной директории. В админ-панели следуем следующим шагам:

  1. Открываем раздел кэширования (Пункт настроек в меню слева)
  2. Выбираем "Автокэширование".
  3. В разделе выше "Очистка файлов кэша" выставляем чекбокс только напротив пункта "Сайты24".

Здесь нам больше ничего не понадобится.

Создание локальной директории и регистрация блока:

Структура директории, где происходит настройка и регистрация блока подробно описана в документации, если вкратце, то нас интересует /bitrix/blocks/<имя вашего каталога>

  1. Мы создадим иерархию каталогов пользователь → проект, дабы в будущем облегчить поддержку кода, по этому переходим в /bitrix/blocks/ и создаем каталог, который в дальнейшем будет ассоциироваться с вами. В нем создаем еще один каталог с произвольным названием проекта, пусть будет 1.highlight.
  2. В этом каталоге происходит регистрация блока (файл .description.php), а также здесь располагается верстка нашего блока (файл block.php)

Файл манифеста .description.php

В этом файле описывается функциональная часть нашего блока: переменные, атрибуты и стили, которые можно будет настроить в конструкторе.

Ниже представлен наш пример:

<?php
//блокируем выполнения файла в случае открытия по прямой ссылке на всякий случай
if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) {
    die();
}

use \Bitrix\Main\Localization\Loc;

return array(
  //общее описание блока
    'block' => array(
   	 'name' => 'Подсветка синтаксиса', //название нашего блока в конструкторе
   	 'section' => array('other'), //категория в конструкторе
    ),
  //описание нодов блока
    'nodes' => array(
	//селектор элемента
   	 '.landing-block-node-code' => array(
   		 'name' => 'Код', //название параметра для редактирования в конструкторе
   		 'type' => 'text', //тип параметра, в нашем случае простой текст
   	 ),
    ),
  //описание возможных стилей нодов блока
    'style' => array(
	//у нас нет специфических настроек, лишь дефолтные для всего блока в целом
   	 'block' => array(
   		 'block-default',
   	 ),
	/*
	Вообще, после блока 'block' может находиться блок 'nodes',
	где так же как и для описания нодов пишется селектор,
	и далее описываются какие стили могут быть изменены в конструкторе вплоть до анимации появления */
    ),
  //описание возможных атрибутов
    'attrs' => array(
   	 '.landing-block-node-code-container' => array(
   		 'name' => 'Язык', //название параметра для редактирования в конструкторе
   		 'type' => 'dropdown', //тип параметра, у нас выпадашка, ниже описаны варианты
   		 'attribute' => 'data-language', //название атрибута
   		 'items' => array(
   			 array('name' => 'Авто', 'value' => 'auto'),
   			 array('name' => 'html', 'value' => 'xml'),
   			 array('name' => 'bash', 'value' => 'bash'),
   			 array('name' => 'php', 'value' => 'php'),
   			 array('name' => 'javascript', 'value' => 'javascript'),
   			 array('name' => 'css', 'value' => 'css'),
   			 array('name' => 'json', 'value' => 'json'),
   			 array('name' => 'sql', 'value' => 'sql'),
   		 ),
   		 'value' => 'auto', //значение по умолчанию
   	 )
    ),
  //сторонние подключения
  /*
  В апи Битрикса написано, что в папке с блоком можно разместить файлы script.js/style.css, которые подгружаются с блоком, но я не рекомендую так делать,
  потому что при каждом изменении этих файлов придется перерегистрировать блок
  (обновлять кэш и удалять его с шаблона и ставить заново),
  чего лишен вариант указать наши файлы стиля и js в этом блоке,
  так как указанные таким способом модули подгружаются на страницу методом BX.loadScript,
  из-за чего не кэшируются, т.е. их можно обновлять "на ходу".
  В нашем случае используется локальная директория local со всеми файлами проекта, которые можно вынести.
  */
    'assets' => array(
   	 'css' => array(
   		 'https://bambit.ru/local/blocks/highlight/default.min.css', 'https://bambit.ru/local/blocks/highlight/github-dark.css',
   	 ),
   	 'js' => array(
   		 'https://bambit.ru/local/blocks/highlight/highlight.min.js', 'https://bambit.ru/local/blocks/highlight/highlightjs-copy.min.js', 'https://bambit.ru/local/blocks/highlight/main.js',
   	 ),
   	 'ext' => array(
   		 'landing_form',
   	 ),
    ),
);
Файл верстки block.php

Во втором файле, block.php, описывается верстка нашего блока. PHP расширение он имеет не случайно - в нем можно использовать динамический контент или выводить определенные данные.

Для нашего блока это будет:

<section class="landing-block g-pt-auto g-pb-auto">

<div class="landing-block-node-code-container js-animation fadeIn landing-semantic-text-medium g-pb-1 container g-max-width-container g-color g-font-weight-400 g-font-size-18" style="display: flex;">
<pre><code class="landing-block-node-code"></code></pre>
</div>
</section>
В блоке можно и даже нужно использовать встроенные стили ядра Битрикс, дабы облегчить загрузку пользователя стилями.

На этом основное взаимодействие с системой Битрикс закончено.

Внешние подключенные модули

Внешние подключаемые модули не имеют никаких специфических действий, это обычный js и css код. Их мы подключили в файле манифеста, в блоке assets.

Переходим туда, где хранятся наши внешние модули.
У нас здесь четыре файла библиотеки: highlight.js: highlight.min.js, default.min.css, github-dark.css.
И один файл плагина для библиотеки: highlightjs-copy.min.js. Данная библиотека доступна на сайте highlightjs.org, а плагин доступен на GitHub: https://github.com/arronhunt/highlightjs-copy . Входной точкой для применения этой библиотеки является файл main.js.

document.addEventListener('DOMContentLoaded', function () {

hljs.addPlugin(new CopyButtonPlugin({
lang: 'ru',
}));
document.querySelectorAll('div.landing-block-node-code-container').forEach((elem) => {
let language = elem.getAttribute('data-language');
elem.querySelectorAll('pre code').forEach((el) => {
el.querySelectorAll('br').forEach((br) => {
br.remove();
});
if (language !== 'auto') {
el.classList.add('language-' + language);
}
hljs.highlightElement(el);
});
});
});

Обновление кэша и проверка блока

После добавления всех этих файлов необходимо вернутся в админ панель и нажать кнопку "Начать" для обновления кэша, после этого ваш новый блок появится в конструкторе. В дальнейшем, если потребуется обновить блок, стоит понимать, что любое изменение в разделе /bitrix/blocks/ требует сброса кэша и перерегистрации блока (удалить из шаблона и поставить заново), а редактирование внешних зависимостей не требует таких действий.

Заключение

Теперь у нас есть пользовательский блок для отображения кода с подсветкой синтаксиса в Сайтов24 на Битрикс. Вы можете использовать этот подход для создания различных интересных и полезных элементов на вашем веб-сайте.

Трудозатраты:

~ 4 часа разработчика

Кейс создан в рамках услуги
“Разработка блоков для Сайтов24
на 1С-Битрикс: Управление сайтом (БУС)”
Читайте укороченную версию кейса
и следите за нашими релизами
в Telegram

CRM-форма появится здесь

Другие наши кейсы