Я раньше делал в таком же ключе, только устанавливал переменные в $_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
);
?> |
Назад в раздел