Телеграм: @camouf_ru Почта: mihail@bazarow.ru

Вывести множественное свойство типа файл с названием и весом файла в Битрикс

Просмотров: 20204

В этой заметке расскажу как красиво вывести множественное свойство типа файл в инфоблоке 1С-Битрикс. С показом оригинального названия файла, его транслитированной версии, размера файла в килобайтах и, само собой, ссылкой на скачивание.

Исходные данные для вывода файлов

Итак, в инфоблоке каталога сайта имеем стандартное, множественное свойство "типа файл" с кодом "FILES".

Свойство файл битрикс

Если мы его выведем, штатным способом, через вывод свойств- как оно задумано в Битрикс изначально. Выглядеть это будет не казисто и не интересно

Свойство файл битрикс

Абсолютно не интересно и самое главное не информативно. В моем случае, в данное свойство загружаются документы. Причем они в разных форматах и разного размера. Пользователь должен видеть и название документа и его размер с форматом. Например вот так:

Свойство файл битрикс

Выводим свойство файл через API Битрикс- получая все данные о файлах

Все достаточно просто, так как множественные свойства это обычные массивы. Мы можем получить все данные о каждом файле, просто зная код свойства, в моем случае "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

Так как в компоненте и шаблоне catalog.element доступна информация, только для ID файла - те же самые данные (из текста выше), мы можем получить методом CFile::GetFileArray(). Просто передав в него ID файла.

Пример:


foreach ($arResult["PROPERTIES"]['FILES']['VALUE'] as $pid => $arProperty):
    $arFile = CFile::GetFileArray($arProperty);
    print_r($arFile);// Распечатка всего массива
endforeach
виталий бовкун 06.05.2020
Здравствуйте.
У меня почему  в цикле 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 22.11.2020
Такая же история, абсолютно не рабочий код. Пытаюсь вывести в catalog.element, никакой реакции системы нет. 1С-Битрикс: Управление сайтом 20.200.0.
Михаил Базаров 23.11.2020
Цитата
Eugene Eugene написал:
Такая же история, абсолютно не рабочий код. Пытаюсь вывести в catalog.element, никакой реакции системы нет.  1С-Битрикс: Управление сайтом 20.200.0 .
Распечатайте массив, есть ли хотя бы какое-то упоминание о файлах?
Только что проверил на одном проекте - все работает
Код
echo '<pre>';
print_r($arResult["DISPLAY_PROPERTIES"]);
echo '</pre>';
Денис Кулеба 22.12.2020
Добрый день. У меня то же не работает (news.detail) Выдаёт следующее: 1111При выполнении скрипта возникла ошибка. Включить расширенный вывод ошибок можно в файле настроек .settings.php
Денис Кулеба 22.12.2020
Цитата
Eugene Eugene пишет:
Такая же история, абсолютно не рабочий код. Пытаюсь вывести в catalog.element, никакой реакции системы нет.  [URL=http://www.1c-bitrix.ru/]1С-Битрикс: Управление сайтом 20.200.0[/URL] .
Присоединяюсь. Есть решение для (news.detail)?
Денис Кулеба 22.12.2020
Цитата
виталий бовкун написал:
Здравствуйте.
У меня почему  в цикле 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?>


Пытаюсь вывести файл в каталоге для скачивания.
Каталог не основной.  
Скажите, а нашлось решение проблемы. Очень надо.
Михаил Базаров 23.12.2020
Цитата
Денис Кулеба пишет:
[QUOTE][URL=/club/user/13838/]виталий бовкун[/URL] написал:
Здравствуйте.
У меня почему  в цикле foreach не чего не происходит, совсем, хотя свойства передаются и файл прикреплен.

$arProperty):?>
echo $arProperty['FILE_SIZE']; //размер файла в байтах
echo $arProperty['FILE_NAME']; //Транслитированное название файла
echo $arProperty['ORIGINAL_NAME']; //Оригинальное название файла
echo $arProperty['SRC']; //Ссылка на скачивание
?>



Пытаюсь вывести файл в каталоге для скачивания.
Каталог не основной.  [/QUOTE] Скажите, а нашлось решение проблемы. Очень надо.
Самый последний абзац- добавлен недели 2-е назад.
Денис Кулеба 27.12.2020
Цитата
Михаил Базаров пишет:
[QUOTE][URL=/club/user/14132/]Денис Кулеба[/URL] пишет:
[QUOTE][URL=/club/user/13838/]виталий бовкун[/URL] написал:
Здравствуйте.
У меня почему  в цикле foreach не чего не происходит, совсем, хотя свойства передаются и файл прикреплен.

$arProperty):?>
echo $arProperty['FILE_SIZE']; //размер файла в байтах
echo $arProperty['FILE_NAME']; //Транслитированное название файла
echo $arProperty['ORIGINAL_NAME']; //Оригинальное название файла
echo $arProperty['SRC']; //Ссылка на скачивание
?>



Пытаюсь вывести файл в каталоге для скачивания.
Каталог не основной.  [/QUOTE] Скажите, а нашлось решение проблемы. Очень надо.[/QUOTE] Самый последний абзац- добавлен недели 2-е назад.
Простите. Не очень понял ответ. Что делать то надо? Можно просто код для вставки? Я не программист, пытаюсь сам до всего докапаться.
Денис Кулеба 27.12.2020
Спасибо разобрался.
Михаил Базаров 21.06.2021
Вывести дату создания файла в формате сайта

Что бы это сделать можно воспользоваться методом
CFile::GetFileArray

В параметр передаем ID нужного файла или переменную с нужным ID и классом DateTime
приводим к строке:
Код
<?
$arItem = 123; // ID нужного файла
$rsFile = CFile::GetFileArray($arItem);
echo $rsFile['TIMESTAMP_X']->toString();
?>
Если нужна вся информация о конкретном файле (вес, формат, путь на сервере, описание итд)
Распечатываем массив
Код
<?
print_r($rsFile);
?>

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Массово: применить наценку ко всем товарам каталога с пересчетом от б... Просмотров: 5585 Рассмотрим как, в магазине работающем на 1С-битрикс, массово применить наценку на все това... FTP доступ на Виртуальной машине Битрикс Просмотров: 15920 Бывает что нужно открыть FTP доступ к заранее известной папке на сайте под управлением 1С ... Time Capsule на Windows 10. Хранение бекапов Time Machine на компьюте... Просмотров: 6665 Заметку написал скорее для себя, что бы собрать все в одну кучу. Написана на базе нескольк... AJAX корзина с отправкой количества из раздела каталога Просмотров: 19126 Столкнулся с задачкой: нужно было на одном сайте реализовать интерактивный прайс лист. При... Малая корзина Битрикс, упрощенный шаблон Просмотров: 12545 Шаблон малой корзины битрикс, который можно вывести в боковом разделе шаблона или в шапке ... Адаптивное гамбургер меню для битрикс Просмотров: 14443 Заметка коротенькая, но решил оставить ее - так как самому часто нужно нечто подобное. В а... Вывести минимальную цену торговых предложений в Битрикс Просмотров: 26860 Если у товара несколько торговых предложений и у каждого предложения разные цены, иногда т... Звездочки в рейтинге Битрикс статей и новостей Просмотров: 18072 Стандартный вид рейтинга в новостях Битрикс, ну скажем так- не очень красив. Давайте его п... XML в формате Commerce ML-2, города России и Мира, для выгрузки в инф... Просмотров: 6303 Подвернулась задачка, создать инфоблок для Битрикс, в котором будут просто города России и... Очистка корзины в 1С-Битрикс одним нажатием Просмотров: 27754 В стандартной корзине Битрикс не хватает кнопки для полной очистки корзины одним нажатием... Удалить товары из корзины, если есть определенные товары. Просмотров: 880 Задача: если в корзину добавлены товары с определенным свойством, нужно удалить из корзины... Ускорение работы сайта на 1С-Битрикс Просмотров: 15895 Данная статья написана специально под видеоролик (приложен в конце статьи), опубликованный... Как вывести картинки к разделам на базе _ext меню Просмотров: 7087 Просто для эстетической красоты, нужно вывести в меню разделов сайта картинки или иконки. ... Заполнить коэффициент единицы измерения (MEASURE_RATIO) из свойства э... Просмотров: 5722 Задачка: Каталог наполняется из 1С, но 1С не передает коэффициент единицы измерения (особе... Вывести производителей на сайте с отбором его товаров из каталога Просмотров: 18244 Достаточно частая задачка для каталога или интернет-магазина: вывести список производителе... Мобильные версии страниц и поисковые системы Просмотров: 5849 Согласно требования поисковых систем: Яндекс и Google, в случае если у вашего сайта имеетс... Связанные элементы в карточке товара, с помощью catalog.section Просмотров: 14030 Достаточно часто, при разработке магазинов на битрикс, требуется выводить связанные элемен... Memcached на сайте под управлением битрикс, при использовании Веб Окр... Просмотров: 6940 Если вам важна скорость отдачи сайта, а у вашего сервера медленный диск для использования ... Denwer c PHP 7.1.8 и MYSQL 5.7 оптимизированный для Битрикс Просмотров: 29518 В последнее время, все чаще приходиться работать на Windows, хотя и не люблю эту ОС- с точ... Информация о заказах и содержимое корзины текущего пользователя. Просмотров: 11778 В процессе разработки сайта могут понадобиться рецепты приведенные ниже. Использовать можн...