В этой заметке расскажу как красиво вывести множественное свойство типа файл в инфоблоке 1С-Битрикс. С показом оригинального названия файла, его транслитированной версии, размера файла в килобайтах и, само собой, ссылкой на скачивание.
Итак, в инфоблоке каталога сайта имеем стандартное, множественное свойство "типа файл" с кодом "FILES".
Если мы его выведем, штатным способом, через вывод свойств- как оно задумано в Битрикс изначально. Выглядеть это будет не казисто и не интересно
Абсолютно не интересно и самое главное не информативно. В моем случае, в данное свойство загружаются документы. Причем они в разных форматах и разного размера. Пользователь должен видеть и название документа и его размер с форматом. Например вот так:
Все достаточно просто, так как множественные свойства это обычные массивы. Мы можем получить все данные о каждом файле, просто зная код свойства, в моем случае "FILES". Выглядеть foreach будет следующим образом.
<?foreach($arResult["DISPLAY_PROPERTIES"]['FILES']['FILE_VALUE'] as $pid=>$arProperty):?> <? //echo '<pre>';print_r($arProperty);echo '</pre>'; echo $arProperty['FILE_SIZE']; //размер файла в байтах echo $arProperty['FILE_NAME']; //Транслитированное название файла echo $arProperty['ORIGINAL_NAME']; //Оригинальное название файла echo $arProperty['SRC']; //Ссылка на скачивание > <?endforeach?>
Расскоментировав строку
// echo '<pre>';print_r($arProperty);echo '</pre>';
Вы сможете увидеть все данные о каждом файле, доступные для вывода. По мимо основных, там есть и дата загрузки и тип файла.
В принципе и все. Конкретно в моем случае, в примере выше, результат вывода выглядет следующим образом:
<? foreach ($arResult["DISPLAY_PROPERTIES"]['FILES']['FILE_VALUE'] as $pid => $arProperty): ?> <a href="<? echo $arProperty['SRC']; ?>" title="Скачать <? echo $arProperty['FILE_NAME']; ?>"> <strong> <? echo $arProperty['ORIGINAL_NAME']; ?> <span> — <? $strKb = $arProperty['FILE_SIZE']/1024; echo round($strKb) . ' Кб'; ?> </span> </strong> <i> <? echo $arProperty['FILE_NAME']; ?> </i> </a> <? endforeach ?>
Байты в килобаты (размер файла), я привратил, обычной php функцией округления в большую сторону round. Предварительно приведя байты в килобаты. просто разделив $arProperty['FILE_SIZE'] на 1024 (смотри в коде выше).
Иконки для разных типов файлов, назначил через CSS - тут простая стилизация. Зная расширение файла, а точнее расширенеие на которое заканчивается ссылка, просто прописал background для каждой разновидности ссылки. Вот так:
a[href$=".doc"], a[href$=".docx"], a[href$=".rtf"] { background: url("img/doc.png"); } a[href$=".pdf"] { background: url("img/pdf.png"); } a[href$=".xls"], a[href$=".xlsx"] { background: url("img/exl.png"); }
Так как в компоненте и шаблоне catalog.element доступна информация, только для ID файла - те же самые данные (из текста выше), мы можем получить методом CFile::GetFileArray(). Просто передав в него ID файла.
Пример:
foreach ($arResult["PROPERTIES"]['FILES']['VALUE'] as $pid => $arProperty): $arFile = CFile::GetFileArray($arProperty); print_r($arFile);// Распечатка всего массива endforeach
![]()
Сергей Стефанович
|
Спасибо. Но есть косяк. Если файл один, то не выводит.
|
![]()
Сергей Стефанович
|
||
|
||
![]()
Сергей Стефанович
|
||
Вот решение проблемы с одиночными файлами.
|
||
![]()
Артём Блинов
|
||
Михаил, спасибо за отличную статью!
Сергей, спасибо за не менее важное дополнение! Для вывода списка файлов на детальной странице комплексного компонента catalog у меня получился такой код:
|
||
![]()
dim246
|
Добрый день! А как вывести размер файла свойства типа "привязка к файлу на сервере"?
|
![]()
Даурен Смаилов
|
||
Чтобы он распознавал тип и выводил соответствующую картинку. Типы можно любые указать.
|
||
![]()
Даурен Смаилов
|
||
есть еще такой способ выводить файл:
|
||
![]()
Евгений Петросян
|
На детальной странице каталога не получается вывести.
Компонент bitrix.catalog.element Подскажите что не так? |
![]()
Рустам Кулиев
|
Тоже столкнулся с проблемой. catalog.element не видит в массиве SRC попросту не видит, видит размер и название файла причем через $arResult["PROPERTIES"]["FILES"]["VALUE"]
с $arResult["DISPLAY_PROPERTIES"]["file"]["VALUE"] вообще отдает NULL |
![]()
виталий бовкун
|
Здравствуйте.
У меня почему в цикле foreach не чего не происходит, совсем, хотя свойства передаются и файл прикреплен. <?foreach($arResult["DISPLAY_PROPERTIES"]['FILES']['FILE_VALUE'] as $pid=>$arProperty):?> <? echo $arProperty['FILE_SIZE']; //размер файла в байтах echo $arProperty['FILE_NAME']; //Транслитированное название файла echo $arProperty['ORIGINAL_NAME']; //Оригинальное название файла echo $arProperty['SRC']; //Ссылка на скачивание ?> <?endforeach?> Пытаюсь вывести файл в каталоге для скачивания. Каталог не основной. |
![]()
Eugene Eugene
|
Такая же история, абсолютно не рабочий код. Пытаюсь вывести в catalog.element, никакой реакции системы нет.
|
![]()
Михаил Базаров
|
||||
Только что проверил на одном проекте - все работает
|
||||
![]()
Денис Кулеба
|
Добрый день. У меня то же не работает (news.detail) Выдаёт следующее: 1111При выполнении скрипта возникла ошибка. Включить расширенный вывод ошибок можно в файле настроек
|
![]()
Денис Кулеба
|
||
|
||
![]()
Денис Кулеба
|
||
|
||
![]()
Михаил Базаров
|
||
|
||
![]()
Денис Кулеба
|
||
|
||
![]()
Денис Кулеба
|
Спасибо разобрался.
|
На нем, уже много видеоуроков по 1С-Битрикс. Как одиночные видео так и серии видеоуроков Перейти на канал
Совсем скоро выйдет видеокурс по разработке доски объявлений с мобильным приложением. Подписывайтесь и будьте в курсе: