Добрый день.
Подскажите, пожалуйста. На определенной странице необходимо реализовать некий справочник документов. Должен выводиться список документов и для каждого документа список прикрепленных к нему файлов. На мой взгляд для реализации данной задачи вполне подходит стандартный инфоблок.
В административной части добавляю новый тип раздела на основе инфоблока. В этом типе разделы выступают как документы (название и описание), а элементы разделов как прикрепленные файлы. Для каждого элемента добавлено свойство с типом "файл" для загрузки файла.
В пользовательской части решено было создать собственный компонент. Его логика довольно проста - загрузить список разделов и файлов. Дополнительно для компонента добавил настройки глубины выборки дерева, показ количества закрепленных файлов за документом и т.п. (это к слову).
Как сделан компонент. Выбирается список разделов CIBlockSection::GetList с сортировкой 'LEFT_MARGIN' => 'ASC'. Далее в цикле для каждого раздела запрашивается список прикрепленных элементов CIBlockElement::GetList с указанием родителя и доп. параметрами и для каждого выбранного элемента запрашивается информация по прикрепленному файлу CFile::GetByID (дело в том, что для каждого выбранного элемента в поле PROPERTY_имя_параметра_с_файлом возвращается только ID прикрепленного файла). Итого получается довольно много запросов. На мой взгляд, этот список можно собрать куда более эффективно в один/пару запросов. Но это если писать выборку от руки.
Подскажите, пожалуйста, есть ли возможность собрать данное "дерево", используя реализованный функционал Bitrix, более рациональным/эффективных способом? Или же я неправильно изначально реализовал принцип хранения / процедуру выборки данных?
К слову, дополнительно я прикрутил стандартное кэширование компонентов, что, теоретически, должно помочь.
Подскажите, пожалуйста. На определенной странице необходимо реализовать некий справочник документов. Должен выводиться список документов и для каждого документа список прикрепленных к нему файлов. На мой взгляд для реализации данной задачи вполне подходит стандартный инфоблок.
В административной части добавляю новый тип раздела на основе инфоблока. В этом типе разделы выступают как документы (название и описание), а элементы разделов как прикрепленные файлы. Для каждого элемента добавлено свойство с типом "файл" для загрузки файла.
В пользовательской части решено было создать собственный компонент. Его логика довольно проста - загрузить список разделов и файлов. Дополнительно для компонента добавил настройки глубины выборки дерева, показ количества закрепленных файлов за документом и т.п. (это к слову).
Как сделан компонент. Выбирается список разделов CIBlockSection::GetList с сортировкой 'LEFT_MARGIN' => 'ASC'. Далее в цикле для каждого раздела запрашивается список прикрепленных элементов CIBlockElement::GetList с указанием родителя и доп. параметрами и для каждого выбранного элемента запрашивается информация по прикрепленному файлу CFile::GetByID (дело в том, что для каждого выбранного элемента в поле PROPERTY_имя_параметра_с_файлом возвращается только ID прикрепленного файла). Итого получается довольно много запросов. На мой взгляд, этот список можно собрать куда более эффективно в один/пару запросов. Но это если писать выборку от руки.
Подскажите, пожалуйста, есть ли возможность собрать данное "дерево", используя реализованный функционал Bitrix, более рациональным/эффективных способом? Или же я неправильно изначально реализовал принцип хранения / процедуру выборки данных?
К слову, дополнительно я прикрутил стандартное кэширование компонентов, что, теоретически, должно помочь.