В моем случае у меня пользовательское свойство раздела типа "disk_file"(Файл с Диска). Это раздел но суть похожа решил сюда выложить. Через обычный CIBlockSection::Update у меня привязывается если добавить "n" но не очищается при удалении привязки пишет ошибку не найден файл поэтому я сделал через USER_FIELD_MANAGER
Получилось как то так:
Прикрепить файл с диска
Код |
---|
$value="n".$fileiddisk;
$GLOBALS["USER_FIELD_MANAGER"]->update("IBLOCK_".$IBLOCK_ID."_SECTION",$ID_SECTION, array('UF_DISK_FILE' => $value));
|
Удалить привязку
Код |
---|
$value="";
$GLOBALS["USER_FIELD_MANAGER"]->update("IBLOCK_".$IBLOCK_ID."_SECTION",$ID_SECTION, array('UF_DISK_FILE' => $value));
|
Но если два раза привязать один и тот же файл то создаться две записи в таблице b_disk_attached_object, а удалиться только 1 поэтому в зависимости от логики перед обновлением лучше проверять на заполненность и очищать значения если меняется или не передавать на обновление тот же файл
Показывал на странице я таким образом
Код |
---|
use Bitrix\Main\Application;
use Bitrix\Main\Web\Uri;
\Bitrix\Main\Loader::includeModule('disk');
$this->addExternalCss("/bitrix/components/bitrix/disk.file.view/templates/.default/style.min.css");
CJSCore::Init(['ui.viewer']);
$driver = \Bitrix\Disk\Driver::getInstance();
$userFieldManager = $driver->getUserFieldManager();
$urlManager = $driver->getUrlManager();
if($sect["UF_DISK_FILE"]>0){
$attachedModel = $userFieldManager->getAttachedObjectById($sect['UF_DISK_FILE']);
if($attachedModel){
$fileModel = $attachedModel->getFile();
$fileUri=new Uri($urlManager->getUrlForDownloadFile($fileModel));
$attr = \Bitrix\Disk\Ui\FileAttributes::buildByFileId(
$fileModel->getFileId(),$fileUri)
->setObjectId($fileModel->getId())
->setTitle($fileModel->getName())
->addAction(['type' => 'download']);
$sect["HTML_DISK_FILE"]=" <span class='disk-detail-sidebar-editor-item disk-detail-sidebar-editor-item-show' id='bx-disk-filepage-filename' ".$attr.">Текст кнопки</span>";
echo $sect["HTML_DISK_FILE"];
}
}
|