1

我正在尝试解决一些遗留代码中的问题,这些代码生成自定义内容类型“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);
        }

因此,脚本首先尝试加载具有特定标题的“显示”内容类型的节点,如果失败,它会创建一个。

问题是,当它在短时间内(在循环内)被多次调用时,它会创建双节点。就像在同一秒内创建了 2 个具有相同标题的节目?!?

那里可能有什么问题?

我正在寻找如何在 Drupal 6 中保存节点的示例。在某些情况下,他们甚至不调用 node_submit() 。需要那个电话吗?如果是这样,我可能必须将 node_submit() 返回的内容传递给 node_save() 吗?或者 node_load() 可能由于某种原因无法加载现有节点?也许必须清除一些缓存或其他什么?

4

1 回答 1

1

据我所知并使用 node_save 以编程方式创建节点,不需要 node_submit() 函数。创建双节点的原因是 node_load() 函数在完成对 node_load() 缓存的更新之前触发。尝试添加:

node_load(FALSE, NULL, TRUE);

在 node_save($program) 之后。这将清除 node_load() 缓存。

见: https ://api.drupal.org/comment/12084#comment-12084

于 2014-11-12T09:24:23.087 回答