()Сделал сортировку товара вот по этому уроку , данные из $_GET засовываю в сессию пользователя чтобы сортировка сохранялась при хождении по страницам (в постраничной навигации) каталога, для этого в init.php прописал такой код:
Сама форма расположена в шаблоне компонента catalog.section выгладит так:
функции
и
Просто подсвечивают либо делают выбранным элемент выпадающего списка, если параметры из $arParams совпадают с параметрами пункта списка. Например этот пункт будет выделен если $arParams['ELEMENT_SORT_FIELD'] = shows и $arParams["ELEMENT_SORT_ORDER"] = DESC. <option <?=ShowSelected("shows","DESC",$arParams['ELEMENT_SORT_FIELD'],$arParams["ELEMENT_SORT_ORDER"] ?> value="shows_down" >популярности (по убыванию)</option> . Как раз-таки этот момент и не работает. Я думаю это из-за кеша либо из-за ошибок в init.php, но я не пойму как правильно изменить мой код так чтобы форма перестала кешироваться?
| Код |
|---|
/*Засовываем переданные через GET параметры сортировки и количество элементов на странице в сессию пользователя*/
AddEventHandler("main", "OnPageStart", Array("CatalogFilterFromSessionClass", "CatalogFilterFromSession"));
class CatalogFilterFromSessionClass
{
public function CatalogFilterFromSession()
{
if(isset($_GET['sort']))
{
if ($_GET["sort"] == "price")
{
session_start();
$_SESSION['ELEMENT_SORT_FIELD'] = 'catalog_PRICE_1';
}
elseif($_GET["sort"] == "name")
{
session_start();
$_SESSION['ELEMENT_SORT_FIELD'] = 'name';
}
elseif ($_GET["sort"] == "shows")
{
session_start();
$_SESSION['ELEMENT_SORT_FIELD'] = 'shows';
}
}
if(isset($_GET["long_lists"]))
{
session_start();
$_SESSION['PAGE_ELEMENT_COUNT'] = $_GET["long_lists"];
}
if(isset($_GET["sort_order"]))
{
session_start();
$_SESSION['ELEMENT_SORT_ORDER'] = $_GET["sort-order"];
}
}
} |
| Код |
|---|
<div class="shown">
<p>Показать по:</p>
<a <?=ShowSelectedLongList("10",
$arParams["PAGE_ELEMENT_COUNT"]); ?>
href="<?=$APPLICATION->GetCurPage();?>?long_lists=10">10</a>
<a <?=ShowSelectedLongList("20",
$arParams["PAGE_ELEMENT_COUNT"]); ?>
href="<?=$APPLICATION->GetCurPage();?>?long_lists=20">20</a>
<a <?=ShowSelectedLongList("40",
$arParams["PAGE_ELEMENT_COUNT"]); ?>
href="<?=$APPLICATION->GetCurPage();?>?long_lists=40">40</a>
<a <?=ShowSelectedLongList("60",
$arParams["PAGE_ELEMENT_COUNT"]); ?>
href="<?=$APPLICATION->GetCurPage();?>?long_lists=60">60</a>
<p class="sorted">Сортировать по:</p>
<fo rm id="section-sort-form" method="get" action="<?=$APPLICATION->GetCurPage(); ?>" >
<select name="sort" id="sort-select" >
<option
<?=ShowSelected("catalog_PRICE_1","ASC",$arParams['ELEMENT_SORT_FIELD'],$arParams["ELEMENT_SORT_ORDER"]);
?> value="price_up" >возрастанию цены</option>
<option
<?=ShowSelected("catalog_PRICE_1","DESC",$arParams['ELEMENT_SORT_FIELD'],$arParams["ELEMENT_SORT_ORDER"]);
?> value="price_down" >убыванию цены</option>
<option
<?=ShowSelected("name","ASC",$arParams['ELEMENT_SORT_FIELD'],$arParams["ELEMENT_SORT_ORDER"])
?> value="name_up" >алфавиту (по возрастанию)</option>
<option
<?=ShowSelected("name","DESC",$arParams['ELEMENT_SORT_FIELD'],$arParams["ELEMENT_SORT_ORDER"])
?> value="name_down" >алфавиту (по убыванию)</option>
<option
<?=ShowSelected("shows","ASC",$arParams['ELEMENT_SORT_FIELD'],$arParams["ELEMENT_SORT_ORDER"]);
?> value="shows_up" >популярности (по возрастанию)</option>
<option
<?=ShowSelected("shows","DESC",$arParams['ELEMENT_SORT_FIELD'],$arParams["ELEMENT_SORT_ORDER"]);
?> value="shows_down" >популярности (по убыванию)</option>
</select>
</form>
</div> |
| Код |
|---|
ShowSelectedLongList () |
| Код |
|---|
ShowSelected() |
Всё сбудется, стоит только расхотеть...