Разработка

Компонент "Глоссарий" для CMS Bitrix

Компонент "Глоссарий" для CMS Bitrix

Техническое задание: Компонент “Глоссарий” для 1С-Битрикс

Общая информация

Название компонента: custom:glossary

Путь размещения: /local/components/custom/glossary/

Назначение: Отображение терминов и определений с алфавитной навигацией и поиском

1. Функциональные требования

Основные возможности:

  • Вывод списка терминов из инфоблока с группировкой по буквам алфавита

  • Алфавитная навигация (A-Z, А-Я) с подсчетом количества терминов на каждую букву

  • Поиск по терминам через AJAX

  • Детальный просмотр термина в модальном окне или на отдельной странице

  • Поддержка SEF URL

  • Адаптивная верстка

Дополнительные функции:

  • Возможность показа “похожих терминов”

  • Экспорт глоссария в PDF/Excel

  • Избранные термины (с использованием localStorage)

2. Структура файлов компонента

/local/components/custom/glossary/
├── .description.php          # Описание компонента
├── .parameters.php           # Настройки компонента
├── component.php             # Основная логика
├── ajax.php                  # AJAX-обработчик для поиска
├── templates/
│   └── .default/
│       ├── template.php      # Шаблон вывода
│       ├── style.css         # Стили
│       ├── script.js         # JavaScript
│       └── result_modifier.php # Модификатор результатов
└── lang/
├── ru/
│   ├── .description.php
│   └── .parameters.php
└── en/
├── .description.php
└── .parameters.php

3. Параметры компонента (.parameters.php)

Основные параметры:

"IBLOCK_TYPE" => [
"PARENT" => "BASE",
"NAME" => "Тип инфоблока",
"TYPE" => "LIST",
"VALUES" => $arIBlockType,
"REFRESH" => "Y"
]

"IBLOCK_ID" => [
"PARENT" => "BASE",
"NAME" => "Инфоблок",
"TYPE" => "LIST",
"VALUES" => $arIBlock
]

"ELEMENTS_COUNT" => [
"PARENT" => "VISUAL",
"NAME" => "Количество элементов на странице",
"TYPE" => "STRING",
"DEFAULT" => "50"
]

"SORT_FIELD" => [
"PARENT" => "DATA_SOURCE",
"NAME" => "Поле сортировки",
"TYPE" => "LIST",
"VALUES" => ["NAME" => "Название", "SORT" => "Индекс сортировки"]
]

"ALPHABET_TYPE" => [
"PARENT" => "VISUAL",
"NAME" => "Тип алфавита",
"TYPE" => "LIST",
"VALUES" => [
"RU" => "Русский (А-Я)",
"EN" => "Английский (A-Z)",
"BOTH" => "Оба алфавита"
]
]

SEF параметры:

"SEF_MODE" => ["Y", "N"]
"SEF_FOLDER" => "/glossary/"
"SEF_URL_TEMPLATES" => [
"list" => "",
"letter" => "#LETTER#/",
"detail" => "#ELEMENT_CODE#/"
]

Кеширование:

"CACHE_TYPE" => ["A", "Y", "N"]
"CACHE_TIME" => "3600"
"CACHE_GROUPS" => ["Y", "N"]

4. Структура инфоблока

Обязательные поля:

  • NAME - название термина

  • CODE - символьный код

  • PREVIEW_TEXT - краткое описание

  • DETAIL_TEXT - полное описание

  • ACTIVE - активность

Дополнительные свойства:

  • SYNONYMS (строка) - синонимы через запятую

  • CATEGORY (список) - категория термина

  • RELATED_TERMS (привязка к элементам) - связанные термины

5. Логика компонента (component.php)

Основной алгоритм:

// 1. Проверка подключения модулей
if (!CModule::IncludeModule("iblock")) {
ShowError("Модуль инфоблоков не установлен");
return;
}

// 2. Обработка параметров
$arParams = array_merge([
"IBLOCK_ID" => 0,
"ELEMENTS_COUNT" => 50,
"ALPHABET_TYPE" => "RU",
"SORT_FIELD" => "NAME",
"CACHE_TIME" => 3600
], $arParams);

