Сегодня мы поговорим о работе с файлами в Битрикс. Но речь пойдет не просто о работе с файлами в понимании 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