@SteepNET

Вывод нужного количества элементов на странице Битрикс?

Добрый день! Есть метод который выводит заданное количество элементов.
Перед вызовом bitrix:catalog.section
<?
$pageElementCount = "10";
if (array_key_exists("showBy", $_REQUEST)) {
	if ( intVal($_REQUEST["showBy"]) && in_array(intVal($_REQUEST["showBy"]), array(18, 36, 54, 72)) ) {
		$pageElementCount = intVal($_REQUEST["showBy"]);
		$_SESSION["showBy"] = $pageElementCount;
	} elseif ($_SESSION["showBy"]) {
		$pageElementCount = intVal($_SESSION["showBy"]);
	}
}
?>

В компоненте
"PAGE_ELEMENT_COUNT" => "$pageElementCount",

В шаблоне
<div class="text-right">
                    <span class="show_title">Показать по </span>
                    <span class="number_list">
                <? for ($i = 18; $i <= 72; $i+=18) : ?>
                    <a rel="nofollow" <? if ($i == $pageElementCount): ?>class="current"<? endif; ?>
                         href="<?= $APPLICATION->GetCurPageParam('showBy=' . $i, array('showBy', 'mode')) ?>"
                    >
                        <span><?= $i ?></span>
                    </a>
                <? endfor; ?>
                </span>
                </div>


Как избавиться от цикла for() ,просто задавать фиксированные значения?
И вроде бы в сессию не загоняется значения, правильно ли делаю?
  • Вопрос задан
  • 2228 просмотров
Решения вопроса 1
@PetrPo
В сессию пишется, проверил, только не понятно зачем именно в сессию писать и логика в целом...

По умолчанию $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>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы