2019-10-01 12:42:00
648

Буквально не давно появилась задача вывести описания изображений у элемента при детальном просмотре. Ситуация такая, что нужно было получить описания файлов, которые были добавлены в элемент из медиабиблиотеки. Как оказалось - это не такая уж и простая задачка. Битрикс выводит информацию о файле, но там совсем не то что нужно, точно не вспомню что там содержится, по-моему путь до файла, оригинальное название, новое название файла и что-то еще.

Пришла простая идея реализовать сравнение имен файлов из медиабиблиотеки и оригинальным именем файла.

Код PHP #1

<?
CModule::IncludeModule("fileman");
CMedialib::Init(); // инициализируем медиабиблиотеку

//Получаем список коллекции    
CMedialibCollection::GetList(array('arFilter' => array('ACTIVE' => 'Y')));

//Получаем все изображения
$arItemsPict = CMedialibItem::GetList(array('arCollections' => array()));

foreach($arItemsPict as $value){
$imgSource  [] =  array('id' => $value["SOURCE_ID"], 'description' => $value["DESCRIPTION"], 'name' => $value['FILE_NAME']);
} // формируем массив с нужмими значениями, описание и имя файла!
?>

<div class="spectacle-page clearfix">
<?if($arResult["PROPERTIES"]["IMG"]["VALUE"]):?>
<div class="spectacle-left-bg">
<div class="spectacle-left" >

<?$descImg = ''; 
foreach($arResult["PROPERTIES"]["IMG"]["VALUE"] as $img): // в цикле выводим список изображений

$arFile = CFile::GetFileArray($img); // по ссылке получаем информацию о файле 

?>      


<?
foreach($imgSource as $value){    // во время вывода изображений сравниваем оригинальные имена из медиабиблиотеки и выбранным файлом в свойстве


if($arFile['ORIGINAL_NAME'] == $value['name'])$descImg = $value['description']; // если имена совпадают получаем описание в переменную 

}
?>


<div class="spectacle-left-block">
<a data-fancybox="gallery" data-caption="<?=$descImg;?>" href="<?echo CFile::GetPath($img);?>"><img src="<?echo CFile::GetPath($img);?>"></a>
</div>

<?endforeach;?>
</div></div>
<?endif;?>
</div>
Эта конструкция получается достаточно высоконагруженной. Т.к. имя файла приходится сравнивать именами файла из медиабиблиотеки, что при больших количествах файлов будет создавать приличную нагрузку

Комментарии (46)