hook_node_view递归地狱(在更新操作期间调用节点保存)

时间:2012-03-27 20:15:43

标签: drupal drupal-6 drupal-hooks

我正在开发一个站点(D6),每次插入或更新节点时都会运行地理编码查找,该节点有一个地址文本字段和一个lat / lng对的隐藏字段,而在hook_nodeapi期间我想调用这个地理编码功能

问题是地理编码器需要将这个新的latlng对保存到节点,而节点又调用了hook_nodeapi,因此产生了递归问题。

什么是避免这种头痛的最佳方法?

1 个答案:

答案 0 :(得分:0)

如果您完全确定,您无法更改地理编码器行为,则可以使用简单的解决方法:

static $geocoded_nodes = array();

if (!$geocoded_nodes[$node->nid]) {
   $geocoded_nodes[$node->nid] = TRUE;
   call_geocoder_stuff().
}

作为替代方案,您还可以尝试将未使用的字段添加到传递给地理编码器逻辑的节点。

if (!isset($node->geocoding_done)) {
   $node->geocoding_done = TRUE;
   call_geocoder_stuff($node).
}

我不确定node_save逻辑上是否不会丢弃此字段,但这应该可行。