Для выполнения поставленной задачи, подготовим массив с воможными типами шаблонов, а также сделаем так, чтобы выбранный вид запоминался для следующего посещения. Разместить этот кусок следует перед вызовом компонента, в моем случае в комплексном компоненте 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"]="Таблица";
?>