Drupal node_save加速

时间:2012-02-29 09:58:56

标签: drupal drupal-6

我必须以编程方式插入数百万个节点(从xml导入数据)。 Node有许多cck字段,例如照片,投票,节点引用等。是否有一些技巧可以加快这个过程(通过drupal api node_save保存节点)?

要清楚我想要找到的内容,这里有一个例子:我们不需要在数据导入期间清除缓存,所以我们可以在node_save函数中注释最后一行。

还有其他有用的性能提示吗?

2 个答案:

答案 0 :(得分:0)

我不知道您需要以编程方式创建数百万个节点的目的,但是存在Devel模块及其Document上的文档。

我不确定使用此模块可以一次创建多少个节点。但值得在你的案例中进行测试。

检查生成内容,其中可以:

  

“通过快速生成来加速您的网站或模块的开发   节点,评论,术语,用户等。“

答案 1 :(得分:0)

我有一个解决方案

首先:您必须将.xml文件解析为.csv“逗号分隔符”。         你可以使用很多工具来做到这一点,你不必编写代码。         看看这个网站

1- http://codestips.com/php-xml-to-csv/

2- http://www.w3schools.com/php/func_filesystem_fgetcsv.asp

3- Convert large XML file to CSV in PHP

第二步:安装drupal模块注释导入“http://drupal.org/project/node_import

在节点导入中,您将导入csv文件,在配置中,您将设置此文件需要创建的类型。您还必须定义csv字段对所选内容类型的引用。该模块将为每个csv记录生成节点。例如,如果它包含100行,那么将创建100个节点。此链接是分步指南“http://drupal.org/node/827750

另一种解决方案:

1-是创建名为Import的内容类型并添加文件字段上传(上传您的xml文件),然后只创建一个实例。

2-然后挂钩node_api“操作提交”添加你的自定义代码来解析上传的xml 并迭代文件中的元素数量

3-最后,创建nodematic programmatic并使用xml元素子值设置它的值。

创建程序化注释的代码:

$node = new stdClass();
//Main Node Fields
$node->type = 'video'; //This can be any node type
$node->created = time();
$node->changed = $node->created;
$node->promote = 0; // Display on front page ? 1 : 0
$node->sticky = 0;  // Display top of page ? 1 : 0
$node->format = 2;  // 1:Filtered HTML, 2: Full HTML
$node->status = 1;  // Published ? 1 : 0
$node->language = 'en';

/* Custom Fields of Video */
$node->title = $node->name = "string";
$node->field_video_id[0]["value"] = "string";
$node->field_updated[0]['value'] = "string";
// this code must be placed to save the created node
if ($node = node_submit($node)) {
node_save($node);

drupal_set_message(t("Node " . $node->title . " added correctly"));
} else {
drupal_set_message(t("Node " . $node->title . " added incorrectly"), "error");
}

与我联系以获取更多信息。