Перенос базы статей 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.