Перенести контент с одного сайта Joomla на другой при помощи phpmyadmin.

Перенос материалов с одного сайта на другойЗдравствуйте, уважаемые читатели. У меня на днях появилась не совсем тривиальная задача: перенести весь материал с joomla версии 3.1.5 на joomla версии 2.5.14. Т.е. адрес сайта останется прежний, просто сменится движок. Не спрашивайте меня, зачем это нужно было. Процедура переноса данных с одного сайта на другой может понадобиться в случае, если на сайте установлено много всякого мусора, движок начал глючить, стали появляться непонятные ошибки (возможно связанные с конфликтами разных расширений), которые вы не знаете как исправить.

В этом случае иногда проще переустановить движок с нуля и затем восстановить на нем все материалы, установить шаблон, установить необходимые компоненты и пр. Возник вопрос как это реализовать, т.е как перенести весь контент. Начал гуглить, но в интернете мало чего нашел полезного, только некоторые разобщенные советы на разных форумах. А нормальной статьи так и не нашел. В итоге весь материал я все-таки перенес и теперь хочу поделиться с вами как это сделал я. Может кому и пригодится. Задача стояла не просто перенести весь материал с одного сайта на другой, а что-бы адреса всех страничек (а их на сайте было более 700 штук) сохранились. Это важно, т.к. в противном случае пользователи, перешедшие на новый сайт с поисковых систем будут попадать на страницу 404. Поисковые системы также негативно отнесутся к тому, что адреса всех проиндексированных ими страниц вдруг стали недействительными и траст вашего сайта упадет ниже плинтуса. Конечно для таких случаев можно настроить редирект для каждой страницы со старого адреса на новый адрес. Но писать для более чем семисот страниц редиректы очень занудно. Буду рад, если предложите свой способ решения данной задачи. А пока я для себя решил, что самым простым будет перенос необходимых таблиц из базы исходного сайта в базу нового сайта.

Для этих целей я на денвере установил движок сайта на который я собирался скопировать все материалы. Важно: при установке нового сайта выберите префикс таблиц базы данных такой-же как у исходного сайта. Префикс можно посмотреть в админке сайта, если перейти по меню "Сайт" => "Общие настройки" => вкладка "Сервер" => раздел "Настроки базы данных". Также на денвере я восстановил исходный сайт из резервной копии, с которого я буду переносить контент. Что такое Денвер (Denwer), для чего он нужен и как его установить на локальный компьютер я описал здесь. Как установить Joomla на Денвер я писал тут.

Для переноса текстов нужно переносить не всю базу, а только некоторую ее часть. А для переноса картинок нужно будет просто скопировать папку images, которая расположена в корне сайта.

Как вы наверное уже знаете, если на сайте настроен ЧПУ (человеко понятный урл), то адрес страницы со статьей на сайте Joomla выглядит примерно так:

http://buildsiteblog.ru/seo-optimizatsiya-sajta/10-xmap-sozdaem-kartu-sajta-dlya-joomla

где seo-optimizatsiya-sajta - это адрес (алиас) категории, к которой принадлежит статья, а

10-xmap-sozdaem-kartu-sajta-dlya-joomla - это адрес (алиас) самой статьи в данной категории.

Число десять это id (типа порядкового номера) статьи, который генерирует и присваивает статье сам движок при создании новой статьи. На новом сайте можно создать такие же категории с аналогичными адресами (алиасами). Но вот со статьями такой способ не прокатит. Даже если вы создадите материал на новом сайте с таким же алиасом, то движок присвоим ему id, отличный от того, что был на исходном сайте. А замена id статьи в админке сайта не предусмотрена. Наверное в этом случае можно попробовать поменять id статьи напрямую в базе данных (я сам не пробовал, отпишитесь в комментариях, если кто-то делал такое). А если у вас несколько сотен статей, то руками менять id каждой статьи тоже очень долго.

База данных состоит из таблиц, в которых хранятся всякие данные, в том числе и тексты наших статей. Этим и отличается динамический сайт от статического. В статическом сайте весь текст расположен в html файлах, при обращении к которым браузер отображает все содержимое файла. На динамическом сайте тексты наших с вами статей находятся в базе данных и динамически отображаются в браузере при запросе браузером какой либо странички сайта. Сайты, построенные на движках Joomla и WordPress являются типичными представителями динамических сайтов.

