В моем случае у меня пользовательское свойство раздела типа "disk_file"(Файл с Диска). Это раздел но суть похожа решил сюда выложить. Через обычный CIBlockSection::Update у меня привязывается если добавить "n" но не очищается при удалении привязки пишет ошибку не найден файл поэтому я сделал через USER_FIELD_MANAGER
Получилось как то так:
Прикрепить файл с диска
Удалить привязку
Но если два раза привязать один и тот же файл то создаться две записи в таблице b_disk_attached_object, а удалиться только 1 поэтому в зависимости от логики перед обновлением лучше проверять на заполненность и очищать значения если меняется или не передавать на обновление тот же файл
Показывал на странице я таким образом
Получилось как то так:
Прикрепить файл с диска
Код |
---|
$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"]; } } |