Заметки

Переключение шаблона отображения

25.07.2016 23:07:28

Для выполнения поставленной задачи, подготовим массив с воможными типами шаблонов, а также сделаем так, чтобы выбранный вид запоминался для следующего посещения. Разместить этот кусок следует перед вызовом компонента, в моем случае в комплексном компоненте catalog/section/ перед вызовом bitrix:catalog.section, в который мы передаем в качестве имени шаблона переменную $template ($APPLICATION->IncludeComponent("bitrix:catalog.section",$template,Array()....)

	

	<?
		/* Обработка режима отображения шаблона
		* $arTemplateTypes - возможные варианты шаблонов.
		* $arParams["DEFAULT_DISPLAY_TYPE"] - Шаблон по-умолчанию
		*
		*/
		$arTemplateTypes = array("block", "list");
		//			
		if(array_key_exists("display", $_REQUEST) || (array_key_exists("display", $_SESSION)) || $arParams["DEFAULT_TEMPLATE_TYPE"]){
			if($_REQUEST["display"] && (in_array(trim($_REQUEST["display"]), $arTemplateTypes))){
				$display = trim($_REQUEST["display"]);
				$_SESSION["display"]=trim($_REQUEST["display"]);
			}
			elseif($_SESSION["display"] && (in_array(trim($_SESSION["display"]), $arTemplateTypes))){
				$display = $_SESSION["display"];
			}
			elseif($arSection["DISPLAY"]){
				$display = $arSection["DISPLAY"];
			}
			else{
				$display = $arParams["DEFAULT_LIST_TEMPLATE"];
			}
		}
		else{
			$display = "block";
		}
		//Название шаблона, в данном случае имеет префикс catalog_
		$template = "catalog_".$display;
		?>

Выведем нашу переключалку и оформим ее, в данном примере стили оформления отсутствуют, но вы можете лего оформить их самостоятельно под стиль вашего сайта.

	

	<?
		//Шаблон 
		//На каждый из сгенерированных кнопок есть класс с типом отображения(в данном случае block, list), который можно использовать для оформления
	?>
		<div class="display_type">	
			<?foreach($arTemplateTypes as $TemplateType){?>
				<a rel="nofollow" 
				   href="<?=$APPLICATION->GetCurPageParam('display='.$TemplateType, 	array('display'))?>" 
				   class="btn_display_type <?=$TemplateType?> <?=($display == $TemplateType ? 'current' : '')?>">
				<i title="<?=GetMessage("SECT_DISPLAY_".strtoupper($TemplateType))?>"></i>
				</a>
			<?}?>
		</div>

Ну и последнее это lang файл, добавьте эти строки в lang файл шаблона данного компонента /компонент/lang/ru/название_файла_где_размещен_вывод_кнопок

	

		<?
		//Lang Файл
		$MESS["SECT_DISPLAY_BLOCK"]="Плитка";
		$MESS["SECT_DISPLAY_LIST"]="Список";
		$MESS["SECT_DISPLAY_TABLE"]="Таблица";
		?>



Возврат к списку