Экспорт контента сайта из базы данных при помощи phpmyadmin.

Для копирования данных из базы данных нам нужно запустить утилиту phpMyAdmin. Но перед этим убедитесь, что Денвер у вас запущен. Запустить phpMyAdmin можно разными способами. Если вы помните адрес, можно набрать в адресной строке браузера адрес http://localhost/Tools/phpMyAdmin. Я обычно адрес не помню, т.к. этой утилитой пользуюсь очень редко. Я в адресной строке браузера набиваю http://localhost. Откроется страничка с названием "Ура, заработало!" (она появится только при установленном и запущенном Денвере). Прокручиваем ее вниз примерно до середины и запускаем phpMyAdmin вот по этой ссылке:

Откроется веб интерфейс утилиты phpMyAdmin:

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

В выбранной нами базе перечислен список таблиц:

Статьи хранятся непосредственно в таблице t8oaf_content, где t8oaf - это префикс базы данных, на него не обращаете внимание. У вас префикс скорее всего другой. Далее я таблицы в тексте буду указывать без префиксов. Будем копировать данную таблицу. Чтобы не создавать руками, я скопировал еще эти таблицы:

_categories, в которой хранятся категории;

_menu_types, в которой хранятся меню;

_menu, в которой хранятся пункты наших меню.

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

Отмечаем нужные нам таблицы (кроме таблицы _categories) галочками и нажимаем внизу на выпадающем меню "С отмеченными"=> "Экспорт".

В окне "Экспорт таблиц из базы данных "testjoomla4" - нажимаем кнопку ОК и указываем путь для сохранения файла с таблицами:

Если зайти в таблицу _categories, то в ней, кроме созданных нами категорий присутствуют еще системные категории. Поэтому всю таблицу _categories мы копировать не будем, а скопируем только созданные вами категории:

Для этого заходим в таблицу _categories, отмечаем галочками строки с нужными нам категориями. Можете отметить все строки, у которых в столбце extension стоит значение com_content; Далее внизу под таблицей нажимаете кнопку "С отмеченными" => Export, затем в следующем окне нажимаете OK и сохраняете таблицу в файл.

Вот мы и сохранили нужные нам данные в двух файлах.

Импорт экспортированных материалов на другой сайт.

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

_content, _menu_types, _menu и выбираем очистить как показано на рисунке ниже.

Это нужно сделать для успешного импорта, иначе phpmyadmin мржет выдать ошибку при импорте, если обнаружит поля таблицы с такими же id. Перезаписывать он их почему-то не хочет.

Далее для импорта:

1. нажимаете на кнопку ИМПОРТ в верхнем меню;

2. Поочередно импортируете два сохраненных на предыдущих этапах файла с нашими таблицами.

На этом работа с базой данных завершена.

Далее копируете папку images с картинками со старого сайта на новый.

Теперь заходим в панель администратора сайта и видим все наши перенесенные материалы, категории и меню.

Ну а теперь на новом сайте устанавливаете шаблон, включаете ЧПУ, создаете модули с меню и устанавливаете их на свои места, устанавливаете все необходимые вам расширения и пр.

Вы можете помочь проекту, рассказав о нем в социальных сетях:

 

Спасибо!

You have no rights to post comments

Комментарии  

# Андрей 03.01.2015 13:09
Суппер!!!!
# sugonjakas 15.01.2015 19:44
Аттличная статья!!!
# Алексей 08.02.2015 06:03
Блин не получается!!! пробовал с 2.5 на 3.3 перенести че то не как, почему?
# Алексей 08.02.2015 07:02
я так понимаю, дополнительно надо каким то образом изменить префикс в таблицы :cry:
# SiteAdmin 08.02.2015 10:38
Все верно. Важно, чтобы префиксы совпадали. Заменить префикс можно при помощи phpmyadmin. Выделяем все таблицы нашей базы данных. Далее выбираем из выпадающего списка "С отмеченными" -> "Заменить префикс таблицы". В поле "ОТ" указываем наш старый префикс, в поле "ДО" указываем новый.
# Андрей 08.02.2015 10:44
Не могу перенести зарегистрированных пользователей с одного сайта на джумле 2.5 на другой с джумлой 3.0
# SiteAdmin 08.02.2015 10:55
Это из за того, что у вас таблица users на новом сайте не пустая. Там имеется как минимум учетка админа сайта. Вы посмотрите на какую строку ругается при импорте и просто эту строку не экспортируйте.
# Андрей 08.02.2015 11:03
Цитирую SiteAdmin:
Это из за того, что у вас таблица users на новом сайте не пустая. Там имеется как минимум учетка админа сайта. Вы посмотрите на какую строку ругается при импорте и просто эту строку не экспортируйте.

