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

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

Немного о веб-технологиях

Мой блог содержит заметки о различных веб-технологиях, как клиентских, так и серверных. Здесь будут раскрыты вопросы html-верстки, программирования на javaScript и jQuery,разработки на PHP. Не останутся без внимания популярные системы управления сайтом «1С-Битрикс», Joomla и другие. О работе с ними, я также буду писать.

Мои заметки предназначены в основном для начинающих веб-мастеров. Несмотря на это, опытные разработчики также найдут здесь что-нибудь интересное для себя.

В своем блоге я собираюсь публиковать статьи о современных веб-технологиях (HTML5, CSS3 и других). Если в процессе работы над проектами я открываю для себя «свежее» решение какой-либо задачи, я записываю сюда информацию об этом, что позволяет мне при необходимости применять полученные знания в будущем.

Надеюсь информация будет полезна для посетителей.

 
Четверг, 27 марта 2014 12:01

Используем массив-фильтр внутри шаблона комплексного компонента

Оцените материал
(4 голосов)

Иногда требуется использовать фильтрацию элементов по каким-либо свойствам внутри комплексного компонента (например, bitrix:news). Предположим, что нужно при загрузке страницы показывать элементы инфоблока, привязанные к идентификатору города, который хранится в массиве $_SESSION. Причем это нужно дедать не используя компонент bitrix:catalog.filter, который встроен в комплексный компонент bitrix:news. Казалось бы, что ничего сложного нет, создаем массив и передаем его в качестве фильтра ($arParams["FILTER_NAME"]) в вызов bitrix:news.list.

PHP

/*файл news.php комплексного компонента*/

$arPropFilter = Array(
	"PROPERTY_CITYPROP" => $_SESSION["CITY_ID"],
);

$APPLICATION->IncludeComponent(
        "bitrix:news.list",
        "",
        Array(
		…
		"FILTER_NAME" => "arPropFilter",
		…		
		),
        $component
    );

Приведенный выше код в комплексном компоненте корректно работать не будет!

Чтобы все работало правильно, нужно поместить массив с условиями фильтрации в глобальную область видимости (массив $GLOBALS). В итоге корректный код будет выглядеть следующим образом.

PHP

/*файл news.php комплексного компонента*/

$GLOBALS["arPropFilter"] = Array(
	"PROPERTY_CITYPROP" => $_SESSION["CITY_ID"],
);

$APPLICATION->IncludeComponent(
        "bitrix:news.list",
        "",
        Array(
		…
		"FILTER_NAME" => "arPropFilter",
		…		
		),
        $component
    );

Однако, хочу обратить ваше внимание: если вызвать простой компонент bitrix:news.list на странице сайта с фильтром, то даже без размещения его в $GLOBALS все будет работать без проблем.

Прочитано 17329 раз
Свежие заметки
Наверх