我正在开发一个站点(D6),每次插入或更新节点时都会运行地理编码查找,该节点有一个地址文本字段和一个 lat/lng 对的隐藏字段,在 hook_nodeapi 我想调用这个地理编码函数。
问题是地理编码器需要将这个新的 latlng 对保存到节点,而节点又调用 hook_nodeapi,因此产生了我的递归问题。
避免这种头痛的最佳方法是什么?
我正在开发一个站点(D6),每次插入或更新节点时都会运行地理编码查找,该节点有一个地址文本字段和一个 lat/lng 对的隐藏字段,在 hook_nodeapi 我想调用这个地理编码函数。
问题是地理编码器需要将这个新的 latlng 对保存到节点,而节点又调用 hook_nodeapi,因此产生了我的递归问题。
避免这种头痛的最佳方法是什么?
如果您完全确定无法更改地理编码器的行为,则可以使用简单的解决方法:
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 逻辑上被丢弃,但这应该可以工作。