Вывести размер файла bitrix

Обновлено: 06.07.2024

Загрузка файла на сайт - это довольно рядовой процесс. Но как загрузить пользовательский файл в свойство элемента инфоблока bitrix через форму?

В официальной документации сказано, что для загрузки файла надо передать свойству описывающий его массив:

"DETAIL_PICTURE" => CFile::MakeFileArray( $_SERVER["DOCUMENT_ROOT"] . "/image.jpg" )

Функция CFile::MakeFileArray служит для создания такого описания. Но если загружать файл через форму с input type="file", то он попадает далеко не в самое приятное место, в папку /tmp/. А если сохранять файл из /tmp/ через MakeFileArray, то появится проблема с его именем и расширением. Потому что загруженный файл имеет автоматически сгенерированное имя в виде случайного набора символов.

Но если вчитаться в документацию, то можно заметить следующее:

MakeFileArray формирует массив описывающий файл. Структура массива аналогична структуре массива $_FILES[имя]

Поэтому нет никакой необходимости вообще применять эту функцию. Можно сразу же передавать свойству "файл" значение $_FILES['FILE']. Тогда код создания элемента с файлом будет выглядеть так

$el = new CIBlockElement;
$arProp = Array(

"IBLOCK_ID" => 'ID',
"NAME" => 'NAME',
"PROPERTY_VALUES" => array(

"FILE" => $_FILES['FILE']

)

);
$element_id = $el->Add($arProp);

Не стоит забывать про валидацию данных: необходимо проверять размер и расширение файла перед загрузкой. Заодно не забудьте установить в свойствах инфоблока, у поля FILE, допустимые расширения файлов:

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

P.S.

Описание как сделать интерактивную проверку размера и расширения файла через js/jq скрипт можно найти в статье "Размер и тип файла в input file".

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

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

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

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

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

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

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

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

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

Все достаточно просто, так как множественные свойства это обычные массивы. Мы можем получить все данные о каждом файле, просто зная код свойства, в моем случае "FILES". Выглядеть foreach будет следующим образом.

Расскоментировав строку
// echo '<pre>';print_r($arProperty);echo '</pre>';
Вы сможете увидеть все данные о каждом файле, доступные для вывода. По мимо основных, там есть и дата загрузки и тип файла.

В принципе и все. Конкретно в моем случае, в примере выше, результат вывода выглядет следующим образом:

Несколько полезных моментов

Байты в килобаты (размер файла), я привратил, обычной php функцией округления в большую сторону round. Предварительно приведя байты в килобаты. просто разделив $arProperty['FILE_SIZE'] на 1024 (смотри в коде выше).

Иконки для разных типов файлов, назначил через CSS - тут простая стилизация. Зная расширение файла, а точнее расширенеие на которое заканчивается ссылка, просто прописал background для каждой разновидности ссылки. Вот так:

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

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

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

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

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

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

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

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

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

Все достаточно просто, так как множественные свойства это обычные массивы. Мы можем получить все данные о каждом файле, просто зная код свойства, в моем случае "FILES". Выглядеть foreach будет следующим образом.

Расскоментировав строку
// echo '<pre>';print_r($arProperty);echo '</pre>';
Вы сможете увидеть все данные о каждом файле, доступные для вывода. По мимо основных, там есть и дата загрузки и тип файла.

В принципе и все. Конкретно в моем случае, в примере выше, результат вывода выглядет следующим образом:

Несколько полезных моментов

Байты в килобаты (размер файла), я привратил, обычной php функцией округления в большую сторону round. Предварительно приведя байты в килобаты. просто разделив $arProperty['FILE_SIZE'] на 1024 (смотри в коде выше).

Иконки для разных типов файлов, назначил через CSS - тут простая стилизация. Зная расширение файла, а точнее расширенеие на которое заканчивается ссылка, просто прописал background для каждой разновидности ссылки. Вот так:

В этой статье собраны ответы на самые часто задаваемые вопросы о диске.

Что может Битрикс24.Диск?

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

Для хранения персональных файлов каждый сотрудник может использовать личное хранилище - Мой диск.

Битрикс24.Диск позволяет синхронизировать ваши файлы и папки в облаке с жестким диском и работать с ними в любое удобное время.

Чтобы работать с файлами вашего Битрикс24.Диска на компьютере, вы можете подключить вcё хранилище или отдельную папку как сетевой диск. Файлы будут синхронизированы, и при работе на компьютере все изменения появятся на вашем Битрикс24. И наоборот.

Подробнее о подключении своего диска читайте в статье.

Можно ли отследить полную историю изменений файлов на Диске?

Можете отследить историю изменений каждого файла в отдельности. Общая история изменений на Диске на данный момент не реализована.

Как очистить место на диске?

В разделе Мой тариф > Место в облаке указано сколько и чем занято места.

Можно ли подключить облачное хранилище к Битрикс24?

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

Есть ли возможность перенести документы с Моего диска на Общий диск компании?

Перемещение документов возможно только в рамках одного диска: общего или личного.

Можно ли загрузить сразу несколько папок на диск?

На данный момент такая возможность не реализована. Вы можете создать папку на диске, перейти в неё и загрузить файлы.

Можно ли синхронизировать Диск Битрикс24 с данными на диске компьютера?

Да, это можно сделать с помощью Десктоп-приложения.

Подробную инструкцию читайте в статье.

Можно ли синхронизировать диск с рабочего ПК и домашнего?

Да, конечно. Если несколько десктопов под одним логином на разных устройствах, то они между собой будут синхронизировать файлы.

Как сделать, чтобы сотрудники не могли скачивать файлы с диска?

Вы не можете запретить скачивать файлы, если к ним есть право доступа. Даже при минимальном праве на чтение будет возможность скачать файл.

Важно! Свойства инфоблока файл не отображаются в Параметрах компонента (настройки с иконкой шестеренка). Поэтому их вызов только через PROPERTIES, а не DISPLAY_PROPERTIES.


Если в настройках компонента не стоит NAME то массив с изображениями не выведется

Ресайз изображений налету

  • BX_RESIZE_IMAGE_EXACT - масштабирует в прямоугольник $arSize без сохранения пропорций;
  • BX_RESIZE_IMAGE_PROPORTIONAL - масштабирует с сохранением пропорций, размер ограничивается $arSize;
  • BX_RESIZE_IMAGE_PROPORTIONAL_ALT - масштабирует с сохранением пропорций, размер ограничивается $arSize, улучшенная обработка вертикальных картинок.

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

<?
$file = CFile::ResizeImageGet(($arResult["DETAIL_PICTURE"]), array('width'=>800, 'height'=>800), BX_RESIZE_IMAGE_PROPORTIONAL, true);
echo '<img src="https://gvozdevsoft.ru/info/tekhrazdel/bitriks/'.$file['src'].'" width="'.$file['width'].'" height="'.$file['height'].'" alt="'.$arResult["NAME"].'" title="'.$arResult["NAME"].'" />';
?>

Ресайз изображений для Каталога (catalog.section)

<?
$file = CFile::ResizeImageGet(($item["PREVIEW_PICTURE"]["ID"]), array('width'=>800, 'height'=>800), BX_RESIZE_IMAGE_PROPORTIONAL, true);
echo '<img src="https://gvozdevsoft.ru/info/tekhrazdel/bitriks/'.$file['src'].'" width="'.$file['width'].'" height="'.$file['height'].'" alt="'.$item["NAME"].'" title="'.$item["NAME"].'" />';
?>

Конструкция для вывода картинки анонса с проверками и ресайзом

<?if($arParams["DISPLAY_PICTURE"]!="N" && $arItem["PREVIEW_PICTURE"]):?>
<div >
<a href="<?echo $arItem["DETAIL_PAGE_URL"]?>">
<?
$file = CFile::ResizeImageGet(($arItem["PREVIEW_PICTURE"] ? $arItem["PREVIEW_PICTURE"] : $arItem["DETAIL_PICTURE"]), array('width'=>700, 'height'=>700), BX_RESIZE_IMAGE_PROPORTIONAL, true);
echo '<img src="https://gvozdevsoft.ru/info/tekhrazdel/bitriks/'.$file['src'].'" width="'.$file['width'].'" height="'.$file['height'].'" alt="'.$arItem["NAME"].'" />';
?>
</a>
</div>
<?endif;?>

Условие, если поле заполненное вывести его значение (один элемент)

<? if($arItem["DISPLAY_PROPERTIES"]["ATT_TEXT"]["VALUE"]):?>
<?=$arItem["DISPLAY_PROPERTIES"]["ATT_TEXT"]["VALUE"];?>
<?endif;?>

<? if($arResult["DISPLAY_PROPERTIES"]["ATT_TEXT"]["VALUE"]):?>
<?=$arResult["DISPLAY_PROPERTIES"]["ATT_TEXT"]["VALUE"];?>
<?endif;?>

Важно!

Отличие PROPERTIES от DISPLAY_PROPERTIES

Если узазать DISPLAY_PROPERTIES то будут выведены свойства инфоблока, которые выбраны в настройках параметра Компонента.

Если какое либо свойство не отображается в параметрах компонента (например свойство файл), то указывается через PROPERTIES.

Если свойство определяется в параметрах компонента, то можно к нему обратиться как через DISPLAY_PROPERTIES так и через PROPERTIES



Конструкция if


Так работают все проверки. Проверяется если поле не пустое, то массив arItem отдает true следовательно условие выполняется

<? if($arItem["DISPLAY_PROPERTIES"]["ATT_LINK"]["VALUE"]):?>
Действие
<?else:?>
Действие
<?endif;?>

Ссылки

<a href="<?=$arItem["DETAIL_PAGE_URL"]?>"> - ссылка на детальную страницу

<a href="<?echo $arItem["DETAIL_PAGE_URL"]?>"><?=$arItem["NAME"]?></a> - вывод ссылки на детальную страницу. Анкор ссылки взят из поля "Название"

Когда какой массив используется $arResult и $arItem

$arResult основной массив в который может входить множество массивов $arItem

Если вы работаете с news.list либо news-news.list то сначала создается массив $arResult в котором создаются $arItem. И обращение в этих шаблонах (template.php) будет только к $arItem

Задается он следующим образом
<?foreach($arResult["ITEMS"] as $arItem):?>
Внутри этого массива обращение только к $arItem
<?endforeach;?>

Читайте также: