На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Перенос базы статей 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».

Вот так несложно можно перенести данные по записям в базе данных из мод икс в вордпресс. Для других кмс все происходит немного не так, но все равно несложно. Если же вам что-то непонятно, то вы всегда можете обратиться за разъяснениями ко мне. Либо я перенесу все сам – за умеренную плату. Пишите.




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





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




Диплом: сайт визитка и не только
Как позвонить с чужого номера


© upread.ru 2013-2019
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.