You are here

Миграция от Serendipity към Drupal

Имам блог от преди 7 години и няколко дена. Отначало беше на WordPress, после ужасен от грозния и надупчен като швейцарско сирене код минах на симпатичния Serendipity. Сега е третата миграция към Drupal, който ще използвам за много по-сложни от блог неща. Старите URL-и работят. Не знам дали си струва усилието и замърсяването на пространството на URL-и. Коментарите и категориите също са прехвърлени, като дървовидната им структура е запазена. Ето скриптът, който използвах, като странното форматиране на array е заради Emacs:

<?php

function strip_q($s) {
  return str_replace(array('\"'), array('"'), $s);
}

$_SERVER['HTTP_HOST'] = 'fire.tower.3.bg';
$_SERVER['SCRIPT_NAME'] = '/s9y.php';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';

define('DRUPAL_ROOT', getcwd());

require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

$user = user_load(1); // for node_object_prepare()



$conn = new PDO('pgsql:host=localhost;dbname=s9y','s9y','s9y');



$categoryid__tid = array();
foreach ($conn->query('SELECT * FROM serendipity_category ORDER BY categoryid') as $row) {

  $term = new StdClass;
  $term->vid = 1;
  $term->name = $row['category_name'];
  $term->description = $row['category_description'];
  if (!empty($category__term[$row['parentid']])) {
    $term->parent = array($categoryid__tid[$row['parentid']]);
  }
  taxonomy_term_save($term);
  $categoryid__tid[$row['categoryid']] = $term->tid;

}



$entryid__tids = array();
foreach ($conn->query('SELECT * FROM serendipity_entrycat') as $row) {
  if (!empty($categoryid__tid[$row['categoryid']])) {
    $entryid__tids[$row['entryid']][] = $categoryid__tid[$row['categoryid']];
  }
}



$entryid__alias = array();
foreach ($conn->query('SELECT * FROM serendipity_permalinks WHERE type=\'entry\'') as $row) {
  $entryid__alias[$row['entry_id']] = $row['permalink'];
}



$entryid__nid = array();
foreach ($conn->query('SELECT * FROM serendipity_entries ORDER BY timestamp') as $row) {

  $node = new StdClass;
  $node->type = 'article';
  $node->language = 'bg';
  node_object_prepare($node);
  $node->created = $row['timestamp']; // back to original publishing date

  $node->title = strip_q($row['title']);
  $node->body[LANGUAGE_NONE][] =
    array('value' => strip_q($row['body']),
	  'summary' => text_summary(strip_q($row['body'])),
	  'format' => 'full_html');
  foreach ($entryid__tids[$row['id']] as $tid) {
    $node->field_tags[LANGUAGE_NONE][]['tid'] = $tid;
  }

  $node->path = array('alias' => $entryid__alias[$row['id']]);

  var_dump($node);
  node_save($node);
  $entryid__nid[$row['id']] = $node->nid;

}



$commentid__cid = array();
foreach ($conn->query('SELECT * FROM serendipity_comments ORDER BY id') as $row) {

  $_SERVER['REMOTE_ADDR'] = $row['ip'];

  $comment = new StdClass;
  $comment->nid = $entryid__nid[$row['entry_id']];
  $comment->mail = $row['email'];
  $comment->homepage = $row['url'];
  $comment->name = $row['author'];
  $comment->status = COMMENT_PUBLISHED;
  $comment->created = $row['timestamp'];
  $comment->subject = !empty($row['title']) ? strip_q($row['title']) : '(без заглавие)';
  $comment->comment_body[LANGUAGE_NONE][] =
    array('value' => strip_q($row['body']),
	  'format' => 'filtered_html');
  $comment->language = 'bg';
  $comment->uid = drupal_anonymous_user()->uid;
  $comment->pid = $commentid__cid[$row['parent_id']];
  var_dump($comment);
  comment_save($comment);
  $commentid__cid[$row['id']] = $comment->cid;

}

Tags: 

User login