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

Как изменить базу данных при переходе на MODx


В предыдущей заметке мы начали описание перехода с CMS Etomite на MODx. Закончили мы получением копии базы данных сайта, работающего под Etomite в виде SQL-файла.

Что делать дальше?

Итак, мы имеем SQL-файл с содержимым прежней базы данных. Нам его необходимо переделать для MODx.

SQL-файл - это текстовый файл, содержащий команды на языке SQL - основном средстве для работы с базами данных. Здесь мы, конечно, не будем разбирать сам язык запросов, так как книги только по введению в SQL содержат около 1000 страниц. Будем считать, что читатели имеют об этом представление. Наша задача - переделать базу данных. Сделать это можно разными способами, например с помощью программы MySQL-Front в визуальном режиме. Но зачем нам сотни раз всякие кнопочки нажимать? Мы просто отредактируем SQL с помощью обычного текстового редактора Notepad++.Основной метод работы - Copy-Paste, а также поиск и замена.

SQL-файл выглядит примерно так:

Фрагмент SQL

Фрагмент SQL

Сначала вырабатываем общую стратегию работы.

У нас есть полностью отлаженный сайт под MODx - вот этот самый, который сейчас на экране - назовем его для краткости MX-сайт. И есть другой сайт, совершенно с иным содержимым, работавший под Etomite - назовем для краткости ET-сайт. Для ET-сайта мы имеем SQL-файл. Назовем его ET-SQL. Для MX-сайта мы тоже сделаем MX-SQL. Вот с этими файлами мы и будем далее работать.

Базы данных Etomite и MODx похожие, но всё-таки разные. Они отличаются наличием таблиц, а некоторые одинаковые таблицы отличаются структурой. Часть таблиц мы можем взять из MX-SQL, а часть (прежде всего контент сайта) мы обязаны оставить из ET-SQL.

Сведем сведения по базам данных в таблицу. В ET-SQL имена таблиц имеют префикс etomite_ (мог быть и другой), а в MX-SQL - префикс modx_ (тоже мог быть другой). Пока мы будем эти префиксы использовать, потом заменим. 

Сведения о таблицах

Таблица (без префикса)
 ET-SQL MX-SQL
 Различия  Наши действия в ET-SQL
active_users
member_groups
membergroup_access
membergroup_names
site_keywords
user_messages

 есть  есть  нет  Оставляем, как есть
 categories нет  есть    Копируем из MX-SQL, получая в ET-SQL категории ресурсов. Они у нас уже упорядочены и, хотя в Etomite не использовались, это позволит нам потом, уже в менеджере, разспределить ресурсы по категориям.
 document_groups  есть  есть  структура  Копируем из MX-SQL только структуру (CREATE TABLE). Таблицу document_groups не надо заполнять, иначе после правки документ, отнесенный к какой-то группе будет доступен только WEB-пользователям этой группы! В Etomite WEB-пользователей не было и действие групп распространялось только на менеджеров.
 documentgroup_names  есть  есть  структура, добавлены два поля

  Копируем из MX-SQL структуру (CREATE TABLE), а содержимое (INSERT) корректируем, добавляя в конце два поля. Таблица маленькая, это сделать легко. Например, вместо:

INSERT INTO `modx_documentgroup_names` VALUES (1,'Новости');

запишем

INSERT INTO `modx_documentgroup_names` VALUES (1,'Новости',0,0);

easy2_comments
easy2_dirs
easy2_files
ep_choice
ep_language
ep_poll
ep_translation
ep_userip

 нет  есть  Это дополнительные таблицы   Копируем из MX-SQL структуру (CREATE TABLE), и содержимое (INSERT) тоже, но просто для примера - чтобы было. Не понадобится - удалим в менеджере

event_log
fd_count
jot_content
jot_fields
jot_subscriptions
nl_ids

 нет  есть    Копируем из MX-SQL структуру (CREATE TABLE) - заполнятся потом "сами".
 manager_log  есть  есть  контент  Оставляем структуру (CREATE TABLE), и содержимое (INSERT)- удаляем.
 manager_users  есть  есть  струкутра - длина поля username
  Копируем из MX-SQL структуру (CREATE TABLE), а содержимое (INSERT) оставляем неизменным.
site_content
site_htmlsnippets
site_snippets
site_templates
 есть  есть  структура - значительные отличия
 Копируем из MX-SQL структуру (CREATE TABLE), а содержимое (INSERT) - очень серьезно редактируем. Об этом - отдельная заметка.

site_content_metatags
site_metatags
site_module_access
site_module_depobj
site_tmplvar_access
site_tmplvar_contentvalues
site_tmplvar_templates

 

 нет  есть    Копируем из MX-SQL структуру (CREATE TABLE)
site_modules
site_plugin_events
site_plugins
site_tmplvars
system_eventnames
user_settings
web_groups
web_user_attributes
web_user_settings
web_users
webgroup_access
webgroup_names


 нет  есть    Копируем из MX-SQL структуру (CREATE TABLE) и содержимое (INSERT)
system_settings
user_attributes
user_roles

 есть  есть  структура и содержимое
Заменяем на скопированные из MX-SQL структуру (CREATE TABLE) и содержимое (INSERT)

Замечание.
В ET-SQL могут обнаружиться и иные таблицы, например epg2_galleries (для одного из видов галерей).  
Скорее всего, сниппеты, работающие с этими таблицами, в MODx не будут использоваться и такие таблицы можно просто удалить.

Итак, основную черновую работу мы проделали. Серьезную работу по редактированию основных  таблиц (выделены цветом) мы опишем отдельно. А теперь, обычным поиском и заменой исправляем в ET-SQL:

  • CHARSET=cp1251 на CHARSET=utf8
  • префиксы таблиц `etomite_  на `modx_ (или какие-то другие).

  Далее нам предстоит ещё много работы... Продолжение следует...

04-03-2009 10:56:00



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

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