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, но это должно работать.

Другие вопросы по тегам