我已经创建了一个模块来获取服务器信息。 所以我创建了一个特定的内容类型。要收集所有数据,一个字段需要主机名。
我使用函数hook_node_presave()
在我的节点中添加CPU,RAM等信息。因此,当我创建一个新节点时,我手动指定名称,drupal调用函数hook_node_presave()
,它会自动在我的节点中插入其他信息。
我还设置了一个cron来定期更新每个节点信息。为此,我使用hook_cron()
。我设法通过node_load()
加载每个节点来更新它们,但是当我想使用node_save()
Drupal保存它们时,逻辑上hook_node_presave()
...但是不要这样发生:因为这个功能再次更新信息!
如何区分hook_node_presave()
中的新节点和更新节点?
我可以打电话给哪个功能来避免这个问题?
感谢您的帮助
答案 0 :(得分:2)
只需检查节点对象上的is_new
成员或是否存在nid
:
function MYMODULE_node_presave($node) {
if ($node->is_new) {
// ...
}
// Equivalent to
if (empty($node->nid)) {
// ...
}
}
根据user_save()
文档:
<强>参数强>
$ node:要保存的$ node对象。如果省略$ node-&gt; nid(或$ node-&gt; is_new为TRUE),则会添加一个新节点。