В CMS 1С-Битрикс есть удобный метод для работы с файлами — CFile::GetFileArray. Этот метод позволяет быстро получить массив данных о файле по его идентификатору. В этой статье мы подробно рассмотрим его использование, параметры и приведем примеры с реальными сценариями.

Что такое метод CFile::GetFileArray?
Метод CFile::GetFileArray используется для получения информации о файле, который был загружен в систему. Это статический метод класса CFile, и его основной задачей является извлечение данных о файле, таких как имя, путь, размер и другие метаданные.
Сигнатура метода:
mixed CFile::GetFileArray(int FILE_ID, $upload_dir = false)
Параметры:
- FILE_ID (int) – Идентификатор файла. Это обязательный параметр, который указывает на файл, информацию о котором нужно получить. Идентификатор передается в виде числа.
- $upload_dir (string, optional) – Директория для загрузки. По умолчанию этот параметр имеет значение false, что означает, что путь будет автоматически рассчитан исходя из настроек CMS. Если же вам нужно указать свою директорию, вы можете передать ее здесь.
Возвращаемое значение:
Метод возвращает ассоциативный массив, содержащий информацию о файле. Если файл не найден, возвращается false.
Поля массива:
Когда метод успешно находит файл, возвращаемый массив содержит следующие поля:
- ID — идентификатор файла.
- TIMESTAMP_X — дата загрузки файла.
- MODULE_ID — идентификатор модуля, загрузившего файл.
- HEIGHT — высота изображения (если файл — изображение).
- WIDTH — ширина изображения (если файл — изображение).
- FILE_SIZE — размер файла в байтах.
- CONTENT_TYPE — MIME-тип файла.
- SUBDIR — поддиректория внутри папки UPLOAD.
- FILE_NAME — имя файла после обработки.
- ORIGINAL_NAME — исходное имя файла при загрузке.
- DESCRIPTION — описание файла.
- SRC — относительный путь к файлу.
- EXTERNAL_ID — внешний идентификатор файла.
Примеры использования метода
Пример 1: Получение изображения анонса для элемента инфоблока
Предположим, у нас есть элемент инфоблока с изображением анонса, и мы хотим вывести его на сайте.
$ELEMENT_ID = 123; // Идентификатор элемента инфоблока
if (CModule::IncludeModule('iblock')) {
$rsElement = CIBlockElement::GetList(
array(),
array("=ID" => $ELEMENT_ID),
false,
false,
array("PREVIEW_PICTURE")
);
if ($arElement = $rsElement->Fetch()) {
$arFile = CFile::GetFileArray($arElement["PREVIEW_PICTURE"]);
if ($arFile) {
echo '
';
}
}
}
В этом примере мы используем метод CFile::GetFileArray, чтобы получить путь к изображению анонса, после чего выводим его с помощью HTML-тега .
Пример 2: Получение всех файловых свойств элементов
Предположим, у нас есть массив элементов, и для каждого из них мы хотим получить все файлы, привязанные к свойствам.
foreach ($arResult["ITEMS"] as $k => $v) {
foreach ($v["PROPERTIES"] as $kk => $vv) {
if ($vv["PROPERTY_TYPE"] == "F") {
if ($vv["MULTIPLE"] == "Y") {
foreach ($vv["VALUE"] as $kkk => $vvv) {
$arResult["ITEMS"][$k]["PROPERTIES"][$kk]["VALUE"][$kkk] = CFile::GetFileArray($vvv);
$arResult["ITEMS"][$k]["PROPERTIES"][$kk]["VALUE"][$kkk]["DESCRIPTION"] = $vv["DESCRIPTION"][$kkk];
}
} else {
$arResult["ITEMS"][$k]["PROPERTIES"][$kk]["VALUE"] = CFile::GetFileArray($vv["VALUE"]);
$arResult["ITEMS"][$k]["PROPERTIES"][$kk]["VALUE"]["DESCRIPTION"] = $vv["DESCRIPTION"];
}
}
}
}
Здесь мы проходим по всем элементам и их свойствам, проверяем, является ли свойство типом "Файл" (PROPERTY_TYPE == "F"), и, если это так, используем CFile::GetFileArray для получения информации о файле.
Пример 3: Получение файлов в компоненте bitrix:news.list
В компоненте bitrix:news.list часто нужно работать с изображениями для вывода на сайт. Рассмотрим пример, где мы извлекаем файлы для превью и детального изображения.
$rsElement = CIBlockElement::GetList($arSort, $arFilter, false, $arNavParams, $arSelect);
while ($obElement = $rsElement->GetNextElement()) {
$arItem = $obElement->GetFields();
...
if (array_key_exists("PREVIEW_PICTURE", $arItem)) {
$arItem["PREVIEW_PICTURE"] = CFile::GetFileArray($arItem["PREVIEW_PICTURE"]);
}
if (array_key_exists("DETAIL_PICTURE", $arItem)) {
$arItem["DETAIL_PICTURE"] = CFile::GetFileArray($arItem["DETAIL_PICTURE"]);
}
...
}
Этот код позволяет получить файлы для превью и детальных изображений элементов инфоблока, после чего их можно использовать для вывода на сайте.
Пример 4: Получение файла с дополнительными параметрами
В некоторых случаях может быть необходимо получить файл с определенной директорией загрузки, которая отличается от стандартной. В этом случае можно передать параметр $upload_dir в метод.
$fileId = 123; // Идентификатор файла
$uploadDir = '/custom/upload/dir/'; // Пользовательская директория для загрузки
$fileArray = CFile::GetFileArray($fileId, $uploadDir);
if ($fileArray) {
echo 'Файл найден: ' . $fileArray["SRC"];
} else {
echo 'Файл не найден.';
}
Этот код поможет вам получать путь к файлам, если они находятся в нестандартной директории на сервере.
Заключение
Метод CFile::GetFileArray является мощным инструментом для работы с файлами в CMS 1С-Битрикс. Он позволяет быстро и удобно извлекать информацию о файлах, связанных с элементами инфоблоков, и использовать эти данные на сайте. В приведенных примерах показаны различные способы использования этого метода для работы с изображениями, файлами свойств и пользовательскими директориями загрузки.
Используя этот метод, вы сможете улучшить функциональность вашего сайта, обеспечив удобную работу с медиа-контентом и другими файлами.