Modx выгрузка в excel

Обновлено: 08.07.2024

This command line utility is built for migrating content stored as Excel files ( XLS ) into or out-of MODX, e.g.

  • Import XLS file as MODX resources
  • Export MODX resources to XLS file
  • Import WordPress XLS dump into MODX

Each command has a corresponding mapping command which generates a .yml file. This mapping file contains all the important mappings which define the behavior of the command.

Installation is also possible using Repoman.

This project was originally conceived as a bit of licensed software. but since it has not really helped fund my mansion or yacht, I have just stripped out the license check and made it freely available.

Each command can be executed from the command line using the following syntax:

Create a map file defining how you want your MODX site exported: it's a preperation step. This .yml file will be referenced by the export command.

Export your current MODX site to an XLS file -- the behavior of this command can be configured using a .yml file generated by the map:export command.

Create a map file defining how you want a given XLS file to be imported. This .yml file will be referenced by the import command.

Import an XLS file into MODX -- the behavior of this command can be configured using a .yml file generated by the map:import command.

Create a map file defining how you want a WordPress XML dump file imported into MODX.

To export your MODx site, first create your export map:

Then edit the newly created export.yml file. It has comments and it should give you a good starting point for seeing what all your custom fields (a.k.a. template variables) are, and you can tweak the desired names of your XLS columns.

Once you have edited the export.yml configuration to your liking, then you can export your MODX content to an .xls file by specifing the target filename and the .yml configuration file to be used, for example:

If the export command appears to finish, but there's no file created, then PHP may have silently barfed due to a memory error. On successful runs, you should see a message at the end stating "Export complete". If you don't see that message, try setting the --limit and --offset parameter to make for smaller XLS files, e.g.

On larger sites or sites with lots of template variables, you may need to break up the job into several smaller exports to avoid this kind of memory error.

MODx Revolution удобна во многих отношениях. Если в MODx Evolution можно было сделать всё, то в MODx Revolution можно сделать абсолютно всё. Были бы фантазия и терпение. Однако, после появления Revolution у многих встал вопрос: каким образом перетащить содержимое с одного движка на другой. Одно дело, если у Вас с десяток ресурсов. Тут копипаста Вам в помощь. Другое дело — коллекции контента, каталоги и прочее подобное.

Предыстория

Было у меня две коллекции — анекдотник и былинник. В первой я собирал любимые анекдоты, во второй — истории с «ЯПлакалъ», «IThappens» и прочих интересных порталов. Всё это висело на Evolution 1.0.5. Однако, в один прекрасный день я перевёл весь свой много-доменный сайт на один движок и одну БД. В общем перешёл на Revolution. Естественно встал вопрос о переносе контента. С разделом «о себе» и музыкальным разделом всё было просто — копипаста. О форуме я вообще не парился — он всё равно на phpBB. А вот с анекдотником и былинником вопрос пришлось отложить в долгий ящик, ибо скопипастить всё накопившееся там терпения не хватило бы…

Экспорт

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

Почему JSON? Да просто, наверное, потому, что устал я чертовски от всяких XML-парсеров. Даром, что для JSON существует простейшие функции - json_encode и json_decode. Это чрезвычайно удобное обстоятельство делает вариант с JSON куда более предпочтительнее, чем все остальные варианты.

С экспортом в JSON всё просто. Итак содержимое страницы для экспорта (шаблон _blank):

Содержимое чанка cat:

catLast — то же самое, только без запятой в конце. Содержимое чанка item:

itemLast — то же самое, только без запятой в конце.

* пробелы связаны с тем, как интерпретирует HTML-сущность Хабрахабр.

В итоге получается внушительный такой файлик. Да, главное — не забыть выставить тип данных на странице экспорта. Тип данных - text/javascript. Каким-то макакером можно сразу экспортировать данные Ditto в JSON. Но времени разбираться в этом вопросе не было и нет.

Импорт

Файлик получили. Что дальше? А дальше я наткнулся на статейку о создании соц-сети на MODx и узрел, как именно программным путём можно создать в MODx Revolution новые документы. Родилась идея, а вслед за ней сниппет:

Сразу скажу: это не претендует на универсальное решение. Код практически не откомментирован, увы. Слишком спешил поделиться с нуждающимися. Если решение покажется интересным, буду продолжать развивать работу и возможно создам полноценную надстройку над MODx.

  • source (обязательно) — источник JSON файла.
  • itemCount — количество импортируемых элементов за один проход (для не сильно производительных систем). По умолчанию — 4. Если выставить в 0, обрабатываться будет всё за один раз, притом рекурсивно.
  • templates — сопоставление шаблонов. Через запятую перечисляются сопоставления в формате old_id=>new_id, где old_id — id шаблона старого сайта, new_id — id шаблона нового сайта. Если парсер не находит сопоставления, выставляется шаблон 0 (пустой).
  • tvParams — сопоставление TV-параметров. Через запятую перечисляются сопоставления в формате old_name=>new_id, где old_name — имя переменной старого сайта, new_id — id переменной нового сайта. Если парсер не находит сопоставления, переменная пропускается.
  • curContext (обязательно) — текущий контекст. В принципе, если не выставить контекст, тогда он установится в «web».
  • rootID (обязательно) — id ресурса, куда будут импортироваться документы.

