
Структура инфоблоков напоминает дерево файловой системы. Но элементы инфоблоков хранятся в базе данных, работать с ними можно через административный интерфейс или программно используя АПИ. Иногда надо быстро изменить разветвлённую структуру простых элементов (например, FAQ). Кто пользуется FAR, знает, как это легко можно сделать с файлами. Здесь хорошо было бы иметь возможность получить файлы из инфоблоков и наоборот.
Другой случай: есть корпоративное хранилище документов, при переходе на было бы удобно перевести хранилище на встроенную . В этом случае файлы будут храниться в свойстве инфоблока. Можно подключить сетевой диск и передать файлы на него, но для больших хранилищ это будет не вполне удобным (не хочу в рамках данного изложения углубляться во все технические особенности процесса).
А вот файлы в инфоблоки напрямую возможно? Возможно! Для этого надо писать свои скрипты. Предлагаю свой вариант вашему вниманию.
[spoiler]
Любой мало-мальски опытный разработчик на битрикс скажет, что в общем это не сложно: сканируем директории, выполняем CIBLockElement::Add . Получится небольшой скрипт, тут, там пара нюансов и готово.
Я решил посмотреть на проблему с позиции пользователя и сделал компонент. Внешний вид весьма аскетичный, две кнопки: импорт, экспорт. А вся настройка идёт через параметры. Имя файла - название элемента, каталог - название секции. Содержимое файла определяется настройками.

- выбираем инфоблок
- содержимое файлов. Можно выбрать анонс, детальное описание (расширение файла будет определять тип: txt или html) или свойство типа файл (для библиотеки документов)
- путь для файлов указывается относительно корня сайта, если папка не существует, будет создана при экспорте
- кодировка системы. Важный параметр для элементов с русскими буквами в названии. Для системы windows устанавливается windows-1251, а для linux/unix надо уточнить у хостера либо провести эксперимент (вариантов всего 3). Можно не перекодировать имена, это будет работать если кодировка сайта совпадает с кодировкой файловой системы.
Вот как это выглядит в работе. Есть инфоблок из демо сайта:

Делаем экспорт:

Архив компонента можно скачать по ссылке:
Пример страницы с подключением компонента, распакованного в /bitrix/components/test
| <?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("Страница обмена");
?><?$APPLICATION->IncludeComponent("test:iblock.files", ".default", array(
   "IBLOCK_TYPE" => "books",
   "IBLOCK_ID" => "6",
   "SOURCE" => "DETAIL_TEXT",
   "FOLDER" => "/test_db",
   "CHARSET" => "utf8",
   "SKIP_ERRORS" => "N"
   ),
   false
);?><?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>
 | 
