безделушка
использовать
[CODE][/CODE]
зачем? да просто так.
UPD. обновил согласно замечаний
function getElFieldsByFilter($arFilter,$arSelectFields){ |
$dbRes = CIBlockElement::GetList(array(), $arFilter, false, array('nTopCount' => '1'), $arSelectFields); return $dbRes->Fetch(); } |
использовать
$arCar = getElFieldsByFilter(array('IBLOCK_ID'=>IB_ID_CARS,'ID'=>$carId), array('NAME', 'PROPERTY_TYPE')); |
зачем? да просто так.
UPD. обновил согласно замечаний
Ну это само сабой. Сама функция из разряда, чтобы не скучно было читать код другому разработчику
$arNavStartParams = array("nTopCount"=>1);
согласен, можно добавить чтобы использовал еще кто либо,
в моем случае она юзается с фильтром по id, поэтому больше 1 результата не будет
Евгений Зацепин
arOrder - Необязательный. По умолчанию равен Array("sort"=>"asc";)
arGroupBy - Необязательное. По умолчанию false - записи не группируются.
Андрей Загальский
смысл ее названия и использования лично для меня
это просто прикол,
показывает лень разработчика писать 30 раз код вида
$arOrder = array("ID" => "DESC";);
$arFilter = array('IBLOCK_ID'=>'',"ID"=>"";);
$arGroupBy = false;
$arNavStartParams = array('nTopCount'=>'1');
$arSelectFields = array('NAME');
$dbRes = CIBlockElement::GetList($arOrder,$arFilter,$arGroupBy,$arNavStartParams,$arSelectFields);
while ($arRes = $dbRes->Fetch())
$arEls[] = $arRes;
заменив его кодом в одну строку.
Андрей Загальский , Евгений Зацепин , Антон Пилецкий буду рад увидеть ваши безделушки
Это не лень. Да, обертки для часто используемых подходов писать можно и нужно. Но нужно делать это грамотно. Смысл указывать $arSelect, чтобы сократить количество запрашиваемой информации - если вы выбираете ВСЕ записи, даже не ограничивая выборку?
Молодому требуется помощь:
Не могу добиться Выделения из списка только одного (Первого - с конца) отфильтрованного элемента.
Если использую $arCount = Array("nPageSize"=>1), при false в $arGroup, не срабатывает даже переадресация по условию неопределенности массива (пробовал все - и empty() и is_array()):
<?
CModule::IncludeModule("iblock");
$arSelect = Array("ID", "NAME", "PROPERTY_USER_XML_ID", "PROPERTY_MESS_BEFORE","PROPERTY_FIRST_Q","PROPERTY_FIRST_Q_ANS_1","PROPERTY_FIRST_Q_ANS_2" );
$arFilter = Array("IBLOCK_ID"=>"23", "PROPERTY_USER_XML_ID"=>$xUSER, "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array("SORT"=>"DESC"), $arFilter, Array(), array("nTopCount"=>"1"), $arSelect);
?>
<? if(isset($res)){
while($ob = $res->GetNextElement())
{
$arFields = $ob->GetFields();
$arResult['fields'][] = $arFields;
echo $arFields["ID"], "<br>";
echo "***" .$arFields["CNT"];
}
}
else {
LocalRedirect("/personal/items/");
}
?>
Выдает сообщение, что элемент не найден - см. filter_1.jpg
Если же применяю $arGroup = Array();
То происходит переадресация, при отсутствии удовлетворяющих фильтру элементов:
<?
CModule::IncludeModule("iblock");
$arSelect = Array("ID", "NAME", "PROPERTY_USER_XML_ID", "PROPERTY_MESS_BEFORE","PROPERTY_FIRST_Q","PROPERTY_FIRST_Q_ANS_1","PROPERTY_FIRST_Q_ANS_2" );
$arFilter = Array("IBLOCK_ID"=>"23", "PROPERTY_USER_XML_ID"=>$xUSER, "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array("SORT"=>"DESC"), $arFilter, Array(), array("nTopCount"=>"1"), $arSelect);
?>
<?
while($ob = $res->GetNextElement())
{
$arFields = $ob->GetFields();
if ($arFields["CNT"]>=1):
$arResult['fields'][] = $arFields;
echo $arFields["ID"], "<br>";
echo "***" .$arFields["CNT"];
else:
LocalRedirect("/personal/items/");
endif;
}
?>
Но, если они есть (хоть 1), то возникает ошибка - см. filter_2.jpg
Меняю - на false - и все по кругу...
Может, есть какой-то "Правильный" выход?
1. GetNext() вместо GetNextElement()
2.
arSelectFields будет проигнорирован), а в результат добавляется поле CNT
- количество сгруппированных элементов.
nPageSize
В цикле while при использовании Array("nPageSize"=>1) вызывает ошибку.
Пришлось не группировать. Ибо "CNT" не удается выудить $arFields[ "CNT"] - пусто.
Вот цитата с документации