hook_nodeapi recusrion hell (вызов node_save во время операции обновления)
Я разрабатываю сайт (D6), который выполняет поиск геокодов каждый раз, когда узел вставляется или обновляется, у узла есть текстовое поле адреса и скрытые поля для пары lat / lng, и во время hook_nodeapi я хочу вызвать эту функцию геокодирования.
Проблема в том, что геокодер должен сохранить эту новую пару latlng в узле, который, в свою очередь, вызывает hook_nodeapi, и, таким образом, возникла моя проблема рекурсии.
Каков наилучший способ избежать этой головной боли?
1 ответ
Если вы полностью уверены, что не можете изменить поведение геокодера, вы можете использовать простой обходной путь:
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, но это должно работать.