如何将外部数据导入到drupal?

很多人可能会遇到将现有网站迁移至Drupal的问题,下面的内容主要介绍如何将已有的数据迁移至drupal。

批量导入数据到drupal的方法其实也有很多,例如csv格式文件的导入,通过别的站点抓取到得信息,整合别的系统时,相互数据的迁移都要用到这些内容。我们建立一个简单的模型,只考虑节点基本数据,不考虑其他因素(比如节点图片,节点术语分类等等),将模型简单化 有助于我们解决问题。

以拿抓取页面为例,我们使用正则表达式过滤出需要的信息后,将其存放在一个一维关联数组中,其中键对应数据库中的节点字段,比如 title,body,name等。然后我们手动调用node_submit方法,将一维数组传进去,这个方法会对我们的数组做一些存表之前的工作,我 们直接可以在api.drupal.org查看这个方法的代码。

<?php
function node_submit($node) {
  global
$user;

 
// Convert the node to an object, if necessary.
 
$node = (object)$node;

 
// Auto-generate the teaser, but only if it hasn't been set (e.g. by a
  // module-provided 'teaser' form item).
 
if (!isset($node->teaser)) {
   
$node->teaser = isset($node->body) ? node_teaser($node->body, isset($node->format) ? $node->format : NULL) : '';
  }

  if (
user_access('administer nodes')) {
   
// Populate the "authored by" field.
if ($account = user_load(array('name' => $node->name))) {
$node->uid = $account->uid;
}
else {
$node->uid = 0;
}
}

$node->created = !empty($node->date) ? strtotime($node->date) : time();

// Do node-type-specific validation checks.
node_invoke($node, 'submit');
node_invoke_nodeapi($node, 'submit');

$node->validated = TRUE;

return
$node;
}
?>

除了一些数据的可用性检查外,该方法调用了所有实现submit和nodeapi中实现submit的函数,之后就简单了,再调用node_save即可。

 

Your rating: None Average: 3 (2 votes)

评论

发表新评论

CAPTCHA
请补全“__”处缺失的字,你懂的!
请填写一个正确的答案