给durpal批量导入外部数据

很多时候,我们想给自己的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即可。