Заметки
Как получить ID папки или файла Диска
Как не перепутать storage ID, object ID, folder ID, disk file ID и внутренний FILE_ID при работе с Диском.
Для методов Диска нужен не любой файловый ID, а ID объекта Диска. Хранилище, папка, файл, прикреплённый объект и физический FILE_ID — разные уровни.
Задача
В Диске есть несколько разных ID. Из-за этого легко передать в метод ID хранилища вместо ID папки или ID прикрепления вместо ID файла.
Уровни ID
storage ID — это хранилище. object ID — объект Диска: файл или папка. FILE_ID — внутренняя файловая запись, которая лежит ниже объекта Диска.
Для методов disk.folder.* обычно нужен ID папки как объекта Диска. Для disk.file.* — ID файла как объекта Диска.
Получение через REST
Если папка находится в корне хранилища, начните с дочерних элементов хранилища. Если внутри другой папки — используйте дочерние элементы папки.
BX24.callMethod(
'disk.storage.getchildren',
{ id: 3 },
function (result) {
console.log(result.data());
}
); BX24.callMethod(
'disk.folder.getchildren',
{ id: 9043 },
function (result) {
console.log(result.data());
}
); Получение в коробке
В коробке можно получить хранилище пользователя или общее хранилище и искать объект внутри него.
use Bitrix\Main\Loader;
use Bitrix\Disk\Driver;
use Bitrix\Disk\Internals\FolderTable;
const USER_ID = 1;
Loader::includeModule('disk');
$storage = Driver::getInstance()->getStorageByUserId(USER_ID);
$root = $storage ? $storage->getRootObject() : null;
$folder = $root ? $root->getChild([
'=NAME' => 'Документы сделки',
'TYPE' => FolderTable::TYPE_FOLDER,
]) : null;
if ($folder) {
echo $folder->getId();
} Если нужно скачать физический файл, у объекта файла Диска отдельно получите внутренний FILE_ID.