Создание своего компонента
Собственные компоненты размещаются в каталоге /local/components/<vendor>/<name>/ и наследуют базовый класс CBitrixComponent. Имя PHP-класса компонента обязано быть уникальным во всем проекте во избежание фатальной ошибки повторного объявления, а логика выборки должна быть полностью изолирована от вывода в шаблоне.
Прогресс хранится в этом браузере. Войдите, чтобы сохранить его в аккаунте.
Что нужно понимать
-
1
Размещение в /local/components
-
2
Namespace компонента
-
3
Наследование от CBitrixComponent
Материалы
Официальная документация
Проверь себя
Скопировали компонент в соседнюю папку, поправили запросы, и страница с обоими компонентами падает с «Cannot declare class». Почему?
Ядро находит класс не по имени, а включая class.php и сравнивая список объявленных классов до и после. Два class.php с одним именем класса — это повторное объявление. Имя класса должно быть уникальным на весь проект, обычно с префиксом namespace компонента.
Заказчик не видит новый компонент в визуальном редакторе, хотя на странице через IncludeComponent() он работает. Где искать?
В .description.php: без ключа PATH компонент не попадает в дерево редактора, а сам файл в работе компонента не участвует, поэтому на странице всё работает. Проверьте PATH и то, что ID первого уровня не из зарезервированных.
В компоненте есть и class.php, и component.php. Что выполнится?
Только class.php. initComponent() сначала ищет класс, и component.php проверяется лишь когда класса не нашлось. Смешивать два стиля в одной папке бессмысленно.
Чем плохо тащить CIBlockElement::GetList() в template.php, если это работает?
Шаблон выполняется только при сборке кеша и копируется в шаблон сайта при кастомизации; логика в нём не кешируется отдельно, не переиспользуется и живёт в двух копиях после первого копирования шаблона. Данные собирает class.php, шаблон получает готовый $arResult.
Не сходится?
Спросите ассистента BXMax: он знает документацию и материалы сайта по этой теме.
Знаете материал лучше?
Предложите ссылку: после проверки она появится в этом разделе.
Войти, чтобы предложить