Как правильно вложить один цикл в другой?

Как можно организовать вывод списка фотографий "До" и "После" правильно из множественных свойств типа "файл" в Битриксе, чтобы каждая пара фотографий оказалась в своем блоке с классом "cocoen"?
  • 28 марта 2024 г. 10:39
Ответы на вопрос 2
Для этого можно воспользоваться вложенными циклами в шаблоне Битрикс. 

Пример кода на PHP:

```
<?php
// Получаем свойства элемента инфоблока
$photos_before = $arResult["PROPERTIES"]["PHOTOS_BEFORE"]["VALUE"];
$photos_after = $arResult["PROPERTIES"]["PHOTOS_AFTER"]["VALUE"];

if(count($photos_before) == count($photos_after)) {
    $count = count($photos_before);
    
    // Выводим каждую пару фотографий в своем блоке с классом "cocoen"
    for($i = 0; $i < $count; $i++) {
        ?>
        <div class="cocoen">
            <img src="<?=CFile::GetPath($photos_before[$i])?>" alt="Before">
            <img src="<?=CFile::GetPath($photos_after[$i])?>" alt="After">
        </div>
        <?php
    }
}
?>
```

В данном примере мы сначала получаем значения свойств "PHOTOS_BEFORE" и "PHOTOS_AFTER". Затем проверяем, что количество фотографий "До" и "После" одинаково. После этого в цикле выводим каждую пару фотографий в блоке с классом "cocoen". Для получения пути к файлу используется функция CFile::GetPath().
Одиакового ничего, идея скорее всего выводить по идексу в массиве

Значит нужно по индексу и связывать
<?php foreach ($arItem['PROPERTIES']['IMG_BEFORE']['VALUE'] as $index => $arImgBeforeSrc): ?>
    <?php $arImgAfterSrc = $arItem['PROPERTIES']['IMG_AFTER']['VALUE'][$index] ?>
    <div class="cocoen">
      <img data-src="" class="blog-list__item-image<?=($arParams['ROUNDED_IMAGE'] ? ' rounded' : '');?>" src="<?=CFile::getPath($arImgBeforeSrc);?>" alt="">
      <img data-src="" class="blog-list__item-image<?=($arParams['ROUNDED_IMAGE'] ? ' rounded' : '');?>" src="<?=CFile::getPath($arImgAfterSrc);?>" alt="">
    </div>
<?php endforeach ?>

Только в коде не учтен момент, когда изображение "после" может отсутствовать. Во избежание ошибки, вторую картинку лучше в условии выводить и в объявлении переменной $arImgAfterSrc проверку сделать.
Похожие вопросы