Матвей Земсков

Заметки веб-мастера

Суббота, 05 апреля 2014 17:29

1С-Битрикс: интересная возможность CMain::IncludeComponent при вызове простых компонентов

Оцените материал
(1 Голосовать)

Как известно, при вызове любого компонента на странице сайта под управлением «1С-Битрикс», используется метод CMain::IncludeComponent . Об одной интересной возможности его использования и объединении шаблонов простых компонентов и пойдет речь в этой заметке.

При вызове метода CMain::IncludeComponent ему передаются следующие параметры:

  1. Имя компонента
  2. Имя шаблона компонента
  3. Массив входных параметров компонента
  4. Объект родительского комплексного компонента
  5. Массив, содержащий дополнительные параметры отображения компонента

Мне бы хотелось обратить внимание читателя на четвертый параметр и на то, как его можно полезно использовать. В документации для разработчиков написано, что этот параметр используется в файлах комплексного компонента и хранит в себе ссылку на объект вызывающего компонента, который доступен через переменную $component. Теперь сообщу читателю интересную возможность – использовать этот параметр можно и при вызове простых компонентов.

В каких же случаях это будет полезно для разработчика? Ответ на это вопрос следующий: иногда бывает необходимо в шаблоне простого компонента вызывать другой простой компонент. Например, у вас есть лента новостей. Однажды вам понадобилось, чтобы в одной из новостей отображалась галерея изображений, связанная с этой новостью. Решением этой несложной задачи является размещение в шаблоне компонента bitrix:news.detail вызова компонента списка изображений из галереи bitrix:photo.section.

Идентификатор раздела галереи можно передавать через хранить с свойствах инфоблока «Новости», а идентификатор инфоблока галереи в параметрах bitrix:news.detail, но сейчас это для нас не столь важно. Приведу код из шаблона bitrix:news.detail (gall_inside), который вызывает список фотографий из раздела галереи.

PHP

	<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
	…
	<?if(!empty($arResult["PROPERTIES"]["GALLERY_ID"]["VALUE"])):?>
	<?$APPLICATION->IncludeComponent(
		"bitrix:photo.section",
		"inner",
		Array(…), 
	$component
	);?>
	<?endif;?>
	…

Для нас важен следующий момент: если в коде вызова компонента bitrix:news.detail передать переменную $component, то этот компонент станет «родительским» компоненту bitrix:photo.section и мы сможем разместить шаблон компонента списка изображений из галереи bitrix:photo.section в папке шаблона компонента bitrix:news.detail.

После размещения шаблона компонента bitrix:photo.section (inner) в папке шаблона компонента bitrix:news.detail (gall_inside) структура папок будет выглядеть как на рисунке ниже.

структура папок шаблона компонента

Возникает вопрос: какую выгоду мы получим от этого? В первую очередь — это удобство: шаблоны компонентов будут храниться в одном месте и их не нужно будет искать по разным папкам, если вдруг нужно будет что-то отредактировать.

Скачать шаблон компонента

Прочитано 5703 раз
Добавить комментарий

Комментарии   

 
0 # Виталий 13.08.2014 23:41
Отличная заметка! А как передать переменную из компонента bitrix:news.detail в компонент bitrix:photo.section если последний вызывается в шаблоне первого?
Ответить | Ответить с цитатой | Цитировать
 
 
0 # Матвей 17.08.2014 09:16
Либо через $arParams bitrix:news.detail, либо сохранить значение в свойстве элемента новости, а в шаблоне bitrix:news.detail при вызове bitrix:photo.section вставить значение переменной в код вызова компонента.
Ответить | Ответить с цитатой | Цитировать
 
Мои услуги

Предлагаю следующие услуги:

  • Верстка шаблона сайта из дизайн-макета для CMS «1С-Битрикс Управление сайтом» и CMS “Joomla”
  • Создание форм различной сложности (обратная связь, анкеты и тп) для указанных CMS
  • Настройка и кастомизация компонентов и модулей для указанных CMS
  • Доработка модулей и компонентов для указанных CMS, добавление нестандартного функционала
  • Разработка лендингов (landing-pages)

По все вопросам обращайтесь через форму обратной связи

Скачать

Предлагаю вашему вниманию: