Template for MT entry and comment export and Drupal import
Last modified: January 12, 2006 - 02:13
Note: this script was originally written to migrate to Drupal 4.4. It is left for reference.
- To do:
-
- Automatically create accounts
- Export MT categories and import to Drupal taxonomy
- Limitations:
-
- All comments are from the Anonymous user
- All comments are unthreaded
- The comment subject is made from the first five words of the comment
- The import defaults to using
uid
1, i.e. the site admin (change the$uidvariable to import to another user) - All posts are promoted to the front page
- All comments have a published status
- MT categories (Drupal taxonomy terms) are not exported
- Instructions:
-
- Create a new Movable Type Index template called
Drupal Import
withimport.php
specified as the Output File - Cut and paste the following into the
Template body
textarea - Set the variables below the
//set variable defaults
comment to the correct values - Save and rebuild the template
- Load
import.php
in your web browser
If the import is successful, the output will be a single sentence listing the number of entries and comments imported.
<html>
<head>
<title>Export</title>
</head>
<body>
<?php
//set variable defaults
$hostname = "";
$username = "";
$password = "";
$db = "";
$uid = 1;
// get next node number from sequences table
$link = mysql_connect($hostname,$username,$password) or die("Could not connect to server");
mysql_select_db($db) or die("Could not select database ".$db);
$result = mysql_query("SELECT nid FROM node");
$node_rows = mysql_num_rows($result)+1;
<MTEntries lastn="1000" sort_order="ascend">
$node_title = <<<NT
<$MTEntryTitle$>
NT;
$node_title = mysql_escape_string($node_title);
$node_teaser = <<<NE
<$MTEntryBody$>
NE;
$node_teaser = mysql_escape_string($node_teaser);
$node_body = <<<NB
<$MTEntryBody$><$MTEntryMore$>
NB;
$node_body = mysql_escape_string($node_body);
//get post status
$status = strtolower("<$MTEntryStatus$>");
if ($status == "publish")
{
$node_status = 1;
}
else
{
$node_status = 0;
}
$node_insert_query = "INSERT INTO node (type, title, uid, status, comment, promote, users, revisions, created, changed, teaser, body) VALUES ('blog', '$node_title', $uid, $node_status, 2, 1, '', '', UNIX_TIMESTAMP('<$MTEntryDate format="%Y-%m-%d %H:%M:%S"$><$MTBlogTimezone$>'), UNIX_TIMESTAMP('<$MTEntryDate format="%Y-%m-%d %H:%M:%S"$><$MTBlogTimezone$>'), '$node_teaser', '$node_body');";
<MTComments sort_order="ascend">
$comment_text = <<<CT
<$MTCommentBody$>
CT;
$comment_text = mysql_escape_string($comment_text);
// grab the first five words of the comment as the comment subject
$subject = "";
$arr = explode(" ",$comment_text);
for($i=0; $i<5; $i++) { $subject .= $arr[$i]." "; }
$comments_insert_query = "INSERT INTO comments (cid, pid, nid, uid, subject, comment, hostname, timestamp, score, status, thread, users) VALUES (NULL, 0, $node_rows, 0, '$subject', '$comment_text', '<$MTCommentIP$>', UNIX_TIMESTAMP('<$MTCommentDate format="%Y-%m-%d %H:%M:%S"$><$MTBlogTimezone$>'), 0, 0, '1/', 'a:1:{i:0;i:0;}');";
mysql_query($comments_insert_query);
if (mysql_errno($link))
{
echo mysql_errno($link) . ": " . mysql_error($link) . "\n";
}
$comments_rows++;
</MTComments>
// increment node_rows counter, so we have the correct nid for the comment insert next time
$node_rows++;
mysql_query($node_insert_query);
if (mysql_errno($link))
{
echo mysql_errno($link) . ": " . mysql_error($link) . "\n";
}
</MTEntries>
// echo the number of rows added to the nodes table
echo($node_rows." blog entries and ");
mysql_query("INSERT into sequences (name,id) VALUES ('node_nid',$node_rows+1)");
if (mysql_errno($link))
{
echo mysql_errno($link) . ": " . mysql_error($link) . "\n";
}
// echo the number of rows added to the comments table
echo($comments_rows." comments inserted.");
mysql_query("INSERT into sequences (name,id) VALUES ('comments_cid',$comments_rows+1)");
if (mysql_errno($link))
{
echo mysql_errno($link) . ": " . mysql_error($link) . "\n";
}
mysql_close($link);
?>
</body>
</html> - Create a new Movable Type Index template called
