Наши заметки о MODx
В этом разделе мы будем собирать небольшую копилку секретов по работе с системой управления контентом сайта (CMS) MODx. Эти заметки ни в коем случае не претендуют на лавры документации. На нашем сайте тема MODx вообще занимает небольшой уголок, и эти материалы мы размещаем только потому, что по роду основной работы нам приходится оказывать техническую поддержку нескольким десяткам организаций, использующих наши прототипы сайтов. В то же время кое-что может пригодиться и другим людям.
Мы не претендуем на изложение "истины в последней инстанции". Наверняка в этих заметках гуру MODx найдут неточности и ошибки. Мы будем очень благодарны, если на это нам укажут в комментариях.
В заметках мы стараемся не просто сразу приводить готовое правильное решение, но и показываем, как мы набивали шишки в процессе поиска.

Пакетное добавление документов


Добавление страниц как обычно - вручную, в дерево иногда раздражает. Очень часто хочется "нажать кнопку" и добавить множество страниц в пакетном режиме. Для решения такой задачи разработан модуль fast_content_csv.

У нас тоже просто напрашивается использование подобного модуля. Мы хотим опубликовать на сайте иллюстрированные меню ruCAD - э это будут, как минимум, сотни страниц. Ну не вручную же их добавлять? Это вполне можно автоматизировать, тем более, что описания меню имеют стандартную структуру.

Модуль Fast_Content_Csv

С помощью этого модуля можно импортировать страницы, описанные в текстовом файле формата CSV. Для этой цели был создан первый простейший вариант модуля - fast_content_035. Это был вариант для конкретного применения, но с большими возможностями - в перспективе. Затем модуль был доработан немецким автором и испытывался нами в версии fast_content_csv_v09.2.

Формат CSV

CSV (Comma Separated Value) - распространенный текстовый формат для хранения данных. Как видно из названия, данные в нем разделяются запятыми. Microsoft Excel считает этот формат "своим", может читать и сохранять данные в этом формате. Однако это не лучший способ (возможно, худший) создания таких файлов. Самый лучший - обычный текстовый редактор. И, конечно, различные программы. Например, из базы данных MySQL можно экспортировать данные в формат CSV. 

Фрагмент таблицы контента сайта в CSV.

В примере мы обрезаем длинные строки (ОСТАВИМ СЕМЬ ПОЛЕЙ), чтобы было понятно.

В первой строке файла содержатся имена полей. Сами имена строковые, поэтому они заключены в кавычки. Разделителем полей является символ точки с запятой:

"id";"type";"contentType";"pagetitle";"longtitle";"description";"alias";"published"

Далее идут строки данных. Поля данных по количеству и типу должны соответсвовать описаниям полей.

1;"document";"text/html";"Начало";"Главная страница";"Новости, обращения и прочие важнейшие материалы";"index";1
4;"document";"text/html";"Результаты поиска";"Вывод результатов поиска";"Здесь выводятся результаты поиска";"search";1

Здесь строковые данные заключены в кавычки, разделитель полей - точка с запятой. Разделитель полей может быть задан и другим (точка с запятой может встретиться и в тексте), например символ |.

Вообще-то нет формального стандарта CSV. При создании CSV программно можно использовать различные варианты:

Экспорт в CSV из MySQL

Приведенный в исходнике пример был получен при экспорте в CSV из базы данных с помощью программы MySQL-Front при настройках, показанных на скриншоте. Такой файл можно открыть и в Excel, только необходимо его перекодировать в ANSI (или указать кодировку при экспорте). Тогда в Excel можно и поработать с такой таблицей:

CSV в Excel

CSV в Excel

Для импорта в MODx кодировку CSV-файла вновь потребуется преобразовать у UTF-8. Кроме того, Excel при сохранении файла может и убрать кавычкивокруг строк, а как это скажется на работе других программ зараенн сказать нельзя.

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

Работа с модулем Fast_Content_CSV

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

Вроде бы Fast_Content_CSV 0.9 позволяет:

1. Импортировать CSV в MODx. При этом могут использоваться шаблонные переменные, поддерживается любая вложенность,  TV-переменные.

2. Экспортировать контент из MODx в CSV.

При обращении к модулю предлагается выбрать Workspace:

Выбор Workspace

Выбор Workspace

Workspace (рабочее пространство) - это одна из конфигураций, записанных в файле

assets/modules/fast_content_csv/config/workspaces.csv.

Сначала там несколько примеров:

workspace_id;workspace;bind_docid;source_file;export_file;template;action;updateempty;createparent;multiplychilds;btn_update;btn_insert;btn_upin;btn_export;btn_edit;exportalldoc;exportallTV
1;demo;sample.csv;0;8;month-folders;0;1;0;0;0;1;0;0;0;0
2;demo;0;0;fromcsv0;deletechilds;0;0;0;1;0;0;0;0;0;0
3;demo;0;multiply.csv;fromcsv0;multiplychilds;0;0;0;0;0;0;1;1;1;0
4;demo;multiply.csv;0;fromcsv0;multiplyimport;0;0;1;0;1;0;0;0;0;0
5;demo;;source_exportdemo.csv;exportdemo.csv;fromcsv0;exportdemo;0;0;0;0;0;0;0;0;0;0
6;demo;[#t#id#t#];0;0;fromcsv0;edit_childs;0;0;0;0;0;0;0;1;0;0
7;demo;[#t#id#t#];0;test2.csv;fromcsv0;exportchilds;0;0;0;0;0;0;1;1;0;0
Выбрав Workspace, мы видим несколько вкладок конфигурации:

Конфигурация Workspace

Конфигурация Workspace

Документации, естественно, нет. Что же, будем использовать соображалку.

Пожалуй, нам будет проще разобраться на собственном примере.

Пример 1

Допустим, нам надо импортировать несколько страниц с простым (для начала) содержимым. Допустим, мы их будем импортировать ниже этой страницы (у неё ID=1534). Создадим простой CSV-файл: 

parent;pagetitle;introtext;longtitle;content;published;template
1534;Импорт 1;Это импортированный контент 1;Longtitel 1;Эта страница импортирована с помощью Fast Content CSV;1;38
1534;Импорт 2;Это импортированный контент 2;Longtitel 2;Эта страница импортирована с помощью Fast Content CSV;1;38
1534;Импорт 3;Это импортированный контент 3;Longtitel 3;Эта страница импортирована с помощью Fast Content CSV;1;38
1534;Импорт 4;Это импортированный контент 4;Longtitel 4;Эта страница импортирована с помощью Fast Content CSV;0;38
1534;Импорт 5;Это импортированный контент 5;Longtitel 11;Эта страница импортирована с помощью Fast Content CSV;1;38

  Этот файл у нас лежит на локальной машине.

Теперь, очевидно, нам нужно создать своё Workspace. Логично было бы создание Workspace на той же вкладке, где имеется список Workspace, но почему-то создание нового Workspace возможно только после выбора хоть какого-нибудь. Нужно перейти на вкладку Workspace, в строке new Workspace ввести имя и щелкнуть Change  Workspace.

Замечание. Имя надо вводить латиницей. Для каждого Workspace на сервере в каталоге

assets/files/fast_content_csv/
будет создаваться подкаталог с именем заданного Workspace. Мы дали имя Import_rucad, в результате создался каталог 
assets/files/fast_content_csv/Import_rucad.

Теперь этот проект появился в списке:

 Создание Workspace

Далее, "по сооображалке", надо задать csv-файл.  Переходим (прыжок назад через вкладку) на вкладку Configurations, в поле Upload File с помощью кнопки Обзор вводим имя файла на локальной машине. Теперь надо щелкнуть SaveConfig, и файл появится в списке:

Установка CSV-файла

Установка CSV-файла

Как-то неуклюже всё! Возле Upload File нет ожидаемой кнопки Загрузить, вкладки расположены в неестественном порядке, Save Config совсем не кнопкой смотрится, тут же на вкладке куча непонятных и вроде не относящихся к теме чекбоксов.

Ну, да ладно, потом сделаем тюнинг.

Теперь надо прыгнуть на вкладку Field-Config и настроить соответствие полей.

Настройка полей

Настройка полей

Здесь тоже шибко соображалка нужна. Слева идут имена полей MODx. Для каждого из них нужно выбрать в колонке Source-Fields соответствующее поле из нашего CSV-файла. Так как у нас имена были стандартные, то соответствие уже установлено. Но вот поля description в нашем CSV-файле не было, и мы задали для него поле longtitle. Default-values, очевидно, надо задать для отсутствующих в CSV. Мы ничего не задавали. Match-fields, по-видимому, можно задать для вычисляемых полей. С этим разберемся отдельно. И опять надо не забыть щелкнуть не похожую на кнопку кнопку Save Changes!

Вот теперь можно переходить на вкладку Start.

Запуск импорта

Запуск импорта

Очевидно, нужно выбрать Action из Insert, Update или Update/Insert и щелкнуть Run. Внизу появятся сообщения о результатах действия. При включенном флажке Run in test-mode, можно подумать, что добавления физически не произойдет.Это так и происходит, но тут есть подлость - и при снятом флажке не происходит обновления дерева документов. Чтобы увидеть результаты, надо непременно щелкнуть кнопку Обновить дерево.

В результате у нас действительно добавились заданные документы. Они вставились в виде дочек к этой заметке, там мы их и оставим, на долгую память.

Промежуточные выводы

1. Модуль fast_content_csv очень хороший, но выполнен достаточно неудачно в части "юзабельности". Если его немного улучшить в части интерфейса, да снабдить хорошей документацией - цены ему не будет.

2. Плагин  fast_content_csv, возможно, тоже хороший. Но нам не удалось его проверить в бою, пока вообще непонятно зачем он, и что делает. Экспорт? Не получился у нас пока вообще экспорт, да и не нужен пожалуй. Экспорт из БД мы всегда сделаем более надежными методами.

Разумеется всё это только наши личные выводы - возможно, некомпетентные. Мы совсем немного поковырялись. Но очень уж скупо с документацией. Немецкий разработчик молчит, как партизан на допросе (если это можно сказать о немецком авторе). Вся "документация" - невнятный Tutorials на смеси немецкого с чем-то похожим на английский. В общем, к этому ресурсу мы еще вернемся - после накопления опыта работы и своих возможных корректировок

 

 

 

 

 

01-03-2009 11:29:49



    Содержание раздела «Модуль Fast_Content_CSV»:
Комментарии любых посетителей

Написать комментарий


 
csoldier
Комментарий
Модуль Fast_Content_CSV
Реплика №5: 19.08.2011, 19:56:55
Больше экспериментов с Fast_Content_CSV не проводилось?

P.S. Спасибо за ваш сайт и книгу. Русские статьи по modx большая редкость. "Экспериментаторский" стиль изложения интересный получается в статьях.

P.P.S. На чем построено ваше "Содержание раздела «Об MODx»"
Коля
Комментарий
Re: Пакетное добавление документов
Реплика №4: 25.07.2011, 13:32:34
День добрый.
У меня вот какая проблема.
Пользователь скидывает файлы на комп, заполняет их и отправляет обратно.
Только вот у пользователя кодировка windows-1251, а у fast_content_csv UTF-8.
Как лучше перекодировать?
Может в модуле надо что-то дописать?
Если да, то покажите,пожалуйста, что и куда.
Заранее спасибо.
Владимир
Комментарий
Re: Пакетное добавление документов
Реплика №3: 26.07.2009, 01:41:08
Попробовал буквально пару часов назад. Модуль версии 09.2. Импортировалось нормально, включая TV. Единственная проблема - не импортировались названия документов, пришлось вводить вручную потом.
ShaggyDoc
Комментарий
Re: Пакетное добавление документов
Реплика №2: 01.03.2009, 20:58:42
Ага. Начал писать эту заметку, подключил модуль и плагин - они мне сайт порушили. Излечивалось только физическим удалением siteCache.idx.php.

Два раза удалял и заново ставил. Руки, что ли кривые, или установка специальная нужна?
Anonymous
Комментарий
Re: Пакетное добавление документов
Реплика №1: 01.03.2009, 20:55:17
Ну и что? Полуфабрикат?