Модули 1С-Битрикс
Функциональность 1С-Битрикс разложена по модулям, и свой код тоже удобно оформлять модулем. У модуля собственная структура, установщик, ORM-таблицы, страницы в админке и настройки. Раздел начинается с того, как такой модуль устроен. Дальше идут восемь штатных модулей, которые чаще всего попадают в задачи. Веб-формы и списки нужны для ввода данных без программирования. Остальные - рассылки и SEO, реклама, социальные функции, вход через соцсети, поиск и мастер настройки тиражных решений. У большинства из них общие архитектурные привычки. Их стоит знать заранее, а не открывать заново в каждой статье.
Как устроено
Восемь готовых модулей раздела делятся на старый процедурный стиль и современный D7. Проверить это стоит до чтения конкретной статьи. Веб-формы, реклама, четвёрка «Блоги, форумы, опросы» и легаси-часть «Маркетинга» - классические процедурные классы без ORM. Выборка идёт через методы получения списка с перебором результата, а не через сущности и запросы. Email-маркетинг из той же статьи про маркетинг, наоборот, живёт в собственном пространстве имён D7. Смешивать ожидания не стоит: код по мотивам форума выглядит как легаси. Это нормально, а не признак того, что код написан неправильно.
Несколько модулей раздела - не самостоятельное хранилище, а тонкий слой поверх более фундаментального механизма. Без этого факта их поведение кажется случайным. Универсальный список - это инфоблок в специально выделенном типе. Данные читаются и пишутся как в обычном инфоблоке. Миграция со списка на «настоящий» инфоблок не требует переноса данных вообще. Универсальные комментарии и отзывы к карточке товара - это тема форума, технически привязанная к элементу инфоблока. Форум нужен всегда, даже если раздела форума на сайте не видно. Прежде чем искать у модуля отдельное API для данных, стоит задать вопрос. А не инфоблок ли это на самом деле?
Веб-формы и списки - два модуля раздела, которые независимо приходят к одинаковой границе применимости. Это граница между инструментом без кода и кодом. Оба построены для тех, кто не программирует: форма собирает заявки, список ведёт справочник. И у обоих одна и та же оговорка. Как только нужна сложная валидация, нестандартный сценарий или прямое участие в витрине сайта, инструмент подгибать не стоит. Выгоднее взять инфоблок с собственным компонентом или контроллер. Эта граница - не свойство одного модуля, а общий принцип раздела.
Дисциплина «расширяй, а не переписывай» действует здесь на слой выше обычного. Первая статья раздела учит класть свой модуль строго в пользовательский каталог, а не в системный. Иначе обновление ядра его сотрёт. Статья про тиражные решения показывает тот же принцип на шаг дальше. Собственный мастер настройки наследуют от стандартного мастера платформы, переопределяя только специфичные шаги. Типовые шаги (выбор шаблона, импорт демо-данных) достаются готовыми и уже протестированными.
Что нужно сделать
| Нужно | Смотрите |
|---|---|
| Вынести свой код в модуль, который ставится и обновляется | Свои модули |
| Собрать форму обратной связи без программирования | Веб-формы |
| Завести реестр или справочник с правами и бизнес-процессом | Универсальные списки |
| Разослать письма по базе и настроить метатеги страниц | Маркетинг и SEO |
| Крутить баннеры на сайте и считать их показы | Баннерная реклама |
| Открыть на сайте блог, форум или голосование | Блоги, форумы, опросы |
| Пустить вход через соцсети и внешние OAuth-провайдеры | Соцсервисы и OAuth |
| Сделать поиск по сайту и оценки материалов | Поиск и рейтинги |
| Упаковать готовый сайт в решение для установки заказчику | Тиражные решения |
С чего начать
Новичок, которому нужно упаковать код в модуль. Начните со «Свои модули»: структура каталога, установщик, таблицы, настройки, админ-страницы. Там же - частые причины, по которым установка тихо не срабатывает.
Нужна типовая функция без программирования. «Веб-формы» собирают заявки, «Универсальные списки» ведут справочники, «Блоги, форумы, опросы» дают комментарии и отзывы. В каждой статье есть явная граница. После неё инструмент уже не подходит и нужен свой код.
Готовите тиражное решение для маркетплейса. «Тиражные решения» - мастер настройки поверх модуля. И там же - типичные причины, по которым чужая установка решения падает там, где своя работала.
Темы раздела
- Свои модули: структура, установщик, таблицы, админ-страницы - основа, на которую опираются остальные статьи раздела.
- Веб-формы: сбор заявок без кода - до той границы, где нужна сложная валидация.
- Универсальные списки: тот же инфоблок, но с готовым интерфейсом ведения данных для не-программистов.
- Маркетинг и SEO: три разных модуля под одним словом - легаси-подписка, современный Email-маркетинг, SEO-инструменты.
- Баннерная реклама: показ по типам и ключевым словам - модель, которая без объяснения кажется непредсказуемой.
- Блоги, форумы, опросы: четыре старых модуля разом, и их главная сегодняшняя роль - отзывы к товарам через форум.
- Соцсервисы и OAuth: вход через внешние сервисы - настройка из нескольких шагов, где ошибка в любом ломает весь сценарий.
- Поиск и рейтинги: что попадает в индекс, выбор бэкенда и почему переиндексация нужна чаще, чем кажется.
- Тиражные решения: мастер настройки поверх готового решения - для тех, кто пишет не проект, а продукт.
Практика раздела
- Бизнес-процессы в 1С-Битрикс - шаблоны, задачи, работа с данными - шаблоны, задачи, запуск из кода.
- Баннерная реклама на сайте - показ, таргетинг, статистика - зоны показа, ключевые слова, счётчики.
- Сообщества на сайте - форум, блоги, медиабиблиотека - контент от посетителей и его модерация.
- Форма обратной связи в 1С-Битрикс - веб-форма или свой код - веб-формы против своего кода.
- Готовые решения - установка, обновление, разбор последствий - установка чужого решения и его следы.
- Свой модуль в 1С-Битрикс - структура, установка, обновления - структура, установка, языковые файлы.
- Email-маркетинг в 1С-Битрикс - рассылки и их доставка - рассылки и их доставка.
- Поиск по сайту на практике - индекс, настройка, выдача - индекс, настройка, внешний движок.
- Универсальные списки на практике - настройка и вывод - списки поверх инфоблоков.
Частые вопросы
Все штатные модули раздела построены одинаково - через ORM, как современный код?
Нет. Большинство - веб-формы, реклама, блоги-форумы-опросы, легаси-подписка - процедурные классы без D7 ORM, доставшиеся с ранних версий платформы. Исключения - современный Email-маркетинг в собственном пространстве имён D7 и универсальные списки, которые технически являются инфоблоком и потому полностью доступны через ORM инфоблоков. Перед тем как искать объектный API у конкретного модуля, стоит свериться со статьёй - там это указано явно.
Данные модуля устроены непонятно - с чего начать разбираться?
Стоит проверить, не тонкий ли это слой поверх более фундаментального механизма. Универсальные списки - инфоблок в отдельном типе, отзывы к товарам - тема форума, привязанная к элементу. Если это так, дальше работают обычные инструменты инфоблоков или форума, а не поиск несуществующего отдельного API модуля.
Модуль поиска и модуль рейтингов - это одно и то же или разные модули?
Разные модули под одним пунктом сайдбара «Поиск и рейтинги». Поиск строит индекс контента и обслуживает запросы посетителей - это тема почти всей статьи. Рейтинги - отдельный модуль, который добавляет оценки и голоса к контенту, и с индексацией никак не связан технически. В названии темы раздела они соседствуют, потому что оба - про то, как посетители находят и оценивают контент, а не потому что это одна подсистема.
Можно ли рассчитывать на D7 API, если нужна серьёзная кастомизация штатного модуля?
Смотря какого. Для большинства модулей раздела - нет: работа идёт через процедурные классы старого ядра, и это не следствие лени, а то, как модули были написаны изначально. Практический путь при серьёзной кастомизации - зайти на уровень ниже модуля: для списков это прямая работа с инфоблоком через ORM, для типовой формы - собственный компонент с контроллером вместо доработки чужого процедурного кода.
Связанные разделы
- Инфоблоки и данные - фундамент, на котором построены списки и на который опираются комментарии к товарам из этого раздела.
- Ядро D7 - Loader, автозагрузка классов и события, без которых не работает установщик собственного модуля.
- Интеграции - обмен с внешними системами - естественное продолжение темы модулей, которые расширяют платформу.
- Основы разработки - архитектура платформы и структура
/local/- контекст, без которого «Свои модули» читать сложнее.