Перенос базы статей c ModX на WP


Переезды, переезды. Нередко мне приходится заниматься переездом сайта на другую CMS. Помимо внешней, очевидной для всех работы – интеграции верстки в новый шаблон (создание нового шаблона для кмс) приходится заниматься не столь очевидной – это переносом базы.



На старых сайтах число записей может достигать несколько тысяч и переносить их вручную – та еще работа. Поэтому, как говорилось в одном известном мультике, мы лучше день потеряем на написание скрипта синхронизации (точнее, переноса базы), а потом за минуту сделаем, чем будем несколько дней заниматься копипастом. Тем более, это еще и интересно. Хотя и несложно.

Итак, есть у нас CMS ModX, надо перенести нашу базу (заполнить таблицу) для WP (вордпресс). Все происходит на одном сервере, что несколько упрощает дело. Итак, начинаем скрипт как обычно, подключаемся:

mb_internal_encoding("UTF-8");
$conn = new mysqli("localhost", "имя", "пароль", "база");
$conn->set_charset("utf8");
Здесь я использую подключение mysqli (кому интересно может подробнее почитать здесь), а также сразу устанавливаю кодировку.

Материалы страниц мод икс хранятся в таблице modx_site_content. Выбрать все их мы можем таким циклом:

$result = $conn->query("SELECT * FROM `modx_site_content` WHERE `parent` = '44' AND `published` = '1' AND `deleted` = '0' AND `pub_date` > '0' ORDER BY  `modx_site_content`.`id` DESC");
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
echo $row['pagetitle']."<br />";
}
$conn->close();
Обратите внимание, что здесь мы выводим только записи с определенной родительской категорией (у меня её номер 44, у вас может быть другим, смотрите в адмике мод икс), опубликованные, не удаленные, а также с датой изменения больше нуля.

С датой надо разбираться отдельно. В мод икс она хранится в формате числа секунд с 70-го года, а в вордпресс – в более привычном нам представлении. Конвертируем такой функцией:

date('Y-m-d h:i:s', $row['pub_date']);
Однако, нам надо не выводить данные, а запоминать их ,чтобы затем вставлять. Сделаем это массивом:

$i=0;
$result = $conn->query("SELECT * FROM `modx_site_content` WHERE `parent` = '44' AND `published` = '1' AND `deleted` = '0' AND `pub_date` > '0' ORDER BY  `modx_site_content`.`id` DESC");
while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
$i++;	
$dat[$i] = date('Y-m-d h:i:s', $row['pub_date']);
$content[$i] = $row['content'];
$pagetitle[$i] = $row['pagetitle'];
$introtext[$i] = $row['introtext'];
$alias[$i] = $row['alias'];
}
Значения, думаю, понятны – дата, текст записи (контент), заголовок, цитата и чпу (алиас). Теперь другим циклом вставляем в вордперсс:

for ($j=0; $j<$i; $j++) {
$conn->query("INSERT INTO `ver_posts` (`ID`, `post_author`, `post_date`, `post_date_gmt`, `post_content`, `post_title`, `post_excerpt`, `post_status`, `comment_status`, `ping_status`, `post_password`, `post_name`, `to_ping`, `pinged`, `post_modified`, `post_modified_gmt`, `post_content_filtered`, `post_parent`, `guid`, `menu_order`, `post_type`, `post_mime_type`, `comment_count`) VALUES (NULL, '1', '".$dat[$j]."', '0000-00-00 00:00:00', '".$content[$j]."', '".$pagetitle[$j]."', '".$introtext[$j]."', 'publish', 'open', 'open', '', '".$alias[$j]."', '', '', '0000-00-00 00:00:00', '0000-00-00 00:00:00', '', '0', '', '0', 'post', '', '0');");
}
Стоит отметить, что это – общая схема работы переноса, могут быть и дополнения. Например, если вам требуется сразу же отнести записи к определенной категории, то необходимо еще выполнить такие операции:

$id = $conn->insert_id;
$conn->query("INSERT INTO  `ver_term_relationships` (`object_id` ,`term_taxonomy_id` ,`term_order`)VALUES ('".$id."',  '10',  '0');");
В первой строке мы определяем id записи, которую только что вставили для mysqli, а во второй в таблицу вставляем категорию – у нас она под номером десять. Также, если нам требуется сразу же перенести изображение записи, то его сначала надо извлечь из таблицы «modx_site_tmplvar_contentvalues», поле «value».

Вот так несложно можно перенести данные по записям в базе данных из мод икс в вордпресс. Для других кмс все происходит немного не так, но все равно несложно. Если же вам что-то непонятно, то вы всегда можете обратиться за разъяснениями ко мне. Либо я перенесу все сам – за умеренную плату. Пишите.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, wordpress, modx, sql, php




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




BrowseForFolder и MTP-устройства
Урок 15. Базовые операции со строками C#
Месть и смысл жизни