линия

Главная

среда, 5 декабря 2018 г.

Bitrix - сортировка элементов по заполненности

На днях поступила интересная задачка. Сделать фильтр по заполненности элементов. Мол, пусть сперва выходят товары у которых заполнены  определенные свойства. Скажу честно, такой задачи с роду не видывал, но был заинтересован. Почесав лысую башку и погладив усы стал кумекать: с какого боку то подойти к задаче.



Интересный бок нашелся. И я тут же бросился как камикадзе кодить. В итоге получилось то что получилось. Клиент рад.

Итак. Создаем свойство OCCUPANCY ,  у инфоблока где  нужно сортировать по заполненности.  Тип ЧИСЛО.

Далее пишем код:


<?

ini_set('memory_limit', -1);
ini_set('max_execution_time', 0);
set_time_limit(0);
ignore_user_abort(true);
define('IBLOCK_ID', 1);

//echo '<h2>Зполненость</h2>';
$arFilter = array('IBLOCK_ID' => IBLOCK_ID);
$rsItems = CIBlockElement::GetList(array(), $arFilter, false, false, ["ID", "NAME", "PREVIEW_TEXT", "PREVIEW_PICTURE"]);
$count = 0;
while ($arItem = $rsItems->GetNext(false, false)) {
	$count++;
	$arItem['ID'];
	l($arItem);
	$cc = 0;
	if ($arItem['PREVIEW_TEXT'] != "") {
		$cc++;
	}
	if ($arItem['PREVIEW_PICTURE'] > 0) {
		$cc++;
	}

	CIBlockElement::SetPropertyValues($arItem['ID'], IBLOCK_ID, $cc, "OCCUPANCY");
}


//echo '<div>' . $count . '</div>';


В данном примере если у товара есть описание и картинка то OCCUPANCY  = 2 , ессли же заподнено только одно свойство OCCUPANCY  = 1

Ну, тут ничего нет сложного.

Ну и сама сортировка:
$_SESSION['sort']['name'] = 'PROPERTY_OCCUPANCY';
$_SESSION['sort']['order'] = 'DESC';

Ну и мемасик на последок

Комментариев нет:

Отправить комментарий