Добрый день, такая же задача появилась, покопавшись нашел решение)
В комментариях используется формат файлов с диска. В FILES нужно передать массив id файлов в формате 'n' . $id.
К слову, если записывать в highloadblock, то для хранения файлов можно использовать такой же формат поля Файл (Диск). Требования те же. массив и 'n' перед id
[CODE]<?php
use Bitrix\Crm\Timeline\CommentEntry;
use Bitrix\Disk\Driver;
use Bitrix\Disk\File;
$text = 'Comment text';
$createdById = 1;
$authorId = 1;
$entityId = '';
$entityTypeId = '';
//Пример массива файлов
$arDiskFilesId = [
'n11111',
'n22222',
];
$arComment = [
'TEXT' => $text,
'CREATED' => $createdById,
'AUTHOR_ID' => $authorId,
'FILES' => $arDiskFilesId,
'BINDINGS' => [
[
'ENTITY_TYPE_ID' => $entityTypeId,
'ENTITY_ID' => $entityId,
]
]
];
// Обязательный параметр для отображения файлов
if (!empty($arDiskFilesId)) {
$arComment['SETTINGS'] = [
'HAS_FILES' => 'Y'
];
}
$result = CommentEntry::create($arComment);
function createFileToDisk(string $fileName, string $fileContent, string $fileType, int $userID = null): File
{
// 1. Задаем текущего пользователя
if ($userID) {
$userID = $userID;
} else {
$userID = $GLOBALS['USER']->getID();
}
// 2. Получаем корневую папку текущего пользователя
$storage = Driver::getInstance()->getStorageByUserId($userID);
$folder = $storage->getFolderForUploadedFiles();
// 3. Создаем временный файл
$tempFilePath = sys_get_temp_dir() . '/' . uniqid() . '_' . $fileName;
file_put_contents($tempFilePath, $fileContent);
// 4. Загружаем файл на Диск
$file = $folder->uploadFile(
fileArray: [
'name' => $fileName,
'tmp_name' => $tempFilePath,
'size' => filesize($tempFilePath),
'type' => $fileType,
],
data: [
'CREATED_BY' => $userID,
],
generateUniqueName: true // Создаем файл под уникальным именем, если найден файл с тем же именем
);
// 5. Удаляем временный файл
unlink($tempFilePath);
if ($file instanceof File) {
// 6. Получаем ID созданного файла
$fileId = $file->getId();
// 7. Получаем файл через getById
$loadedFile = File::getById($fileId);
// 8. Возвращаем либо файл, либо ошибку
if ($loadedFile) {
return $file;
} else {
throw new \Error("Ошибка при получении файла " . $fileName);
}
} else {
throw new \Error("Ошибка при загрузке файла на Диск: " . implode(', ', $folder->getErrors()));
}
}
[/CODE]
В комментариях используется формат файлов с диска. В FILES нужно передать массив id файлов в формате 'n' . $id.
К слову, если записывать в highloadblock, то для хранения файлов можно использовать такой же формат поля Файл (Диск). Требования те же. массив и 'n' перед id
[CODE]<?php
use Bitrix\Crm\Timeline\CommentEntry;
use Bitrix\Disk\Driver;
use Bitrix\Disk\File;
$text = 'Comment text';
$createdById = 1;
$authorId = 1;
$entityId = '';
$entityTypeId = '';
//Пример массива файлов
$arDiskFilesId = [
'n11111',
'n22222',
];
$arComment = [
'TEXT' => $text,
'CREATED' => $createdById,
'AUTHOR_ID' => $authorId,
'FILES' => $arDiskFilesId,
'BINDINGS' => [
[
'ENTITY_TYPE_ID' => $entityTypeId,
'ENTITY_ID' => $entityId,
]
]
];
// Обязательный параметр для отображения файлов
if (!empty($arDiskFilesId)) {
$arComment['SETTINGS'] = [
'HAS_FILES' => 'Y'
];
}
$result = CommentEntry::create($arComment);
function createFileToDisk(string $fileName, string $fileContent, string $fileType, int $userID = null): File
{
// 1. Задаем текущего пользователя
if ($userID) {
$userID = $userID;
} else {
$userID = $GLOBALS['USER']->getID();
}
// 2. Получаем корневую папку текущего пользователя
$storage = Driver::getInstance()->getStorageByUserId($userID);
$folder = $storage->getFolderForUploadedFiles();
// 3. Создаем временный файл
$tempFilePath = sys_get_temp_dir() . '/' . uniqid() . '_' . $fileName;
file_put_contents($tempFilePath, $fileContent);
// 4. Загружаем файл на Диск
$file = $folder->uploadFile(
fileArray: [
'name' => $fileName,
'tmp_name' => $tempFilePath,
'size' => filesize($tempFilePath),
'type' => $fileType,
],
data: [
'CREATED_BY' => $userID,
],
generateUniqueName: true // Создаем файл под уникальным именем, если найден файл с тем же именем
);
// 5. Удаляем временный файл
unlink($tempFilePath);
if ($file instanceof File) {
// 6. Получаем ID созданного файла
$fileId = $file->getId();
// 7. Получаем файл через getById
$loadedFile = File::getById($fileId);
// 8. Возвращаем либо файл, либо ошибку
if ($loadedFile) {
return $file;
} else {
throw new \Error("Ошибка при получении файла " . $fileName);
}
} else {
throw new \Error("Ошибка при загрузке файла на Диск: " . implode(', ', $folder->getErrors()));
}
}
[/CODE]