В сессию пишется, проверил, только не понятно зачем именно в сессию писать и логика в целом...
По умолчанию $pageElementCount = "10", далее
Если в $_REQUEST есть showBy, то
Если showBy соответствует значению 18, 36, 54, 72,
pageElementCount = $_REQUEST['showBy']
пишем в $_SESSION
Если не соответствует
pageElementCount = $_SESSION['showBy']
Ну записали в $_SESSION showBy, затем переходим на другую страницу каталога или убираем из адресной строки параметр showBy, тогда $pageElementCount становится снова 10.
Вопрос. Какой тогда смысл записывать в сессию?
А в целом хоть и код не красивый и с непонятной логикой, но работает)))
Мой вариант:
$arAvailableCounts = array(18, 36, 54, 72);
$pageElementCount = isset($_COOKIE['showBy']) && intval($_COOKIE['showBy']) ? $_COOKIE['showBy'] : $arParams['PAGE_ELEMENT_COUNT'];
if(isset($_GET['showBy']) && $_GET['showBy'] && in_array($_GET['showBy'], $arAvailableCounts)) {
$pageElementCount = $_GET['showBy'];
setcookie('showBy', $_GET['showBy'], 0, SITE_DIR);
}
<div class="text-right">
<span class="show_title">Показать по </span>
<span class="number_list">
<?foreach($arAvailableCounts as $value):?>
<a class="<?=($value == $pageElementCount ? 'current' : '');?>" href="<?=$APPLICATION->GetCurPageParam('showBy='.$value, array('showBy'));?>" rel="nofollow"><span><?=$value;?></span></a>
<?endforeach;?>
</span>
</div>