我必须以编程方式插入数百万个节点(从xml导入数据)。 Node有许多cck字段,例如照片,投票,节点引用等。是否有一些技巧可以加快这个过程(通过drupal api node_save保存节点)?
要清楚我想要找到的内容,这里有一个例子:我们不需要在数据导入期间清除缓存,所以我们可以在node_save函数中注释最后一行。
还有其他有用的性能提示吗?
答案 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");
}
与我联系以获取更多信息。