Битрикс удалить файл из множественного свойства

Обновлено: 03.07.2024

Привожу весь текст скрипта.
Назначение его такого. У нас имеется множественное свойство MORE_PHOTO. Скрипт должен сгенерировать привьюшки для всех изображений этого свойства, а затем эти привьюшки записать в свойство PHOTO_SM.
Скрипт удалось заставить заработать, но не без маленького глюка. Первый раз отрабатывает прекрасно. Но вот при повторном сохранении элемента инфоблока в полях PHOTO_SM вылазят пустые поля, причем, количество их в точности совпадает с количеством элементов в MORE_PHOTO.

nietzschean Расскажите как в вашем примере вы применили совет
nikki21

У меня точно такая же задача как у nietzschean.

Вот полный код написанного скрипта, глюков, подобных описанным, в нём не обнаружил.

В начале я чищу все значения множественного свойства, сразу замечу - я сделал на форме "флажок", и только когда он включен - происходит данный механизм


То есть, в соответствии с советом, я создаю массив $arr и в нем прописываю поле "del", затем через SetProperyValueCode сохраняю изменения, далее - удаляю файл:

На втором этапе - записываю все файлы заново

Приведу еще раз код, который удаляет один файл из множества в свойстве ИБ:
PS: мой вариант особо не отличается от того, что писали выше, просто лучше оформлен для понимания.

FILES - Имя свойства в ИБ
$nIBlockID - ID ИБ
$nElementID - ID элемента ИБ

PS: Для удаления всех записей множественного свойства файлов:
Уважаемый nietzschean , а чем вас не устроили функции для работы с изображениями CFile::ResizeImage и CFile::ResizeImageGet в условиях поставленной задачи? Или это для примера было вообще?
Свойств это не касается, но интересен ваш опыт, так как сам часто с изображениями работаю. Мальчик был настолько ленив, что специально вставал пораньше - чтобы подольше ничего не делать! (с)

Нет при использовании array('VALUE' => array("del" => "Y" ) файл сам удаляется с диска. (проверял лично)

А если удалить файл через:

то в инфоблоке останется строчка файл не найден и на сайте будет выводиться битая картинка.
Цитата
Нет при использовании array('VALUE' => array("del" => "Y" ) файл сам удаляется с диска. (проверял лично)
Подтверждаю, удаляется все связанное с файлом, включая сам файл.

У меня ни один код из ветки не завёлся, потому что функция АВТОР не очищала массив, а дополненный постоянно сохраняла. Битрикс не готов к такому беспределу, поэтому я написал на один запрос на удаление.

Как называется, когда ты перерыл всю документацию, потом два дня гуглил, и только потом нашел единственный пост, где объясняется, как выполнить базовую операцию удаления?
Уровень официальной документации никакой.

На сайте вставили новые фото и удалили несколько старых, обновление множественного поля типа файл прошло так.

здесь не надо чистить весь массив старых файлов и заново записывать новыми значениями

В этой заметке расскажу как красиво вывести множественное свойство типа файл в инфоблоке 1С-Битрикс. С показом оригинального названия файла, его транслитированной версии, размера файла в килобайтах и, само собой, ссылкой на скачивание.

Исходные данные для вывода файлов

Итак, в инфоблоке каталога сайта имеем стандартное, множественное свойство "типа файл" с кодом "FILES".

Свойство файл битрикс

Если мы его выведем, штатным способом, через вывод свойств- как оно задумано в Битрикс изначально. Выглядеть это будет не казисто и не интересно

Свойство файл битрикс

Абсолютно не интересно и самое главное не информативно. В моем случае, в данное свойство загружаются документы. Причем они в разных форматах и разного размера. Пользователь должен видеть и название документа и его размер с форматом. Например вот так:

Свойство файл битрикс

Выводим свойство файл через API Битрикс- получая все данные о файлах

Все достаточно просто, так как множественные свойства это обычные массивы. Мы можем получить все данные о каждом файле, просто зная код свойства, в моем случае "FILES". Выглядеть foreach будет следующим образом.

Расскоментировав строку
// echo '<pre>';print_r($arProperty);echo '</pre>';
Вы сможете увидеть все данные о каждом файле, доступные для вывода. По мимо основных, там есть и дата загрузки и тип файла.

В принципе и все. Конкретно в моем случае, в примере выше, результат вывода выглядет следующим образом:

Несколько полезных моментов

Байты в килобаты (размер файла), я привратил, обычной php функцией округления в большую сторону round. Предварительно приведя байты в килобаты. просто разделив $arProperty['FILE_SIZE'] на 1024 (смотри в коде выше).

Иконки для разных типов файлов, назначил через CSS - тут простая стилизация. Зная расширение файла, а точнее расширенеие на которое заканчивается ссылка, просто прописал background для каждой разновидности ссылки. Вот так:

Читайте также: