Bitrix. Переключение видов (шаблонов) каталога товаров

Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Я раньше делал в таком же ключе, только устанавливал переменные в $_SESSION.
Прочитал как описано тут, сделал свою подобную версию.
Только не люблю переключалки с кнопками и через POST, сделал просто через передачу параметра в URL
&sort=price_desc, $view=list или &count=5 (или все вместе в URL)
Нет проблем с лишними перезагрузками, переадресациями и переотправками данных.
Вообщем готовое решение, может не идеальное, но на моем проекте рабочее.
Оформление минимальное. Если кому надо, то вот:

ЗАДАЧА

Делаю переключалки (selectors):
- представления каталога (view)
- количества товаров на странице (count)
- типа сортировки (sort)

Возможные значения переменных:
- view: list, board (названия шаблонов)
- count: 1,2,3,5,all (пока мало товаров для проверки взял такие значения)
- sort: price_asc, price_desc, sort_asc (цена вниз, цена вверх, по порядку)

РЕШЕНИЕ

В файле \bitrix\templates\[имя шаблона сайта]\components\bitrix\catalog\[имя шаблона комплексного компонента]\section.php
прямо со 2-3 строчки вставляем код:

Код
<?
// получаем значения переменных из куки или ставим дефолтные
$view = $APPLICATION->get_cookie('view') ? $APPLICATION->get_cookie("view")  : "board"; 
$sort = $APPLICATION->get_cookie('sort') ? $APPLICATION->get_cookie("sort")  : "sort_asc";
$count = $APPLICATION->get_cookie('count') ? $APPLICATION->get_cookie("count")  : "3"; 

// устанавливаем куки и присваиваем значение соответствующим переменным, если таковые есть в REQUEST
if(isset($_REQUEST["view"]) ) {
   $APPLICATION->set_cookie("view", strVal($_REQUEST["view"]) ); 
   $view = strVal($_REQUEST["view"]) ;
   }
   
if(isset($_REQUEST["sort"]) ) {
   $APPLICATION->set_cookie("sort", strVal($_REQUEST["sort"] )); 
   $sort = strVal($_REQUEST["sort"]) ;
   }

if(isset($_REQUEST["count"]) ) {
   $APPLICATION->set_cookie("count", strVal($_REQUEST["count"]) ); 
   $count = strVal($_REQUEST["count"]) ;
   }

// разобьем переменную sort на две element_sort_field и element_sort_order, и заодно исправим (price -> catalog_PRICE_1)
$ar_sort=explode("_", $sort);
$element_sort_field = ($ar_sort[0] == "price" )  ? "catalog_PRICE_1" : $ar_sort[0];
$element_sort_order = $ar_sort[1];
   
// вывод переменных для проверки   
echo "view=".$view."<br/>";
echo "sort=".$sort."<br/>";
echo "element_sort_field=".$element_sort_field."<br/>";
echo "element_sort_order=".$element_sort_order."<br/>";
echo "count=".$count."<br/><hr/>";

// вывод панели переключалок (с выделением жирным активных значений)
?>
<!--noindex-->
<table class="selectors" width="100%" cellpadding="3" cellspacing="0" border="0">
<tr>
   <td align="left">
      <a<?if($view=="board") :?> style="font-weight:bold"<?endif?> href="<?=$APPLICATION->GetCurPageParam("view=board", Array("view", "sort", "count") )?>" rel="nofollow">Плитка</a> /
      <a<?if($view=="list") :?> style="font-weight:bold"<?endif?> href="<?=$APPLICATION->GetCurPageParam("view=list", Array("view", "sort", "count") )?>" rel="nofollow">таблица</a> 
      
   </td>
   <td align="center">
      <a<?if($count=="1") :?> style="font-weight:bold"<?endif?> href="<?=$APPLICATION->GetCurPageParam("count=1", Array("view", "sort", "count") )?>" rel="nofollow">1</a> / 
      <a<?if($count=="2") :?> style="font-weight:bold"<?endif?> href="<?=$APPLICATION->GetCurPageParam("count=2", Array("view", "sort", "count") )?>" rel="nofollow">2</a> / 
      <a<?if($count=="3") :?> style="font-weight:bold"<?endif?> href="<?=$APPLICATION->GetCurPageParam("count=3", Array("view", "sort", "count") )?>" rel="nofollow">3</a> / 
      <a<?if($count=="5") :?> style="font-weight:bold"<?endif?> href="<?=$APPLICATION->GetCurPageParam("count=5", Array("view", "sort", "count") )?>" rel="nofollow">5</a> / 
      <a<?if($count=="all") :?> style="font-weight:bold"<?endif?> href="<?=$APPLICATION->GetCurPageParam("count=all", Array("view", "sort", "count") )?>" rel="nofollow">все</a>
   </td>
   <td align="right">
      <a<?if($sort=="price_desc") :?> style="font-weight:bold"<?endif?> href="<?=$APPLICATION->GetCurPageParam("sort=price_desc", Array("view", "sort", "count") )?>" rel="nofollow">По цене вниз</a> / 
      <a<?if($sort=="price_asc") :?> style="font-weight:bold"<?endif?> href="<?=$APPLICATION->GetCurPageParam("sort=price_asc", Array("view", "sort", "count") )?>" rel="nofollow">по цене вверх</a> / 
      <a<?if($sort=="sort_asc") :?> style="font-weight:bold"<?endif?> href="<?=$APPLICATION->GetCurPageParam("sort=sort_asc", Array("view", "sort", "count") )?>" rel="nofollow">по порядку</a>
   </td>
</tr>
</table>
<!--/noindex-->


Далее в этом же файле подставляем полученные выше переменные в подключаемый шаблон bitrix:catalog.section


Код
<?$APPLICATION->IncludeComponent(
   "bitrix:catalog.section",
   $view,
   Array(
      ...
      "ELEMENT_SORT_FIELD" => $element_sort_field,
      "ELEMENT_SORT_ORDER" => $element_sort_order,
      ...
      "PAGE_ELEMENT_COUNT" => ($count=="all" ;)  ? "1000000" : $count,
      ...
       ;) ,
   $component
);
?>

 

 

Источник: http://dev.1c-bitrix.ru/community/forums/messages/forum6/topic32373/message285468/#message285468

Назад в раздел

Подписаться на новые материалы раздела:














CAPTCHA