我试图修复一些遗留代码中的问题,这些代码生成自定义内容类型的节点" show",但仅当相同类型且具有相同标题的节点不存在时已经。代码如下:
$program = node_load(array('title' => $xml_node->program_title, 'type' => 'show'));
if (!$program) {
$program = new stdClass();
$program->type = 'show';
...
node_submit($program);
node_save($program);
}
因此,脚本首先尝试加载节点' show'具有特定标题的内容类型,如果失败则创建一个。
问题是,当它在短时间内(循环内)被多次调用时,它会创建双节点。就像在同一秒创建相同标题的2个节目一样?!?
那里可能出现什么问题?
我正在寻找如何在Drupal 6中保存节点的示例。在某些情况下,他们甚至不会调用node_submit()。需要那个电话吗?如果是这样,我是否可能必须传递给node_save()node_submit()返回什么?或者node_load()可能由于某种原因无法加载现有节点?也许某些缓存必须被清除或者什么?
答案 0 :(得分:1)
据我所知并使用node_save以编程方式创建节点,不需要node_submit()函数。 创建双节点的原因是在完成对node_load()缓存的更新之前触发了node_load()函数。尝试添加:
node_load(FALSE, NULL, TRUE);
在node_save($ program)之后。 这将清除node_load()缓存。