joomla LogoНедавно я заметил, что вышла новая версия joomla 3.0.3 и, хотя, она еще рекомендуется только для новых сайтов, а не для обновления - возникло большое желание попробовать. Процессу миграции с любой версии на 3.0.3 и посвящена эта статья.

Я переводил сайт с версии 2.5, но таким способом можно перенести практически с любой версии. Так как в базе было очень много "хвостов" от установки различных расширений, демо-баз и обновления с версий 1.5 -1.7, то было решено перенести сайт вручную. Кроме этого мне хотелось пристальнее посмотреть на структуру базы данных Joomla.

Итак порядок действия таков:

  1. Скачиваем архив с сайта joomla.org, распаковываем его в корневой каталог сайта и устанавливаем права и владельца файлов.
  2. Переходим к процессу установки, проходящим, как обычно, в окне браузера. Проходим достаточно простой этап настройки, состоящий из трех экранов. При настройке в поле префикса таблиц вписываем тот префикс, который был в старой базе. По окончании настройки не спешите закрывать окно или нажимать кнопку "Удалить папку Installation"

    joomla install 1

    Joomla install 2

  3. Сначала устанавливаем поддержку русского языка. Нажимаем кнопку внизу страницы "Установка языковых пакетов", выбираем необходимые языки и назначаем настройки по-умолчанию.

    Joomla install 3

  4. Удаляем директорию Installation, нажав соответствующую кнопку на странице мастера установки. На этом начальная настройка окончена. Надо заметить, что инсталляция проходит проще, быстрее и логичнее, чем в предыдущих версиях - прогресс налицо.
  5. Переходим в панель управления свежеустановленного сайта. Добавляем необходимые расширения. Обратите внимание на то, что многие расширения еще не поддерживают joomla 3. В моем случае не работало расширение jcomments: о переносе комментариев будет в другой статье.
  6. Исходя из того, что самым ценным на сайте является контент, формируем список тех таблиц, которые будем переносить в новую БД. Вам, возможно, понадобится перенести еще какие-то таблицы. Мой файл tables.list содержит:
    prefix_categories
    prefix_content
    prefix_content_frontpage
    prefix_menu
    prefix_menu_types
    prefix_user_usergroup_map
    prefix_usergroups
  7. Проверим структуру таблиц, то есть отличия в разных версиях баз: В моем случае было удалено 4 поля (title_alias, mask, sectionid, parentid) из таблицы CONTENT, поле ordering из таблицы MENU, поле usertype из таблицы USERS и добавлено поле version в таблицу CATEGORIES.
    mysql> desc prefix_content;
    +------------------+---------------------+------+-----+---------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------------+---------------------+------+-----+---------------------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | asset_id | int(10) unsigned | NO | | 0 | | | title | varchar(255) | NO | | | | | alias | varchar(255) | NO | | | | | introtext | mediumtext | NO | | NULL | | | fulltext | mediumtext | NO | | NULL | | | state | tinyint(3) | NO | MUL | 0 | | | catid | int(10) unsigned | NO | MUL | 0 | | | created | datetime | NO | | 0000-00-00 00:00:00 | | | created_by | int(10) unsigned | NO | MUL | 0 | | | created_by_alias | varchar(255) | NO | | | | | modified | datetime | NO | | 0000-00-00 00:00:00 | | | modified_by | int(10) unsigned | NO | | 0 | | | checked_out | int(10) unsigned | NO | MUL | 0 | | | checked_out_time | datetime | NO | | 0000-00-00 00:00:00 | | | publish_up | datetime | NO | | 0000-00-00 00:00:00 | | | publish_down | datetime | NO | | 0000-00-00 00:00:00 | | | images | text | NO | | NULL | | | urls | text | NO | | NULL | | | attribs | varchar(5120) | NO | | NULL | | | version | int(10) unsigned | NO | | 1 | | | ordering | int(11) | NO | | 0 | | | metakey | text | NO | | NULL | | | metadesc | text | NO | | NULL | | | access | int(10) unsigned | NO | MUL | 0 | | | hits | int(10) unsigned | NO | | 0 | | | metadata | text | NO | | NULL | | | featured | tinyint(3) unsigned | NO | MUL | 0 | | | language | char(7) | NO | MUL | NULL | | | xreference | varchar(50) | NO | MUL | NULL | | +------------------+---------------------+------+-----+---------------------+----------------+ 30 rows in set (0.00 sec)
  8. Переносим содержимое таблиц в новую базу
    cat tables.list | xargs -n 1 -I {} sh -c 'mysqldump -u root old_database {} |mysql -u root new_database'
    При таком переносе таблицы будут пересозданы со старой структурой, но будет проще удалить колонки прямо из консоли mysql, нежели править вручную файлы дампов.
  9. Так как структура немного изменилась (некоторые поля были убраны), то подправим структуру таблиц в mysql:
    mysql> alter table prefix_content drop column title_alias;
    Query OK, 92 rows affected (0.01 sec)
    Records: 92  Duplicates: 0  Warnings: 0
    
    mysql> alter table prefix_content drop column mask;
    Query OK, 92 rows affected (0.02 sec)
    Records: 92  Duplicates: 0  Warnings: 0
    
    mysql> alter table prefix_content drop column sectionid;
    Query OK, 92 rows affected (0.01 sec)
    Records: 92  Duplicates: 0  Warnings: 0
    
    mysql> alter table prefix_content drop column parentid;
    Query OK, 92 rows affected (0.01 sec)
    Records: 92  Duplicates: 0  Warnings: 0
    
    mysql> alter table prefix_categories add version int(10) unsigned not null default '1';
    Query OK, 17 rows affected (0.05 sec)
    Records: 17  Duplicates: 0  Warnings: 0
    
    mysql> alter table prefix_menu drop column ordering;
    Query OK, 92 rows affected (0.01 sec)
    Records: 92  Duplicates: 0  Warnings: 0
    
    mysql> alter table prefix_users drop column usertype;
    Query OK, 12 rows affected (0.01 sec)
    Records: 12  Duplicates: 0  Warnings: 0
    
  10. Заходим в менеджер меню, нажимаем кнопку "Перестроить".

    Joomla rebuild menu

  11. Заходим в менеджер категорий. Также перестраиваем дерево категорий. Если после всего проделанного при сохранении материала выдает ошибку "Невозможно сохранить invalid parent id", то необходимо зайти в каждую категорию и нажать "Сохранить и закрыть"

    Joomla rebuild categories

  12. Настраиваем модули, доводим шаблон до ума и т.д.

 

Добавить комментарий
  • Комментарии не найдены