Миграция с Joomla 1.5 на Joomla 2.5

Предисловие
1. Перенос информационного наполнения
2. Перенос расширений:
  2.1. jDownloads и jComments
  2.2. Шаблон, редактор и другие расширения
Эпилог


Upd: English version of the article: Migrating from Joomla 1.5 to Joomla 2.5. Part 2-1. Transferring jDownloads and jComments.


В первой части мы тяжело, но достойно перенесли наши меню, категории, статьи и прочее наполнение с сохранением структуры на новый сайт. Рассмотрим теперь, как восстановить привычный набор расширений. И начнем с отдельного рассмотрения двух весьма популярных компонентов. jDownloads и jComments считаются чуть ли не лучшими каждый в своей области приложения, их использует великое множество джумловодов. К тому же оба бесплатны и русифицированы, да и переводы на многие другие языки наличествуют. Несомненно желание перенести весь набор комментариев и загрузок на новый сайт. Подробное рассмотрение надежных и проверенных методов миграции jDownloads и jComments с Joomla 1.5 на Joomla 2.5 и является целью данной статьи.

Не вредно будет напомнить лишний раз о необходимости резервного копирования вашего сайта перед выполнением описанных ниже действий! И, опять же, прочтите вначале предисловие!

jDownloads

Тут все хорошо. Разработчики позаботились внести в свой компонент опцию резервного копирования и восстановления Backup - Restore. На офсайте в разделе FAQ есть вкладка How to move jDownloads from Joomla 1.5 to Joomla 2.5? с описанием требований к миграции данного расширения и самого процесса. Сводится он к следующей последовательности действий:

  • На старом сайте обновить версию до последней стабильной (в описании - 1.8.2, но есть уже 1.8.3). В контрольной панели компонента создать файл бэкапа установок (Создать резерв | Backup Creation).
  • На новом сайте установить последний релиз jDownloads для Джумлы 2.5 (на момент написания это 1.9.1 Build 931), отключить автомониторинг (Конфигурация | Configuration > Проверка | Monitoring > Проверять директорию закачек? | Download directory monitoring?).
  • Заменить папки файлов (JoomlaROOT/jdownloads) и картинок (JoomlaROOT/images/jdownloads) на такие же со старого сайта.
  • Затем открыть файл бэкапа в Notepad++ и заменить через Заменить всё | Replace All все вхождения старого префикса на новый (в нашем примере - jos_ на aaaaa_). Сохранить изменения.
  • На новом сайте идем в Backup Restoration | Восстановить из резерва. (Там красным по белому написано: Вы можете восстанавливать резервные файлы только с jDownloads 1.8.2 или новее! Я, тем не менее, переносил так 1.8.1 RC2 Build 832, и все получилось. Но все же, наверное, лучше сделать вначале апгрейд на последний релиз компонента в Джумле 1.5.) Загружаем отредактированный файл резервной копии, жмем кнопку Restore the database right now | Начать восстановление.
  • Когда процесс успешно завершен, переносим кастомные изменения, если таковые были сделаны на старом сайте - файл стилей .css, языковые файлы, свои группы пользователей.
  • Также рекомендуется проверить формат даты и времени в конфигурации компонента, поскольку в новой версии он изменен с php strftime() на date(). Другими словами, если формат вида %d.%m.%Y %H:%M:%S, и даты выводятся в виде %25.%07.%2012 %14:%Июль:%th, то после изменения формата на, к примеру, Y-m-d H:i:s дата и время будут выводиться в приемлемой форме - 2012-07-25 14:09:51. Редактируется это в разделе Конфигурация | Configuration > вкладка Загрузки | Downloads > поле Формат даты и времени | Date-Time format.

И это все о переносе компонента jDownloads с сайта на Joomla 1.5 на сайт на Joomla 2.5. Переходим к следующему расширению.

jComments

Разработчики самого популярного компонента комментариев не предусмотрели опции переноса. К счастью, за них это сделали энтузиасты. В сети, а именно - здесь, нашелся скрипт, осуществляющий миграцию jComments с Джумлы 1.5 на Джумлу 2.5. Вот этот скрипт (кликните на заголовок - он и откроется).

Скрипт

 
-- -------------------------------------------------------------------------------- 
 -- MIGRATION SCRIPT FOR JCOMMENTS IN JOOMLA v1.5.x TO JOOMLA v2.5.x 
 -- -------------------------------------------------------------------------------- 
 
 -- NOTE: Replace string "mydb_livecopy_j15" to your Joomla 1.5.x database name 
 -- -- -- (example: "anolddatabase") -- 9 occurrences 
 -- NOTE: Replace string "mydb_livecopy_j15.myprefix_" to your Joomla 1.5.x database name & table prefix 
 -- -- -- (example: "anolddatabase.jos_") -- 8 occurrences 
 
 -- NOTE: Replace string "mydb_upgrade_j25" to your Joomla 2.5.x database name 
 -- -- -- (example: "anewdatabase") -- 9 occurrences 
 -- NOTE: Replace string "mydb_upgrade_j25.myprefix_" to your Joomla 2.5.x database name & table prefix 
 -- -- -- (example: "anewdatabase.rndpfx1_") -- 8 occurrences 
 
 -- -------------------------------------------------------------------------------- 
 -- _jcomments 
 -- -------------------------------------------------------------------------------- 
 
 INSERT INTO 
      mydb_upgrade_j25.myprefix_jcomments 
      ( 
           id, parent, thread_id, path, level, object_id, object_group, object_params, lang, 
           userid, name, username, email, homepage, title, comment, ip, DATE, isgood, ispoor, 
           published, subscribe, SOURCE, source_id, checked_out, checked_out_time, editor 
      ) 
 SELECT 
      id, parent, 
      CASE WHEN SUBSTRING(path, LOCATE(',', path)+1, LOCATE(',', path, 2))='' THEN 0 
      ELSE SUBSTRING(path, LOCATE(',', path)+1, LOCATE(',', path, 2)) END AS thread_id, 
      path, level, object_id, object_group, object_params, lang, 
      userid, name, username, email, homepage, title, comment, ip, DATE, isgood, ispoor, 
      published, subscribe, SOURCE, source_id, checked_out, checked_out_time, editor 
 FROM 
      mydb_livecopy_j15.myprefix_jcomments; 
 
 
 -- -------------------------------------------------------------------------------- 
 -- _jcomments_custom_bbcodes 
 -- -------------------------------------------------------------------------------- 
 
 -- NOTE: This is disabled as the new version includes the old bbcodes setup (no change) 
 
 -- INSERT INTO 
 --      mydb_upgrade_j25.myprefix_jcomments_custom_bbcodes 
 --      ( 
 --           id, `name`, simple_pattern, simple_replacement_html, simple_replacement_text, pattern, 
 --           replacement_html, replacement_text, button_acl, button_open_tag, button_close_tag, 
 --           button_title, button_prompt, button_image, button_css, button_enabled, ordering, 
 --           published 
 --      ) 
 -- SELECT 
 --      id, `name`, simple_pattern, simple_replacement_html, simple_replacement_text, pattern, 
 --      replacement_html, replacement_text, button_acl, button_open_tag, button_close_tag, 
 --      button_title, button_prompt, button_image, button_css, button_enabled, ordering, 
 --      published 
 -- FROM 
 --      mydb_livecopy_j15.myprefix_jcomments_custom_bbcodes; 
 
 
 
 -- -------------------------------------------------------------------------------- 
 -- _jcomments_reports 
 -- -------------------------------------------------------------------------------- 
 
 INSERT INTO 
      mydb_upgrade_j25.myprefix_jcomments_reports 
      ( 
           id, commentid, userid, name, ip, DATE, reason, STATUS 
      ) 
 SELECT 
      id, commentid, userid, name, ip, DATE, reason, STATUS 
 FROM 
      mydb_livecopy_j15.myprefix_jcomments_reports; 
 
 
 -- -------------------------------------------------------------------------------- 
 -- _jcomments_settings -- ignored as this will load factory settings 
 -- -------------------------------------------------------------------------------- 
 /* 
 INSERT INTO 
      mydb_upgrade_j25.myprefix_jcomments_settings 
      ( 
           component, lang, name, value 
      ) 
 SELECT 
      component, lang, name, value 
 FROM 
      mydb_livecopy_j15.myprefix_jcomments_settings; 
 */ 
 
 -- -------------------------------------------------------------------------------- 
 -- _jcomments_subscriptions 
 -- -------------------------------------------------------------------------------- 
 
 INSERT INTO 
      mydb_upgrade_j25.myprefix_jcomments_subscriptions 
      ( 
           id, object_id, object_group, lang, userid, name, email, hash, published 
      ) 
 SELECT 
      id, object_id, object_group, lang, userid, name, email, hash, published 
 FROM 
      mydb_livecopy_j15.myprefix_jcomments_subscriptions; 
 
 
 -- source=??? 
 
 -- -------------------------------------------------------------------------------- 
 -- _jcomments_version 
 -- -------------------------------------------------------------------------------- 
 
 INSERT INTO 
      mydb_upgrade_j25.myprefix_jcomments_version 
      ( 
           version, previous, installed, updated 
      ) 
 SELECT 
      version, previous, installed, updated 
 FROM 
      mydb_livecopy_j15.myprefix_jcomments_version; 
 
 
 -- -------------------------------------------------------------------------------- 
 -- _jcomments_votes 
 -- -------------------------------------------------------------------------------- 
 
 INSERT INTO 
      mydb_upgrade_j25.myprefix_jcomments_votes 
      ( 
           id, commentid, userid, ip, DATE, VALUE 
      ) 
 SELECT 
      id, commentid, userid, ip, DATE, VALUE 
 FROM 
      mydb_livecopy_j15.myprefix_jcomments_votes; 
 
 
 
 
 -- -------------------------------------------------------------------------------- 
 -- _jcomments_objects  *** NEW FOR JOOMLA 2.5.X 
 -- -------------------------------------------------------------------------------- 
 

end faq

Также там присутствуют грамотные инструкции по его применению на английском. Я попробую изложить их на русском, к тому же чуть подробнее и с визуализацией.

  • Устанавливаем последний релиз jComments (все еще 2.3.0) на новый сайт (в моем случае - Joomla 2.5.9).
  • Копируем скрипт в текстовый файл. Сохранить можно с расширением .sql.
  • Открываем файл в Notepad++ и делаем 4 групповых замены (снова-таки используя Заменить всё | Replace all) имен и префиксов старой и новой баз данных на наши установки. Откройте панель со скриншотами, из них все предельно ясно.

Скриншоты

ogri.me | Миграция jСomments с Joomla 1.5 на Joomla 2.5 - 1

ogri.me | Миграция jСomments с Joomla 1.5 на Joomla 2.5 - 2

ogri.me | Миграция jСomments с Joomla 1.5 на Joomla 2.5 - 3

ogri.me | Миграция jСomments с Joomla 1.5 на Joomla 2.5 - 4

end faq

  • Теперь идем в менеджер баз данных (лучше phpMyAdmin ничего пока не придумано). Там, НЕ ОТКРЫВАЯ НИКАКОЙ БД (важно!), идем на вкладку Import, выбираем наш SQL-файл и запускаем содержащийся в нем скрипт.
  • После сообщения об успешной отработке скрипта возвращаемся в админку сайта на 2.5 во вкладку Комментарии | Comments компонента и убеждаемся, что список теперь содержит комментарии со старого сайта.
  • Последние действия: открываем вкладку Настройки | Settings. Поскольку скрипт не восстанавливает привязку комментариев к категориям, выстраиваем вручную список Включить комментарии в категориях | Choose categories for JComments to work in как он был на старом сайте. Проверяем остальные настройки и при необходимости их редактируем.

Таким вот образом два мощных компонента со всеми данными и файлами клонируются со старого сайта на новый. А в следующей статье мы порассуждаем о переносе с Джумлы Полтора на Джумлу Два-с-Половиной шаблона, редактора и джентльменского набора прочих сторонних расширений.

Комментарии  

Алексей
0 # Алексей 22.08.2013 02:31
Какая-то ерунда. Не работает, т.к. в jos_jcomments которая в 1.5 нет полей path, level и других. SQL просто ругается и все
Ответить | Ответить с цитатой | Цитировать
Ogri
0 # Ogri 22.08.2013 22:49
Это, видимо, потому, что у вас старая версия jComments на сайте с 1.5. Обновитесь на нем до последней (на данный момент - 2.3.0, она прекрасно совместима с Джумлой 1.5) перед запуском скрипта и убедитесь, что все названные вами поля присутствуют.
Ответить | Ответить с цитатой | Цитировать
Алексей
0 # Алексей 18.02.2014 03:49
Олег, приветствую! Web-Кошка посоветовала мне обратиться к вам за консультацией с непонятной проблемой jcomments. Я установил и настроил комментарии для сайта на Joomla 2.5.9, но после переноса сайта с денвера на хостинг комментарии полностью перестали работать. Кнопка отправить ничего не дает, таблица jos_comments остается пустой. Пробовал переустанавливать jcomments и 2.3 и 3.0, не помогает, помогите пожалуйста советом куда копать! Беда тут http://time-attack-garage.ru/index.php/reviews
Ответить | Ответить с цитатой | Цитировать
Ogri
0 # Ogri 18.02.2014 04:33
Здравствуйте, Алексей. Так навскидку трудно сказать, в админке смотреть надо. Только одна странность бросилась в глаза: index.php в URL всех страниц, кроме главной. Может, что-то с sef не устраивает jComments?

А вообще я на вашем месте на страницу отзывов прикрутил бы контактную форму вместо комментов. Типа как у меня "Обратная связь". Я использую Fox Contact, ставил ее и на сайты клиентов, работает четко, хорошие настройки.

Если все-таки предпочитаете оставить jComments и не докопаетесь до решения проблемы - пишите в личку на . Помогу чем смогу.
Ответить | Ответить с цитатой | Цитировать
Алексей
0 # Алексей 18.02.2014 06:40
jComments, похоже, единственный хороший компонент для добавления комментариев сразу на сайт, "Обратная связь" это другое. sef поправил и кинул Вам в личку доступ в админку, быть может свежим взглядом заметите конфликт )
Ответить | Ответить с цитатой | Цитировать
Ирина
0 # Ирина 23.12.2015 10:50
Здравствуйте, Олег. Спасибо Вам за такую полезную статью. Все сделала вроде, как Вы написали, но база данных не приняла этот скрипт. 101 ошибку нашла. Я не сильна в базах данных и даже не знаю, что тут можно сделать. Не подскажете?
Ответить | Ответить с цитатой | Цитировать
Ogri
0 # Ogri 23.12.2015 15:29
Здравствуйте, Ирина. Напишите в личку и приаттачте файл со скриптом. Попробую разобраться.
Ответить | Ответить с цитатой | Цитировать
Ogri
0 # Ogri 24.12.2015 13:27
Ирина, ваш скрипт в порядке. Не сработал он, потому что, как видно на вашем скриншоте, в phpMyAdmin вы зашли в базу и даже открыли таблицу. В статье я упомянул, что импорт скрипта нужно запускать, не открывая никакой БД, но не подчеркнул, что это важное условие. Изнутри базы другая база недоступна, поэтому надо находиться на уровне сервера БД.

Исправляю свою оплошность. Спасибо за наводку.
Ответить | Ответить с цитатой | Цитировать
Ирина
0 # Ирина 24.12.2015 16:19
Спасибо, Олег. Но только я ничего не поняла, так как почти не знакома с базами и как нужно запускать импорт скрипта, не открывая никакой БД тоже не знаю. Вы не подскажете популярно, как это сделать?

Если это Вас не затруднит. Спасибо огромное в любом случае.
Ответить | Ответить с цитатой | Цитировать
Ogri
0 # Ogri 24.12.2015 16:58
Там вверху на вашем скриншоте путь к таблице, в которой вы находитесь: Сервер: localhost >> База данных: такая-то >> Таблица: такая-то. Для отработки скрипта вы должны находиться на самом первом уровне - уровне сервера, не входя в базы. Т.е. путь вверху должен показывать только Сервер: localhost. Когда вы открываете phpMyAdmin, вы по идее и попадаете на уровень сервера, на котором доступны все БД. Если вы открыли базу и даже таблицу в ней, вы можете кликнуть на Сервер: localhost и вернуться на тот самый уровень сервера. И там уже кликаете на Импорт и подставляете файл скрипта.
Ответить | Ответить с цитатой | Цитировать
Ирина
0 # Ирина 25.12.2015 03:28
Когда я вернулась на уровень сервера, как Вы посоветовали, то не увидела там никаких кнопок. Вообще, кнопку Импорт я могу увидеть только при раскрытой базе данных.

Ответить | Ответить с цитатой | Цитировать
Ogri
0 # Ogri 25.12.2015 12:35
Это странно. Может, у вас какой-то усеченный phpMyAdmin? Должно быть так:

Ну и у вас там всего одна база. А где та, из которой надо вытащить комментарии?
Ответить | Ответить с цитатой | Цитировать
Ирина
0 # Ирина 25.12.2015 13:26
Эта база (в которую я хочу перенести комментарии) находится на тестовом хостинге, в России. Может быть потому, что тестовый...А база, из которой я хочу взять комментарии) находится на другом хостинге, в Германии. Здесь у меня находится сайт на Joomla 1.5.14, хостер в приказном порядке велел обновлять сайт, в противном случае грозит его заблокировать. Начала его там обновлять - возникла масса проблем. Хостер в Германии ничем не помогает. Решила перебраться на российский хостинг, слышала много хороших отзывов, вот и решила перенести свой сайт и обновить версию Joomla. Пока получила хостинг на тестовый период, уже перенесла все статьи, категории, посетителей. Хотела перенести и комментарии, их у меня там много, ценный материал.
Ответить | Ответить с цитатой | Цитировать
Ogri
0 # Ogri 25.12.2015 13:40
Пришлите мне базу, из которой надо вытащить комментарии. Я сделаю миграцию и вышлю вам скрипт для обновления таблиц комментариев в новой базе.
Ответить | Ответить с цитатой | Цитировать
Ирина
0 # Ирина 25.12.2015 13:50
Я Вам ее уже высылала. Вместе со скриптом. Но могу еще раз выслать. Посмотрите в личке. И спасибо!!!
Ответить | Ответить с цитатой | Цитировать
Ogri
0 # Ogri 25.12.2015 13:55
Да, точно, пардон. Скоро будет.
Ответить | Ответить с цитатой | Цитировать
Ogri
0 # Ogri 25.12.2015 18:25
Выслал вам на мыло 2 файла: jcomments2.3.0.zip и jcomments3.0.5.zip. В соответствии с вашей версией JComments на сайте с Joomla 2.5, импортируйте подходящий. Для этого в phpMyAdmin войдите на уровень базы (второй после сервера), и надеюсь, что у вас там будет кнопка Импорт. Нажимаете, подставляете файл (прямо zip, phpMyAdmin умеет сам распаковывать. Если ваш не умеет, то распакуйте и подставьте .sql). Жмете кнопку Выполнить (или какая там в русском интерфейсе) - и ваши комментарии залиты.

Напишите, как прошло.
Ответить | Ответить с цитатой | Цитировать
Ирина
0 # Ирина 26.12.2015 03:22
Вы - маг и чародей, Олег! Все получилось с первого раза! Просто не знаю, как Вас благодарить! Спасибо огромное! :-)
Ответить | Ответить с цитатой | Цитировать
Ogri
0 # Ogri 26.12.2015 13:39
Был рад помочь, Ирина.
Ответить | Ответить с цитатой | Цитировать
Ирина
0 # Ирина 29.01.2016 15:36
Здравствуйте, Олег. Снова обращаюсь к Вам с этими комментариями. Свой сайт я сделала с Вашей помощью, похвасталась перед знакомой, она попросила помочь и ей с переносом комментариев на новый сайт. Метод, который Вы описали в статье, как-то у нас не срабатывает, но я, помятуя о своем предыдущем успехе, решила его повторить, чтобы отработать эту методику: создаю сайт на Joomla 3.4.5, устанавливаю на нем компонент комментариев, редактирую Ваш файлик, меняю в нем название базы данных и префиксы таблиц, и импортирую его в базу данных. Затем переношу какую-нибудь статью, в которой есть комментарии, но комментарии, благополучно появившись в админке сайта, под статьей так и не показываются. Не могли бы Вы рассказать, как правильно делать "вырезку" из базы данных с таблицами, содержащими комментарии, чтобы потом эту "вырезку" можно было перенести на другой сайт? Однажды это у меня прекрасно сработало, и сейчас срабатывает, но наполовину. Было бы просто чудесно.
Ответить | Ответить с цитатой | Цитировать
Ogri
0 # Ogri 31.01.2016 16:21
Ирина, приветствую вас. Возможно, у вас не появляются комментарии под статьей, потому что не совпадают идентификаторы в таблице статей [prefix]_content (поле id) и в таблице комментариев [prefix]_jcomments (поле object_id). Если вы переносите "какую-нибудь статью, в которой есть комментарии" без сохранения id - например, добавляете вручную, а идентификатор генерируется Джумлой - то комментарии, "благополучно появившись в админке сайта", к статье не привяжутся.

Может, в этом дело? Чтобы сохранить целостность базы данных со всеми связями, нужно переносить всё без изменения как идентификаторов таблиц, так и ссылающихся на них полей в других таблицах. Надеюсь, я популярно объясняю, если запутал вас - дайте знать.
Ответить | Ответить с цитатой | Цитировать
Ирина
0 # Ирина 01.02.2016 05:12
Здравствуйте, Олег. Да, я тоже пытаюсь разобраться в этих несоответствиях, и вот, что выяснила: идентификаторы статей не совпалают, НО в новой базе данных есть и старые идентификаторы и новые, а в старой базе только один идентификатор. Например: статья в старой базе данных имеет идентификатор 77, а при переносе в новую базу данных она получила в дополнении к своему идентификатору 77 еще один, номер 26, скриншот прикрепляю. Попытка вручную изменить идентификатор 77 на 26 ни к чему не приводит, так как такой уже есть. И что сделать теперь - не соображу.

Ответить | Ответить с цитатой | Цитировать
Ирина
0 # Ирина 01.02.2016 05:38
Олег, я разобралась. Открыла таблицу jcommets в новой базе, в ней были идентификаторы старых статей, поменяла эти идентификаторы на новые, и комментарии сразу "прицепились" к нужной статье. Правда, муторно все это делать, долго, но зато наверняка. :-)
Ответить | Ответить с цитатой | Цитировать
SergioG
+1 # SergioG 13.02.2016 10:24
Столкнулся с проблемой при переносе комментарием jcomments с джумлы 1.5 на 3.4. Проблема в том, что в старой версии отсутствует столбец – thread_id, из-за чего при древовидных комментариях не работает кнопка ответить и не ставятся оценка комментариев. Решается проблема добавлением столбца thread_id в таблицу f01uc_jcomments (у вас может быть префикс - f01uc_ по-другому). Вот такой запрос нужно ввести в базе данных, чтобы создать столбец:
ALTER TABLE f01uc_jcomments ADD COLUMN thread_id INT UNSIGNED NOT NULL AFTER parent;

Может кому пригодится. А то я искал и не мог найти решение. ;-)
Ответить | Ответить с цитатой | Цитировать

Добавить комментарий