Там не только строка с админкой, но и разные столбцы в таблицах у 2,5 и 3 Joomla. А Вы можно статейку на эту тему написать?
# SiteAdmin 08.02.2015 11:11
Да, все верно. Я что-то сразу не обратил внимание, что вы переносите с joomla 2.5 на 3.x. Там действительно столбцы отличаются. Я на одном сайте сделал следующее. Сначала обновил джумлу 2.5 до трешки, чтобы структура таблиц была одинакова. А затем уже переносил все таблицы с этого сайта на новый.
Вот здесь я написал про обновление с джумлы 2.5 до 3.x:
http://buildsiteblog.ru/cms-for-site/36-obnovlenie-joomla-2-5-do-3-x-instruktsiya-po-ruchnomu-obnovleniyu
# Андрей 08.02.2015 11:17
ОК! Буду читать и пробовать.
# Татьяна 20.03.2015 11:20
Переносила контент с джумлы 2.5 на 2.5 по вашим рекомендациям. Пришлось всё делать на хостинге он-лайн (причина теперь неважна). Но при импорте постоянно выпадала ошибка #1062. Оказалось, что причина в "Быстром" экспорте. Нужно экспорт назначить обычный и в поле "Параметры создания объектов" поставить ещё флажок "Добавить выражение DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT". И тогда всё как в сказке (ну или в песне) хорошо кончается. За ваш сайт спасибо и за статьи.
# Анатолий 20.07.2015 01:56
Пробовал переносить с 2.5 на 3 джомлу контент и категории к2...сайт потом падает и возникает циклический редирект..(
# Александр 22.11.2015 17:31
Спасибо, буду пробовать:)
# Денис Ахметшин 13.06.2016 13:14
Я использовал SP Transfer, очень удобно, только стоит дорого. Можно его найти на складчинах.
# Алексей 08.01.2017 12:34
Молодец, неплохая статья. Переносил ты видимо версию 3.1.5, она как раз была дико кривая, и самое смешное, что она потом до 3.2.6 не хотела обновляться))))
Сейчас стоит задача наоборот, из 2.5 в 3.5. В принципе, насколько я понимаю, всё тоже самое. Еще почитаю в интернете.
# Мишка 24.05.2017 09:38
а как же связи таблицы контент? например с таблицей assets? не будет проблем?
# SiteAdmin 31.05.2017 09:23
Проблем с этим не наблюдал.
# Ирина 16.06.2017 21:19
Только что перенесли категории (порядка 30 штук) с одного сайта на другой. Спасибо за сэкономленное время! Сейчас таким же образом будем переносить материалы. Отличная статья!
# Алексей 24.06.2017 09:51
Проблема после переноса, не стали сохраняться категории и материалы, пишет Сохранить не удалось из-за ошибки: Invalid Parent ID. Как можно решить эту проблему.
# SiteAdmin 24.06.2017 11:57
Попробуйте в админке открыть и пересохранить каждую категорию.
# Алексей 24.06.2017 14:27
Это всё перепробовал что нашёл в интернете, не помогает. Также пишет ошибку.
# Сергей 02.11.2017 20:16
Спасибо. Сколько искал - не видел нормального решения. Ваш способ подошел идеально.
# Вадим 06.12.2017 13:39
спасибо, помогло. Перенес контент одного сайта joomla на другой
# Алексей 08.12.2017 17:54
Перенесенные таким образом статьи, нельзя редактировать в будущем, потому что меняется id автора, а его так просто не изменишь, так как сильная взаимосвязь со всем движком. Кто что в этом случае посоветует?