Блог разработчика 1С-Битрикс

Руководство по использованию метода CFile::GetFileArray в CMS 1С-Битрикс

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

Руководство по использованию метода CFile::GetFileArray в CMS 1С-Битрикс

Что такое метод CFile::GetFileArray?

Метод CFile::GetFileArray используется для получения информации о файле, который был загружен в систему. Это статический метод класса CFile, и его основной задачей является извлечение данных о файле, таких как имя, путь, размер и другие метаданные.

Сигнатура метода:

mixed CFile::GetFileArray(int FILE_ID, $upload_dir = false)

Параметры:

  1. FILE_ID (int) – Идентификатор файла. Это обязательный параметр, который указывает на файл, информацию о котором нужно получить. Идентификатор передается в виде числа.
  2. $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С-Битрикс. Он позволяет быстро и удобно извлекать информацию о файлах, связанных с элементами инфоблоков, и использовать эти данные на сайте. В приведенных примерах показаны различные способы использования этого метода для работы с изображениями, файлами свойств и пользовательскими директориями загрузки.

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

Теги:  CFile::GetFileArray, CMS, работа с файлами, PHP, методы, инфоблоки


Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Лечение сайтов от вирусов

восстановление сайта и подъем версии PHP

от 25 000 рублей
Лечение сайтов на решениях АСПРО и прочих.

* полный комплекс лечения проекта и закрытия дыр

Участие в проекте

привлечение в проект на part-time основе

от 20 000 рублей / неделя

Возможно участие в проекте на ежедневной основе, как разработчика. Занятость - до 20 часов в неделю
Минимальный срок - одна неделя.

* сумма фиксированная

Техническая поддержка

выполняется с сайтами на основе любых CMS

от 5 000 рублей
Оптимизация производительности действующих интернет-проектов, наполнение и сопровождение, полная техническая поддержка и продвижение в поисковых сетях.

* стоимость зависит от объема и сложности выполняемых работ, используемой CMS.