Есть поле Координаты, которое были заполнено вручную. В данный момент поменялась функциональность и поле Координаты заполняется из поля Фотография (EXIF).
Проблема возникает при обновлении ноды. Если поле Фотография не содержит фотографию или фотография без EXIF GPS данных, то поле Координаты стираются.
Как можно это предотвратить?
Комментарии
Думал сделать что-то такое, но это не работает
<?phpfunction prev_del_coor_node_update($node) {
//get updated value
$new_location = field_get_items('node', $node, 'field_location_exif');
//get old value
$loaded_node = node_load($node->nid);
$old_location = field_get_items('node', $loaded_node, 'field_location_exif');
if ($new_location || $old_location) {
//Как можно скопировать значение поля? и сохранить его?
drupal_set_message('old gps coordinates was copied');
}
}?>
Подходит ли hook_node_update для этой задачи или стоит рассматривать другие?
Нужно правильно заполнять данные (беря их из фотографии), т.е. не перезаписывать если нечем.
Тем способом, что я пробовал это нельзя сделать?
А каким вы пробовали?
Не видя всего модуля невозможно сказать, как именно там у вас это сохранялось и работало. А весь модуль изучать тут нашару никто не будет
Весь модуль это и есть эта функция, но к сожалению он зависает при выполнении. На сколько я понимаю проблема в сохранении.
Если вопрос о том как читаются данные с фотографий, для этого используется модуль drupal geocoder
<?php
function prev_del_coor_node_update($node) {
//get updateed value
$new_location = field_get_items('node', $node, 'field_location_exif');
//get old value
$loaded_node = node_load($node->nid);
$old_location = field_get_items('node', $loaded_node, 'field_location_exif');
dpm($old_location);
dpm($new_location);
if ($new_location <> $old_location) {
$node_wrapper = entity_metadata_wrapper('node', $node);
$node_wrapper->field_location_exif = $old_location;
$node_wrapper->save();
drupal_set_message(t('Old gps coordinates was copied'));
}
} ?>
Что вы вот тут проверяете я так и не понял
<?php if ($new_location || $old_location) { ?>
И в вашем коде $new_location всегда равно $old_location
Вы можете проверить они разные, до и после обновления.
Работает следующим образом
<?php
function prev_del_coor_node_presave($node) {
//get updated value
$new_location = field_get_items('node', $node, 'field_location_exif');
//get old value
$loaded_node = node_load($node->nid);
$old_location = field_get_items('node', $loaded_node, 'field_location_exif');
if (
$new_location <> $old_location) {$node->field_location_exif = $old_location;
drupal_set_message(t('Old gps coordinates was copied'));
}
}
?>