При вызове метода CMain::IncludeComponent
ему передаются следующие параметры:
- Имя компонента
- Имя шаблона компонента
- Массив входных параметров компонента
- Объект родительского комплексного компонента
- Массив, содержащий дополнительные параметры отображения компонента
Мне бы хотелось обратить внимание читателя на четвертый параметр и на то, как его можно полезно использовать. В документации для разработчиков написано, что этот параметр используется в файлах комплексного компонента и хранит в себе ссылку на объект вызывающего компонента, который доступен через переменную $component
. Теперь сообщу читателю интересную возможность – использовать этот параметр можно и при вызове простых компонентов.
В каких же случаях это будет полезно для разработчика? Ответ на это вопрос следующий: иногда бывает необходимо в шаблоне простого компонента вызывать другой простой компонент. Например, у вас есть лента новостей. Однажды вам понадобилось, чтобы в одной из новостей отображалась галерея изображений, связанная с этой новостью. Решением этой несложной задачи является размещение в шаблоне компонента bitrix:news.detail вызова компонента списка изображений из галереи bitrix:photo.section.
Идентификатор раздела галереи можно передавать через хранить с свойствах инфоблока «Новости», а идентификатор инфоблока галереи в параметрах bitrix:news.detail, но сейчас это для нас не столь важно. Приведу код из шаблона bitrix:news.detail (gall_inside), который вызывает список фотографий из раздела галереи.
PHP
Для нас важен следующий момент: если в коде вызова компонента bitrix:news.detail передать переменную $component
, то этот компонент станет «родительским» компоненту bitrix:photo.section и мы сможем разместить шаблон компонента списка изображений из галереи bitrix:photo.section в папке шаблона компонента bitrix:news.detail.
После размещения шаблона компонента bitrix:photo.section (inner) в папке шаблона компонента bitrix:news.detail (gall_inside) структура папок будет выглядеть как на рисунке ниже.
Возникает вопрос: какую выгоду мы получим от этого? В первую очередь — это удобство: шаблоны компонентов будут храниться в одном месте и их не нужно будет искать по разным папкам, если вдруг нужно будет что-то отредактировать.