Мастерская iPloGic
+7 (926) 961-66-26

 — База знаний — Получение адреса и других параметров файлов по id и ресайз изображений в Битрикс

Получение адреса и других параметров файлов по id и ресайз изображений в Битрикс

Сегодня мы поговорим о работе с файлами в Битрикс. Но речь пойдет не просто о работе с файлами в понимании PHP, а о файлах в концепции Битрикса. Такими сущностями являются файлы медиабиблиотеки, изображения инфоблоков, а также файлы загружаемые при заполнении свойств типа файл инфоблоков. Для каждого такого файла создается еще и соответствующая запись в базе данных. Часто компоненты отдают как раз ID записи в базе данных в качестве файла или изображения. Понятно, что ID для посетителя бесполезная вещь и надо уметь получать нужную информацию по этому идентификатору файла. В этой статье мы собрали инструменты Битрикса для работы с этими сущностями.

Вообще все методы для работы с файлами собраны в классе CFile и описаны в документации. Мы же приведем только самые часто используемые.

Если нам просто нужен путь от корня сайта к файлу без дополнительных параметров, то достаточно просто использовать следующий метод:
<?
CFile::GetPath($ID);
?>
Получаем строку содержащую адрес файла.

Если же нам нужны другие параметры файла, то стоит воспользоваться другим методом:
<?
$arFile = CFile::GetFileArray($arElement["PREVIEW_PICTURE"]);
?>
Получаем массив свойств из таблицы базы данных:
  • ID - идентификатор файла.
  • TIMESTAMP_X - дата загрузки.
  • MODULE_ID - идентификатор модуля загрузившего файл.
  • HEIGHT - для картинок высота.
  • WIDTH - для картинок ширина.
  • FILE_SIZE - размер в байтах.
  • CONTENT_TYPE - тип содержимого, выдаётся mime-type.
  • SUBDIR - поддиректория внутри папки UPLOAD.
  • FILE_NAME - имя файла после преобразования и убирания некорректных символов. Если стоит опция в настройках главного модуля Сохранять исходные имена загружаемых файлов, то фактически не будет отличаться от ORIGINAL_NAME (Будет приведен в безопасный вид при включённой опции Автоматически заменять невалидные символы в именах загружаемых файлов).
  • ORIGINAL_NAME - оригинальное имя файла во время загрузки.
  • DESCRIPTION - описание.
  • SRC - относительный путь относительно DOCUMENT_ROOT.
В примере нет второго необязательного параметра. В котором указывается директория для загрузки. В данном случае он нам не нужен.

Ту же информацию в виде объекта класса CDBResult можно также получить при помощи метода
<?
CFile::GetByID($arElement["PREVIEW_PICTURE"]);
?>

Теперь поговорим о ресайзе изображений, то есть выводе картинок в нужном размере. Для этого используется метод CFile::ResizeImageGet: 
<?
$arImg = CFile::ResizeImageGet($arItem["DETAIL_PICTURE"]["ID"], array('width'=>300, 'height'=>200), BX_RESIZE_IMAGE_PROPORTIONAL);
if ($arImg["src"]!='') {
    $img = $arImg["src"];
}
?>
В нашем примере мы вписываем детальную картинку пропорционально в прямоугольник 300х200 пикселей. Метод возвращает массив, в элементе "src" (регистр важен!) которого находится путь к файлу кэша изображений с нужными размерами. Сама детальная картинка при этом не изменится.

В качестве входных параметров передаются соответственно ID, массив с размерами и параметр описывающий как именно будет происходить ресайз. Он может быть следующим:
  • BX_RESIZE_IMAGE_EXACT - масштабирует в прямоугольник без сохранения пропорций;
  • BX_RESIZE_IMAGE_PROPORTIONAL - масштабирует с сохранением пропорций, размер ограничивается указанной шириной и высотой;
  • BX_RESIZE_IMAGE_PROPORTIONAL_ALT - масштабирует с сохранением пропорций, размер ограничивается указанной шириной и высотой, улучшенная обработка вертикальных картинок.

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





20.04.2018