На днях поступила интересная задачка. Сделать фильтр по заполненности элементов. Мол, пусть сперва выходят товары у которых заполнены определенные свойства. Скажу честно, такой задачи с роду не видывал, но был заинтересован. Почесав лысую башку и погладив усы стал кумекать: с какого боку то подойти к задаче.
Интересный бок нашелся. И я тут же бросился как камикадзе кодить. В итоге получилось то что получилось. Клиент рад.
Итак. Создаем свойство OCCUPANCY , у инфоблока где нужно сортировать по заполненности. Тип ЧИСЛО.
Далее пишем код:
В данном примере если у товара есть описание и картинка то OCCUPANCY = 2 , ессли же заподнено только одно свойство OCCUPANCY = 1
Ну, тут ничего нет сложного.
Ну и сама сортировка:
$_SESSION['sort']['name'] = 'PROPERTY_OCCUPANCY';
$_SESSION['sort']['order'] = 'DESC';
Ну и мемасик на последок
Интересный бок нашелся. И я тут же бросился как камикадзе кодить. В итоге получилось то что получилось. Клиент рад.
Итак. Создаем свойство 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';
Ну и мемасик на последок
Комментариев нет:
Отправить комментарий