Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Выбор элементов с помощью GetIBlockElementListEx

00 голосов
5
Пытаюсь выбрать с помощью GetIBlockElementListEx элементы инфоблока с истекшим периодом активности (например, между 15.03.2006 и 15.06.2006). Такие инфоблоки существуют, однако при указании в фильтре
Код
array("DATE_ACTIVE_FROM" => date($DB->DateFormatToPHP(CSite::GetDateFormat("SHORT")), mktime(0,0,0,3,15,2006)),
               "DATE_ACTIVE_TO" =>  date($DB->DateFormatToPHP(CSite::GetDateFormat("SHORT")), mktime(0,0,0,6,15,2006)))

функция возвращает 0 значений. Если я увеличиваю период активности элементов инфоблока до текущего дня, то функция возвращает нужное количество элементов. Почему? Как найти элементы с истекшим периодом активности?
Пробовал указывать пустые даты
array("DATE_ACTIVE_FROM" => "", "DATE_ACTIVE_TO" => "")
все равно не возвращает элементы с "истекшим" периодом активности
спросил 25 Апр, 13 от Haro (200 баллов)

5 Ответы

00 голосов
Да, я это видел... Однако в приведенных в той же документации примерах выбираются новости за прошедшие числа... Получается, что у них только фильтрация по DATE_ACTIVE_FROM... а DATE_ACTIVE_TO пустое? неужели нельзя обойти это ограничение. Просто мне надо вытаскивать еще файлы, прикрепленные к элементам, свойства этих элементов... Плюс фильтрацию гибко настраивать. С функцией GetIBlockElementListEx проще получается.
ответил 25 Апр, 13 от Haro (200 баллов)
00 голосов
В документации написано следующее: "Функция GetIBlockElementListEx возвращает активные для текущего сайта элементы из информационных блоков типа type."
Это значит, что, если у элементов истек срок активности, то эта функция и не должна их возвращать.

Советую использовать для получения всех элементов CIBlockElement::GetList и для фильтрации использовать свойства IBLOCK_ACTIVE и/или ACTIVE.
ответил 25 Апр, 13 от thing (200 баллов)
00 голосов
А если попробовать вот так? (на примере архива новостей до текущей даты):

$items = GetIBlockElementListEx("news", Array(), Array(), Array("sort"=>"asc", "ACTIVE_FROM"=>"desc", "ID"=>"desc"), 10, Array("ACTIVE_DATE"=>"", "ACTIVE_TO"=>date($DB->DateFormatToPHP(CLang::GetDateFormat("SHORT")), mktime(0,0,0,date("m"),date("d")-1,date("Y")))));
ответил 21 Июнь, 13 от Shadow (820 баллов)
00 голосов
Пробовал. Проблема в том, что DATE_ACTIVE_TO может датироваться прошлым годом
ответил 25 Сен, 13 от Haro (200 баллов)
00 голосов
Через три года нашёлся вариантец рабочий =))
Цитата
$items = GetIBlockElementListEx("events", Array(), Array(), Array("DATE_ACTIVE_FROM"=>"ASC"), 0, Array(">=DATE_ACTIVE_FROM" => ConvertTimeStamp(mktime(0, 0, 0, $m, 1, $y), "SHORT"), "<DATE_ACTIVE_FROM" => ConvertTimeStamp(mktime(0, 0, 0, $m+1, 1, $y), "SHORT"), "ACTIVE_DATE" => ""));

Ответ на

Цитата
Андрей Рабцевич пишет:
В документации написано следующее: "Функция GetIBlockElementListEx возвращает активные для текущего сайта элементы из информационных блоков типа type."

Это значит, что, если у элементов истек срок активности, то эта функция и не должна их возвращать.

Выходит, что при определённых фильтрах выводит и не достигшие активности элементы.
ответил 25 Дек, 13 от Chy (100 баллов)

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

0 голосов
3 ответов
0 голосов
2 ответов
0 голосов
0 ответов
0 голосов
2 ответов
спросил 31 Март, 14 от Kania (5,180 баллов)
0 голосов
0 ответов