Что надо знать
- написано под php 5 и выше (функция get_file_contents);
- требуется наличие модуля php: mbstring;
- при экспорте в файлы из имён удаляются специальные символы: ?, *, /, \;
- не будет работать для варианта, когда один элемент находится в нескольких секциях;
- в файлы не попадает много специальной информации: сортировка, доп свойства, цена товара и т.д.;
- элементы и файлы не удаляются, а только добавляются, очистку надо делать вручную;
- в текущей реализации требует полномочий администратора;
Как можно использовать
- быстрое редактирование простых данных типа FAQ;
- импорт файловых хранилищ для КП и резервное копирование файловых хранилищ;
- перенести на битрикс сайт со сложной иерархической структурой через выкачивание сайта в файлы;
- быстро набросать сложную структуру каталога;
- локально без доступа в интернет написать новости, статьи и пр., затем залить на сайт;
- при несложной доработке можно решать специальные задачи;
Пишите если интересно и есть идеи по развитию.
 
															 
			 
      
$arTypesEx = CIBlockParameters::GetIBlockType(Array("-"=>" "));
а при нажатии кнопки [экспорт в файлы] идет ошибка
MySQL Query Error: SELECT BE.NAME as NAME,BE.ID as ID,DATE_FORMAT(BE.TIMESTAMP_X, '%d.%m.%Y %H:%i:%s') as TIMESTAMP_X,BE.MODIFIED_BY as MODIFIED_BY,DATE_FORMAT(BE.DATE_CREATE, '%d.%m.%Y %H:%i:%s') as DATE_CREATE,BE.CREATED_BY as CREATED_BY,BE.IBLOCK_ID as IBLOCK_ID,BE.IBLOCK_SECTION_ID as IBLOCK_SECTION_ID,BE.ACTIVE as ACTIVE,IF(EXTRACT(HOUR_SECOND FROM BE.ACTIVE_FROM)>0, DATE_FORMAT(BE.ACTIVE_FROM, '%d.%m.%Y %H:%i:%s'), DATE_FORMAT(BE.ACTIVE_FROM, '%d.%m.%Y')) as ACTIVE_FROM,IF(EXTRACT(HOUR_SECOND FROM BE.ACTIVE_TO)>0, DATE_FORMAT(BE.ACTIVE_TO, '%d.%m.%Y %H:%i:%s'), DATE_FORMAT(BE.ACTIVE_TO, '%d.%m.%Y')) as ACTIVE_TO,IF(EXTRACT(HOUR_SECOND FROM BE.ACTIVE_FROM)>0, DATE_FORMAT(BE.ACTIVE_FROM, '%d.%m.%Y %H:%i:%s'), DATE_FORMAT(BE.ACTIVE_FROM, '%d.%m.%Y')) as DATE_ACTIVE_FROM,IF(EXTRACT(HOUR_SECOND FROM BE.ACTIVE_TO)>0, DATE_FORMAT(BE.ACTIVE_TO, '%d.%m.%Y %H:%i:%s'), DATE_FORMAT(BE.ACTIVE_TO, '%d.%m.%Y')) as DATE_ACTIVE_TO,BE.SORT as SORT,BE.PREVIEW_PICTURE as PREVIEW_PICTURE,BE.PREVIEW_TEXT as PREVIEW_TEXT,BE.PREVIEW_TEXT_TYPE as PREVIEW_TEXT_TYPE,BE.DETAIL_PICTURE as DETAIL_PICTURE,BE.DETAIL_TEXT as DETAIL_TEXT,BE.DETAIL_TEXT_TYPE as DETAIL_TEXT_TYPE,BE.SEARCHABLE_CONTENT as SEARCHABLE_CONTENT,BE.WF_STATUS_ID as WF_STATUS_ID,BE.WF_PARENT_ELEMENT_ID as WF_PARENT_ELEMENT_ID,BE.WF_NEW as WF_NEW,if (BE.WF_DATE_LOCK is null, 'green', if(DATE_ADD(BE.WF_DATE_LOCK, interval 60 MINUTE)<now(), 'green', if(BE.WF_LOCKED_BY=1, 'yellow', 'red'))) as LOCK_STATUS,BE.WF_LOCKED_BY as WF_LOCKED_BY,DATE_FORMAT(BE.WF_DATE_LOCK, '%d.%m.%Y %H:%i:%s') as WF_DATE_LOCK,BE.WF_COMMENTS as WF_COMMENTS,BE.IN_SECTIONS as IN_SECTIONS,BE.SHOW_COUNTER as SHOW_COUNTER,BE.SHOW_COUNTER_START as SHOW_COUNTER_START,BE.CODE as CODE,BE.TAGS as TAGS,BE.XML_ID as XML_ID,BE.XML_ID as EXTERNAL_ID,BE.TMP_ID as TMP_ID,concat('(',U.LOGIN,') ',ifnull(U.NAME,''),' ',ifnull(U.LAST_NAME,'')) as USER_NAME,concat('(',UL.LOGIN,') ',ifnull(UL.NAME,''),' ',ifnull(UL.LAST_NAME,'')) as LOCKED_USER_NAME,concat('(',UC.LOGIN,') ',ifnull(UC.NAME,''),' ',ifnull(UC.LAST_NAME,'')) as CREATED_USER_NAME,L.DIR as LANG_DIR,B.LID as LID,B.IBLOCK_TYPE_ID as IBLOCK_TYPE_ID,B.CODE as IBLOCK_CODE,B.NAME as IBLOCK_NAME,B.XML_ID as IBLOCK_EXTERNAL_ID,B.DETAIL_PAGE_URL as DETAIL_PAGE_URL,B.LIST_PAGE_URL as LIST_PAGE_URL,DATE_FORMAT(BE.DATE_CREATE, '%Y.%m.%d') as CREATED_DATE FROM b_iblock B INNER JOIN b_lang L ON B.LID=L.LID INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID LEFT JOIN b_user U ON U.ID=BE.MODIFIED_BY LEFT JOIN b_user UL ON UL.ID=BE.WF_LOCKED_BY LEFT JOIN b_user UC ON UC.ID=BE.CREATED_BY WHERE 1=1 AND B.ID IN (0,3) AND ( (BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL) ) AND ((((BE.IBLOCK_ID = '3')))) AND ((((BE.0 IS NULL OR length(BE.0)<=0)))) ORDER BY BE.NAME asc [Unknown column 'BE.0' in 'where clause']Однако сегодня задача не так актуальна т.к. стандартный компонент библиотеки документов умеет работать непосредственно с файлами на диске.
Поправил ссылку!
А подскажите пожалуйста как эту компоненту нужно установить?
Что нужно сделать?
Затем создайте страницу с кодом из поста и откройте её в браузере.
Попробуйте разобраться на базе учебных курсов: