Bitrix галерея с мультизагрузкой фотографий

22.01.2021

Опишу как сделать галерею на Битриксе с возможностью заливать не по одной фотографии, а сразу выбрав множество картинок.

Как звучало "ТЗ":

  • Сделать раздел для загрузки фотографий и управления альбомами (только для админов).

  • Сделать возможность связи альбома со строительным объектом (такой тип инфоблока).

  • Вывести фотографии из альбома на странице одного объекта.

Для избежания путаницы, стоит отметь, что инфоблок обетов находится внутри блока контент, который внутри меню контент:

pic1

Начнем с добавления Фотогалереи

  • Создаем инфоблок для Фотогалерея объектов:

    Контент - Инфоблоки - Типы инфоблоков - Контент - Фотогалерея объектов

    pic1

    Запоминаем его ID (у меня 16).

  • Добавляем раздел для управления галереей. Через меню управления сайтом:

    pic1

    - жмем готово

  • Откроется страница редактирования, на нее добавляем "Фотогалерея 2.0":

    pic1

  • Указываем наш инфоблок:

    pic1

  • Откроется страница галереи:

    pic1

  • Для начала закрываем к этому разделу доступ не авторизованным, мы будем использовать его только для создания и редактирования альбомов.

    В файле /_fotogalereya/index.php добавляем:

     
    define("NEED_AUTH", true);
    

  • Теперь создаем новый альбом (ссылку видно на прошлом скриншоте):

    pic1

    и загружаем в него фотографии

    pic1

    pic1

  • Теперь, через "изменить альбом", можно прописать каждой картинке имя / текст и задать обложку альбома (но в рамках текущей задачи это не нужно)

    pic1

    pic1

Пора добавить инфоблоку объекты возможность выбрать галерею

  • Переходим в Контент - Инфоблоки - Типы инфоблоков - Контент - Инфоблок "Объекты"

  • Вкладка "Свойства" и добавляем поле как "привязка к разделам" и в настройках устанавливаем нашу "Фотогалерея объектов":

    pic1

    pic1

  • Устанавливаем нужному объекту связь: Контент - Контент - Объекты

    pic1

Выводим картинки на нужной странице

  • Формирование массива:

     
    <?
    $id_gallery = $arResult["PROPERTIES"]['SO_GALLERY']['VALUE'];
    $id_iblock = 16;
    
    $arOrder = array('SORT'=>'ASC');
    $arFilter = array(
        'SECTION_ID'=>$id_gallery,
        'IBLOCK_ID' => $id_iblock
    );
    
    $aImages = [];
    $res = CIBlockElement::GetList($arOrder, $arFilter);
    while ($aItem = $res->GetNext())
    {
      $aProp = CIBlockElement::GetByID($aItem['ID'])->GetNextElement()->GetProperties();
      //echo '<img src="'.CFile::GetPath($aProp['REAL_PICTURE']['VALUE']).'"><br />';
      $aImages[] = [
          'SRC' => CFile::GetPath($aProp['REAL_PICTURE']['VALUE']),
          'TEXT' => $aItem['DETAIL_TEXT'],
      ];
    }
    
    ?>
    

    - $id_iblock = 16; - это идентификатор инфоблока из первого пункта.

  • Вывод в шаблоне (путь и окружающий код зависит от шаблона), но сам вывод::

     
    <?foreach($aImages as $aImage):?>
    	<div class = "item">
    		<img src = "<?=$aImage['SRC'];?>" alt = "<?=$aImage['TEXT'];?>">
    	</div>
    <?endforeach;?>
    

    pic1


Категории: Bitrix CMS
Яндекс.Метрика