// 3. SEF обработка
if ($arParams["SEF_MODE"] == "Y") {
// Определение текущей страницы и параметров из URL
}

// 4. Получение текущей буквы
$currentLetter = $_GET['letter'] ?? '';

// 5. Кеширование
if ($this->StartResultCache()) {

// 6. Формирование фильтра
$arFilter = [
"IBLOCK_ID" => $arParams["IBLOCK_ID"],
"ACTIVE" => "Y"
];

if ($currentLetter) {
$arFilter["NAME"] = $currentLetter . "%";
}

// 7. Получение элементов
$rsElements = CIBlockElement::GetList(
[$arParams["SORT_FIELD"] => "ASC"],
$arFilter,
false,
["nTopCount" => $arParams["ELEMENTS_COUNT"]],
["ID", "NAME", "CODE", "PREVIEW_TEXT", "DETAIL_PAGE_URL"]
);

// 8. Формирование результата
$arResult["ITEMS"] = [];
$arResult["LETTERS_STAT"] = [];

while ($arElement = $rsElements->GetNext()) {
$firstLetter = mb_substr($arElement["NAME"], 0, 1);
$arResult["LETTERS_STAT"][$firstLetter]++;

if (!$currentLetter || $firstLetter == $currentLetter) {
$arResult["ITEMS"][] = $arElement;
}
}

// 9. Формирование алфавита
$arResult["ALPHABET"] = $this->generateAlphabet($arParams["ALPHABET_TYPE"]);
$arResult["CURRENT_LETTER"] = $currentLetter;

$this->EndResultCache();
}

6. AJAX обработка (ajax.php)

// Поиск терминов по названию
if ($_POST['action'] == 'search') {
$searchQuery = htmlspecialchars($_POST['query']);

$arFilter = [
"IBLOCK_ID" => $_POST['iblock_id'],
"ACTIVE" => "Y",
[
"LOGIC" => "OR",
"NAME" => "%" . $searchQuery . "%",
"PREVIEW_TEXT" => "%" . $searchQuery . "%"
]
];

// Возврат JSON с результатами
}

7. Шаблон вывода (template.php)

Структура шаблона:


<!-- Поиск -->

<!-- Алфавитная навигация -->

<?foreach($arResult["ALPHABET"] as $letter => $data):?>
["
class="letter-link <?=$letter == $arResult['CURRENT_LETTER'] ? 'active' : ''?>">
<?=$letter?>
<?if($data['COUNT']):?>
(<?=$data['COUNT']?>)
<?endif?>
](<?=$data[)
<?endforeach?>

<!-- Список терминов -->

<?if(!empty($arResult["ITEMS"])):?>
<?foreach($arResult["ITEMS"] as $item):?>

###
["><?=$item['NAME']?>](<?=$item[)

<?=$item['PREVIEW_TEXT']?>

<?endforeach?>
<?else:?>
Термины не найдены

<?endif?>

<!-- Модальное окно для детального просмотра -->

&times;

8. JavaScript функциональность

// AJAX поиск
// Модальные окна
// Избранное (localStorage)
// Навигация по клавишам

9. Требования к верстке

  • Адаптивный дизайн (мобильные устройства)

  • Поддержка accessibility (ARIA-атрибуты)

  • CSS Grid/Flexbox для раскладки

  • Анимации переходов

10. Оптимизация и производительность

  • Кеширование запросов к БД

  • Lazy loading для большого количества терминов

  • Минификация CSS/JS

  • Возможность подключения CDN для статики


Результат: Полнофункциональный компонент с файлами .description.php, .parameters.php, component.php, шаблоном, стилями и скриптами, готовый к установке и настройке в админке 1С-Битрикс.


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

🚀 Нужна помощь с сайтом на 1С-Битрикс или Аспро?

Я работаю удалённо по всей России и СНГ. Узнайте цены и условия для вашего города:

Все регионы →