Битрикс АПИ. Как вывести по одному элементу из разных разделов инфоблока?

Здравствуйте, господа.
Есть задача - вывести по одному последнему добавленному элементу (в моем случае название элемента и ссылку на файл) из заданных разделов инфоблока.

Использую CIBlockElement::GetList, но в документации сказано, что количество элементов можно указать ключом CNT в ArOrder НО только при заданной группировке. Пытался включить группировку по SECTION_ID - выдает ошибку MySQL.

Может быть есть более элегантное решение?

<?
$arSelect = Array("ID", "IBLOCK_ID", "NAME", "PROPERTY_FILE");//IBLOCK_ID и ID обязательно должны быть указаны, 
$arFilter_old = Array(
	"IBLOCK_ID"=>390,   // id инфоблока
	"SECTION_ID" => array(3768, 3769, 3770, 3771, 3772, 3773, 3774, 3775, 3776), //разделы
	'ACTIVE' => 'Y',  // фильтруем по активности
);

$arOrder = Array('ID' => 'ASC');

$res = CIBlockElement::GetList($arOrder, $arFilter_old, false, Array("nPageSize"=>10), $arSelect);
while($ob = $res->GetNextElement()){ 
	//получаем поля (которые указали в $arSelect)
	$arFields = $ob->GetFields();  
	echo '<a href="'.CFile::GetPath($arFields["PROPERTY_FILE_VALUE"]).'">'.$arFields["NAME"].'</a><br>';
}
?>
  • Вопрос задан
  • 141 просмотр
Решения вопроса 1
Забудьте про группировки.

Вероятнее всего простой перебор разделов и GetList для каждого будет намного быстрее любой попытки сконструировать общий запрос.
Решение не элегантное, не красивое, но быстрое, понятно и рабочее - просто перебирайте разделы и делайте GetList для каждого с лимитом 1 и сортировкой по ID - это будут очень простые и быстрые запросы.

Мне кажется всегда стоит помнить, что ваш код должен работать, а не висеть в рамке на стене галереи искусств.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы