Структура инфоблоков напоминает дерево файловой системы. Но элементы инфоблоков хранятся в базе данных, работать с ними можно через административный интерфейс или программно используя АПИ. Иногда надо быстро изменить разветвлённую структуру простых элементов (например, 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("-"=>" "));
а при нажатии кнопки [экспорт в файлы] идет ошибка
Однако сегодня задача не так актуальна т.к. стандартный компонент библиотеки документов умеет работать непосредственно с файлами на диске.
Поправил ссылку!
А подскажите пожалуйста как эту компоненту нужно установить?
Что нужно сделать?
Затем создайте страницу с кодом из поста и откройте её в браузере.
Попробуйте разобраться на базе учебных курсов: