воскресенье, 8 ноября 2015 г.

Joomla: Сливаем два сайта в один при помощи компонента J2XML



Joomla: Сливаем два сайта в один при помощи компонента J2XML
Upd: English version of the article: Joomla: Merge two sites into one using component J2XML.

Не так давно я имел помимо данного сайта еще один. По некоторым причинам решил присоединить второй сайт к этому в качестве отдельного раздела. При этом тот другой сайт появился даже раньше этого и имел несколько сотен статей, разделенных на полтора десятка категорий, а также полсотни зарегистрированных пользователей. На этом сайте к тому времени информации было не меньше. Задача: перенести наполнение сайта на другой так, чтобы создать объединенную структуру.
Нашелся отличный компонент J2XML, заточенный именно под подобную задачу. Он бесплатный, имеет гибкие настройки. Экспортирует связанную структуру материалов, категорий и пользователей с сайта-донора и интегрирует ее в структуру сайта-акцептора. До комплекта переносит еще и картинки в статьях, а также ссылки (WebLinks). Перенос, как следует из названия, осуществляется через XML-файлы. Детальному рассмотрению настроек и функционала компонента J2XML и посвящена эта статья.
Первым долгом по традиции напомню о необходимости резервного копирования файлов и базы данных сайта перед любыми изменениями, порекомендую сохранять промежуточные результаты и проделывать все вначале на локальном веб-сервере.
А теперь - погнали!
Скачайте с офсайта последнюю версию пакета J2XML (на момент написания - 3.1.rc2), соответствующую вашей версии CMS. Оба моих сайта работали под Joomla 2.5, именно этот вариант рассмотрен здесь. Отмечу лишь, что перед процессом я синхронизировал версии сборок - на обоих сайтах обновился до последних (на момент написания - 2.5.16).
Давайте заодно договоримся о терминологии. Сайт, информация с которого экспортируется, я буду называть сайт-источник, а тот, на который импортируется - сайт-приемник. А то донор и акцептор - слишком по-иностранному выходит )).

I. Экспорт с сайта-источника

Входим в админку сайта-источника. Там проделываем следующее.
  1. Устанавливаем пакет (package) стандартным образом через Менеджер расширений ->Установка. Если зайти теперь на вкладку Управление - видим аж пять расширений: инсталлятор пакета, компонент и еще 3 - библиотека, плагин J2XML Export/Send buttons и интерфейс командной строки J2XML CLI.
    j2xml-ru-01-package-before-update
    Последний из трех нам не пригодится, а вот остальные два можно обновить, если на офсайте есть более новые версии. После этого публикуем плагин J2XML Export/Send buttons.
    02-package-after-update
  2. Идем в сам компонент, открываем Настройки и выставляем подходящие для наших целей. Интерфейс - только английский, но там в плане языка все достаточно просто и ясно.
    На сайте-источнике из настроек нас интересует только первая вкладка:
    • Export. На ней имеются следующие опции:
      j2xml-ru-03-options-export
      • Images - переносить ли картинки к статьям. Если оставить 'Да', то изображения будут включены в xml-файл в закодированном виде и раскодируются на сайте-приемнике в соответствующие папки. В том случае, если папки там отсутствуют, они будут созданы. Возможный минус здесь - размер полученного файла. Если много больших имиджей - даже компрессия не поможет. У меня было немного, поэтому я оставил эту опцию активной. В обратном случае лучше постепенно перенести картинки вручную.
      • Users - соглашаюсь. В этом случае в файл будут добавлены учетные записи пользователей, но не всех, а лишь авторов статей, выбираемых для переноса. Подробнее - в описании опции Keep author вкладки Content на сайте-приемнике.
      • Compress - сжимать ли файл. Имеет смысл при большом количестве информации.
  3. Жмем Сохранить и закрыть, а следом - Article Manager. В меню Менеджера материалов появилась кнопка Export.
  4. В выпадающем меню Кол-во строк под списком материалов выбираем 'Все'. Ставим галки на нужные статьи, или выбираем все и снимаем галки с ненужных. Жмем Export. Генерируется и скачивается файл. Содержит он выбранные материалы со всеми установками, аккаунты пользователей-авторов, а также категории, но тоже не все, а только соответствующие экспортируемым материалам.
  5. Если есть желание или необходимость перенести дополнительные категории и/или пользователей, заходите в Менеджер категорий и Менеджер пользователей (в них также имеется кнопка Export) и экспортируйте нужные. Для импорта пользователей предусмотрены отдельные настройки, выставляемые впоследствии на сайте-приемнике. Также, если вы используете компонент Ссылки (Weblinks), имейте в виду, что J2XML позволяет переносить и их - кнопка Export присутствует и в интерфейсе Менеджера ссылок.

II. Импорт на сайт-приемник

Переходим на сайт-приемник. В его админке проделываем следующие действия.
  1. Установка пакета и вход в Настройки - как на сайте-источнике. Настраиваем опции для импорта.
    • Вкладка Export нас здесь, понятно, не интересует. Посмотрим настройки на остальных.
    • Вкладка Import:
      j2xml-ru-04-options-import
      Здесь все достаточно прозрачно. Импортировать ли изображения, категории, пользователей и ссылки. Какие выбирать значения параметров - решается по результатам анализа содержимого обоих сайтов. Также эти значения должны сочетаться с некоторыми параметрами из следующей вкладки. Рассмотрим ее подробно.
    • Вкладка Content содержит следующие опции:
      j2xml-ru-05-options-content
      • Keep Ids - очень важный параметр. Если на сайте-приемнике, как в моем случае, есть свой контент, то лучше оставить 'Нет'. В этом случае идентификаторы импортируемых элементов добавляются к существующим по принципу автоинкремента. В этом случае параметры вкладки Import игнорируются, кроме тех, которым вы присвоили значение 'Нет' - тогда соответствующие группы просто не импортируются. Перезапись существующего наполнения новым происходит только если сохранять Ids.
        Моя задача - как раз добавить новые элементы, сохранив существующие. Именно поэтому я оставил значения опций на вкладке Import дефолтными, равно как иKeep Ids - 'Нет'.
      • Access Level. Зависит от вашего желания. Можно сбросить уровень доступа для всех добавляемых материалов на какой-нибудь один, а можно оставить оригинальный. Меня устроил второй вариант.
      • State - состояние: опубликован или нет. Здесь та же логика. Сохраняю исходное значение.
      • Keep author - если 'Да', сохраняет авторов статей, даты последнего изменения и количество изменений. Заодно, если на сайте-источнике на вкладке Export было выбрано Users, здесь будут добавлены учетки пользователей - авторов статей. Будут ли заменены аккаунты пользователей с такими же идентификаторами - зависит от выбора Keep Ids выше, а также от значения параметра Users на вкладкеImport. Интересно здесь, что email пользователя алгоритм тоже считает идентификатором.
        Значение и этой опции оставляю по умолчанию - 'Да'.
      • Keep category - 'Да'. В этом случае категории, соответствующие статьям, автоматически будут добавлены в список категорий. И снова - перезаписывать ли существующие, если такие будут найдены, зависит от значений Keep Ids и параметра Categories предыдущей вкладки.
      • Category - используется только если Keep category установлено в 'Force to'. Всем статьям, соответственно, присваивается выбранная категория.
      • Оставшиеся четыре параметра не требуют детального объяснения - сохранять ли атрибуты, метаданные и рейтинг, а также избранные статьи.
    • Следующая вкладка - Users.
      j2xml-ru-06-options-users
      Пригодится только если экспортировались пользовательские аккаунты из Менеджера пользователей сайта-источника отдельным файлом. Здесь всего два параметра, которые можно сохранить по умолчанию:
      • Keep Ids - 'Нет', как и для контента.
      • Keep attribs - имеет смысл сохранить атрибуты добавляемых пользователей, если нет особых соображений в пользу противоположного выбора.
    • Наконец, последняя вкладка Advanced
      j2xml-ru-07-options-advanced
      может быть смело проигнорирована. Debug - отключен, Remote folder в описываемом методе не используется.
    Итак, как видите, значения всех параметров устроили меня по умолчанию. Случаи, когда было бы целесообразно их поменять, я попытался упомянуть выше.
  2. Теперь остался сам импорт. Жмем Choose File, выбираем файл с материалами и кликаем Open, а следом - кнопку Import. Дожидаемся конца процедуры и получаем лог ее выполнения. Если настройки соответствовали задумке, результат должен быть успешным.
  3. Если отдельно был выполнен экспорт несвязанных со статьями пользователей, категорий и ссылок - повторяем предыдущий шаг для соответствующих файлов.
Что можно отметить в заключение? Работает компонент отлично - шустро и без глюков. Если бы он еще и меню переносил - было бы совсем хорошо. Также нет возможности синхронизировать сторонние расширения, связанные с идентификаторами переносимых элементов. Например, пользователи на сайте-приемнике получили новые IDs, и комментарии зарегистрированных пользователей в JComments мне лично пришлось привязывать к ним вручную. Благо дело, их было немного - 30 с небольшим, а если их сотни? Пришлось бы искать, а то и писать скрипт переноса. Почему бы разработчикам не сделать этого, ведь JComments - наше всё?! Да и скрипт такой не представляется сложным.
Но это так, перфекционизм. А если без него, то спасибо разрабам J2XML - бесплатного, полезного, быстрого и надежного компонента для переноса наполнения с одного сайта на другой и грамотного интегрирования этого нового контента в имеющуюся структуру.
11111

Комментарии  

olexsandr
0# olexsandr 22.08.2014 01:30
Спасибо за статью. Очень помогла.
Ответить | Ответить с цитатой | Цитировать
worldmen
0# worldmen 27.04.2015 08:58
сделал у себя локально экспорт. Получилось несколько файлов j2xml1250020150427152930.xml - такого типа. Попробовал загрузить на локальную чистую Jomla 3.4? пишет
Ошибка
File format unknown. Impossible to import file.
Ответить | Ответить с цитатой | Цитировать
Ogri
0# Ogri 02.05.2015 20:40
К сожалению, ничем не могу помочь. В свое время J2XML решил мою проблему, о чем и статья. Это была Joomla 2.5. Как ведет себя компонент на третьей Джумле - не знаю, сам на нее только недавно перешел. Не было нужды его использовать. Поэтому могу только порекомендовать погуглить. Извините.
Ответить | Ответить с цитатой | Цитировать
worldmen
0# worldmen 03.05.2015 01:48
начало получаться экспортировать, когда выделял не по 50 шт материала, а по 10. Видимо это связано с объемом файла.
Ответить | Ответить с цитатой | Цитировать
Ogri
0# Ogri 10.05.2015 18:09
Спасибо за информацию. Пригодится в случае возникновения подобной проблемы.
Ответить | Ответить с цитатой | Цитировать
Богдан
0# Богдан 15.10.2015 05:13
Скажите, пожалуйста, можна ли в Joomla импортировать XML файлы, созданные на сайтах с другими CMS?. Спасибо!
Ответить | Ответить с цитатой | Цитировать
Ogri
0# Ogri 16.10.2015 11:58
Наверное, можно. Но для этого надо написать соответствующий компонент или просто код конвертации. Возможно, таковые уже написаны. Погуглите.

0 коммент.:

Отправить комментарий