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

как правильно инклюдить шаблон

00 голосов
4
Имеется стандартный компонент photo.random, необходимо переделать его так чтобы он выводил все фотографии.

поидее надо поменять 2 строки кода. где я ошибся?

Что имеем:

$rsIBlockElement = CIBlockElement::GetList($arSort, $arFilter, false, false, $arSelect);
$rsIBlockElement->SetUrlTemplates($arParams["DETAIL_URL"]);
if($arResult = $rsIBlockElement->GetNext())
{
$arResult["PICTURE"] = CFile::GetFileArray($arResult["PREVIEW_PICTURE"]);
if(!is_array($arResult["PICTURE"]))
$arResult["PICTURE"] = CFile::GetFileArray($arResult["DETAIL_PICTURE"]);

$this->SetResultCacheKeys(array(
));
$this->IncludeComponentTemplate();
}
else
{
$this->AbortResultCache();
}

Меняем if на while

while ($arResult = $rsIBlockElement->GetNext())
{
$arResult["PICTURE"] = CFile::GetFileArray($arResult["PREVIEW_PICTURE"]);
if(!is_array($arResult["PICTURE"]))
$arResult["PICTURE"] = CFile::GetFileArray($arResult["DETAIL_PICTURE"]);
$this->SetResultCacheKeys(array(
));
$this->IncludeComponentTemplate();

}


//else
//{
// $this->AbortResultCache();
//}

но в этом случае он инклудит каждый раз шаблон. (поиедее должен перебрать все элементы а потом 1 раз инклудить шаблон)

если же вынести строку $this->IncludeComponentTemplate(); за пределы цикла то в шаблон ничего не выводится.

я видимо логику тут какую-то не понимаю. в чем ошибка?
спросил 08 Май, 13 от Seaborn (200 баллов)

4 Ответы

00 голосов
Часть компонента:
Код
$arResult['ITEMS'] = array();
while($arItem = $rsIBlockElement->GetNext()) { 
   $arImg = CFile::GetFileArray($arItem['PREVIEW_PICTURE']); 
   if(empty($arImg)) {
      $arImg = CFile::GetFileArray($arItem['DETAIL_PICTURE']);       
   }
   if(!empty($arImg)) {
      $arItem['PICTURE'] = $arImg;
      $arResult['ITEMS'][] = $arItem;
   }
}

if(!empty($arResult['ITEMS'])) {
   $this->SetResultCacheKeys(array( 
   )); 
   $this->IncludeComponentTemplate(); 
} else {
   $this->AbortResultCache();
}


шаблон:
Код
if(!empty($arResult['ITEMS']) && is_array($arResult['ITEMS'])) {
   foreach($arResult['ITEMS'] as $arItem) {
      ?><div class="photo-random"><?
         ?><a href="<?=$arItem['DETAIL_PAGE_URL']?>"><?
            ?><img src="<?=$arItem['PICTURE']['SRC']?>" width="<?=$arItem['PICTURE']['WIDTH']?>" height="<?=$arItem['PICTURE']['HEIGHT']?>" alt="<?=$arItem['NAME']?>" title="" /><?
         ?></a><br /><?
         ?><a href="<?=$arItem['DETAIL_PAGE_URL']?>"><?=$arItem['NAME']?></a><?
      ?></div><?
   }
}



Писал на коленке, могут быть ошибки
ответил 08 Май, 13 от Delp (7,220 баллов)
00 голосов
работает. пока не понял почему мой код не работал, но будем разбираться СПАСИБО :)
ответил 09 Май, 13 от Seaborn (200 баллов)
00 голосов
Цитата
Alex_Titov пишет:
пока не понял почему мой код не работал

Когда вы вынесли подключение шаблона за пределы цикла, то на последней итерации $arResult стал равен false.
ответил 13 Июль, 13 от Delp (7,220 баллов)
00 голосов
теперь ясно :)
ответил 17 Окт, 13 от Seaborn (200 баллов)

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

0 голосов
2 ответов
спросил 18 Апр, 14 от Chemikals (840 баллов)
0 голосов
2 ответов
0 голосов
3 ответов
спросил 22 Март, 14 от Willow (300 баллов)
0 голосов
2 ответов
спросил 14 Фев, 14 от Lollipopk (660 баллов)
0 голосов
3 ответов
спросил 23 Янв, 14 от Kania (5,180 баллов)