Здравствуйте, уважаемые читатели. У меня на днях появилась не совсем тривиальная задача: перенести весь материал с 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, отмечаем галочками строки с нужными нам категориями. Можете отметить все строки, у которых в столбце extension стоит значение com_content; Далее внизу под таблицей нажимаете кнопку "С отмеченными" => Export, затем в следующем окне нажимаете OK и сохраняете таблицу в файл. Вот мы и сохранили нужные нам данные в двух файлах.
Импорт экспортированных материалов на другой сайт.
Теперь открываем базу данных нового установленного сайта, в которую будем копировать наши таблицы. Отмечаем галочками три таблицы:
_content, _menu_types, _menu и выбираем очистить.
Это нужно сделать для успешного импорта, иначе phpmyadmin мржет выдать ошибку при импорте, если обнаружит поля таблицы с такими же id.
Перезаписывать он их почему-то не хочет.
Далее для импорта:
1. нажимаете на кнопку ИМПОРТ в верхнем меню;
2. Поочередно импортируете два сохраненных на предыдущих этапах файла с нашими таблицами.
На этом работа с базой данных завершена. Далее копируете папку images с картинками со старого сайта на новый. Теперь заходим в панель администратора сайта и видим все наши перенесенные материалы, категории и меню.
Ну а теперь на новом сайте устанавливаете шаблон, включаете ЧПУ, создаете модули с меню и устанавливаете их на свои места, устанавливаете все необходимые вам расширения и пр.