跳转到主要内容

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

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

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

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

{syntaxhighlighter brush:php} <?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; } ?> {/syntaxhighlighter}

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

 

文章分类