| Цитата |
|---|
Алексей пишет: оптимальным ли я способом решаю задачу |
Не совсем. Во-первых, много запросов, во-вторых, перебором ID можно посмотреть элемент любого инфоблока. Я бы сделал как-то так:
| Код |
|---|
$arResult['ITEMS'] = array();
if (is_array($_SESSION['answer']) && count($_SESSION['answer']))
{
foreach ($_SESSION['answer'] as $ID)
$arResult['ITEMS'][$ID] = false;
$res = CIBlockElement::GetList(
false,
array(
'IBLOCK_ID' => ...., // обязательно
'ID' => $_SESSION['answer'],
'ACTIVE' => 'Y',
),
false,
false,
array('ID', 'NAME', 'DETAIL_PAGE_URL')
);
while ($arItem = $res->GetNext(true, false))
$arResult['ITEMS'][$arItem['ID']] = $arItem;
// есть ли ненайденные элементы?
foreach ($arResult['ITEMS'] as $ID => $arItem)
{
if ($arItem === false)
{
$key = array_search($ID, $_SESSION['answer']);
if ($key !== false)
unset($_SESSION['answer'][$key]);
unset($arResult['ITEMS'][$ID]);
}
}
}
// показ
if (count($arResult['ITEMS']))
{
foreach ($arResult['ITEMS'] as $arItem)
{
.......
}
}
|
Возня с $arResult нужна для того, чтобы в дальнейшем было проще оформить этот код в виде компонента, как полагается. Может быть, даже приделать кеширование.