Битрикс: скрытие бокового меню при детальном просмотре товара
23 Декабря 2014

Битрикс: скрытие бокового меню при детальном просмотре товара

Рассмотрим простой пример скрытия бокового меню в карточке товара (при детальном просмотре), который выводится компонентом bitrix:catalog.

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

В моем случае на сайте интернет-магазина в каталоге требовалось скрыть боковое меню с товарными категориями при открытии страницы с товаром. Причина была логичная - экономия свободного пространства и удобство пользователя. Освободив место в дизайне от бокового меню, будет больше рабочего пространства для фотографий, описания товара и любых других необходимых элементов.

Приступим.

Имеем сквозное меню, которое выводится через шаблон сайта в файле header.php. Чтобы скрыть его на странице детального просмотра товара, воспользуемся включением буферизации вывода и методом SetPageProperty, который устанавливает свойства для текущей страницы.

Т.к. свойства страницы задаются в прологе, нам необходимо код вызова меню из header`a перенести в footer.php. А в header`e в месте, где нужно показать меню добавить следующее:

<?$APPLICATION->ShowViewContent('menu_content');?>

Далее для страниц, где хотим запретить показ меню, устанавливаем свойства:

<?$APPLICATION->SetPageProperty('hide_menu', 'Y');?>

Этот код можно добавить в component_epilog.php в папке с шаблоном компонента catalog.element.

В footer`e делаем необходимую проверку:

<?if($APPLICATION->GetProperty('hide_menu') != 'Y'):?>
	<?ob_start();?>	
		<div id="left-menu">
			...тут код вызова меню
		</div>			
		<?$APPLICATION->AddViewContent('menu_content', ob_get_contents());?>
	<?ob_end_clean();?>
<?endif;?>

Получается, если свойство hide_menu НЕ установлено в Y, то с использованием буферизации меню будет выводиться в footer`e, откладываться и в конечном итоге будет выведено по коду выше, где было задано свойством menu_content.

Комментарии

Использую в своей работе