К чему разговоры о производительности. А дело в том, что когда я запустил ещё первую версию сниппета, где рекурсивно должно было обрабатываться всё, сервер мне выдал 502-ю ошибку. Проще говоря хостер зарубил высокую нагрузку. Ещё бы — там столько документов было.

Как пользоваться

Для начала пишем простенький шаблон:

  1. На старом сайте открываем на редактирование файл экспорта. Ставим на дальнейшее действие «продолжить».
  2. На новом сайте открываем на редактирование файл, куда мы переносим контент (далее файл импорта). Меняем шаблон на шаблон импорта из JSON, сохраняем.
  3. В параметрах файла импорта выставляем текущий контекст, URL файла экспорта, сопоставление шаблонов и TV-параметров. Сохраняем.
  4. В файле экспорта меняем значение в startID на id родительского ресурса, откуда будем экспортировать контент. Сохраняем.
  5. В файле импорта выставляем id ресурса, куда будем импортировать. Сохраняем.
  6. Вызываем файл импорта на просмотр. Далее повторяем, пока в конце не появится ссылка с надписью «Start»:
    1. Ждём, пока загрузка завершится.
    2. Нажимаем на ссылку «Import next items»

    Да, знаю, для большей производительности можно было бы делать всё прямыми запросами к БД. Только, во-первых, не факт, что это исправило бы ситуацию с 502-й ошибкой. Во-вторых, не было времени изучать что затрагивается в БД при создании ресурса, кроме site_content. В-третьих, написал бы такое решение, меня бы тут же запинали бы с формулировкой «а-как-же-XPDO».

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

    Приложение для экспорта заказов minishop2 в XLS,XLSX,CSV.
    При выгрузке учитываются фильтры и сортировки minishop для заказов.

    Кнопка экспорта

    после установки у вас появится кнопка для экспорта.


    Консоль экспорта

    При экспорте запускается консоль для информирования о процессе экспорта


    Экспортированный файл

    Так выглядит экспортируемый файл.


    Экспорт заказов авторизованным пользователем

    После включения параметра msexportordersexcel_download_user (по умолчанию отключен)
    авторизованные пользователи смогу скачивать свои заказа в формате XLS прямо с фронтенда.


    Для этого нужно добавить кнопку на страницу в личном кабинете пользователя:

    Самое основное чтобы был параметр msexportordersexcel в запросе.

    Системные настройки

    Доступны следующие параметры
    Автоматически скачивать после экспорта
    msexportordersexcel_download
    Да

    Источник для сохранения файлов по умолчанию
    msexportordersexcel_source_default
    устанавливается автоматически после инсталяции

    Включить форматирование даты
    msexportordersexcel_date_process
    Да

    Формат даты
    msexportordersexcel_date_format
    d.m.Y H:i:s

    Экспорт записей

    Если записей очень много и скрипт не успевают отдавать файлы на скачивание, установите в настройках параметр msexportordersexcel_download — Нет в таком случаем вернется ссылка на скачивания.

    Управление профилями экспорта

    В системе используются профили сконфигурированные через компонент ExportUsers.


    Если у вас достаточно знаний то вы можете попробовать модифицировать их в ручную.
    Для понимания как устроена структура профиля вам необходимо ознакомится с компонентом ExportUsers

    После внесения изменений в профиль необходимо запустить скрипт в консоле:

    Внимание. При ручной модификации профиля вы множите нарушить процесс экспорта. По этому не забывайте делать бэкапы профилей

    Xodus - Дополнение MODX Revolution для экспорта пользователей в CSV или Excel файл

    Xodus работает с MODX версий 2.2+ и позволяет администраторам сайтов экспортировать пользователей из выбранной группы в CSV, MS Excel 2000 или MS Excel 2007 форматы файлов для использования вне MODX, например для создания рассылки или группового импорта в другие приложения. Использование формата MS Excel 2007 очевидно также позволяет использование файла любым приложением, которое понимает Open XML формат.

    Как он работает

    • Админ сайта выбирает группу пользователей для экспорта.
    • Выбирает формат экспортируемого файла.
    • Жмёт экспорт и далее файл создаётся в директории tmp в середине директории компонента, например /components/xodus/tmp, которая далее выдаётся в браузер и с соответствующими заголовками и инициализируется загрузка файла и временный файл удаляется в целях безопасности. Если у вас корневой каталог находится выше корня документа для лучшей безопасноти, то временной файл очевидно никогда не будет доступен через веб. Если ваше ядро веб-доступно, то в комплект с дополнением входит .htaccess файл для предотвращения доступа файлов к tmp директории, очевидно, что он будет работать на MODX установках обслуживаемых Apache или его деривативами

    Для создания Excel функциональностий использовался отличная PHPExcel библиотека с небольшими изменениями для установки временной папки (как я уже указал выше). Так было сделано с целью, чтобы Xodus по-прежнему работал на шаред хостингах, где open_basedir ограничения могут предотвратить доступ к временным системным папкам.

    Код доступен через Github и скоро появится в репозитории MODX.

    Василий Столейков

    А как собрать и установить компонент с GitHub'а?
    Что делать с этими папками:
    _build
    assets
    core

    Как их установить, или собрать в транспортный пакет?

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