[РЕШЕНО]Как сделать, чтоб поле на затиралось пустым значением

Пт, 17/03/2017 - 14:43

Есть поле Координаты, которое были заполнено вручную. В данный момент поменялась функциональность и поле Координаты заполняется из поля Фотография (EXIF).
Проблема возникает при обновлении ноды. Если поле Фотография не содержит фотографию или фотография без EXIF GPS данных, то поле Координаты стираются.
Как можно это предотвратить?

0 Спасибо

Комментарии

Аватар пользователя makbuk
1 month 1 неделя назад makbuk #

Думал сделать что-то такое, но это не работает

<?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');
    }
}?>

0 Спасибо
Аватар пользователя makbuk
1 month 1 неделя назад makbuk #

Подходит ли hook_node_update для этой задачи или стоит рассматривать другие?

0 Спасибо
Аватар пользователя bumble
1 month 6 дней назад bumble #

Нужно правильно заполнять данные (беря их из фотографии), т.е. не перезаписывать если нечем.

0 Спасибо
Аватар пользователя makbuk
4 недели 1 день назад makbuk #

Тем способом, что я пробовал это нельзя сделать?

0 Спасибо
Аватар пользователя xakd
4 недели 1 день назад xakd #

А каким вы пробовали?

0 Спасибо
Аватар пользователя makbuk
4 недели 1 день назад makbuk #
makbuk написал:
Думал сделать что-то такое, но это не работает
function 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');
}
}

0 Спасибо
Аватар пользователя xakd
4 недели 1 день назад xakd #

Не видя всего модуля невозможно сказать, как именно там у вас это сохранялось и работало. А весь модуль изучать тут нашару никто не будет

0 Спасибо
Аватар пользователя makbuk
3 недели 3 дня назад makbuk #

Весь модуль это и есть эта функция, но к сожалению он зависает при выполнении. На сколько я понимаю проблема в сохранении.
Если вопрос о том как читаются данные с фотографий, для этого используется модуль 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'));
    }
}

?>

0 Спасибо
Аватар пользователя xakd
4 недели 1 день назад xakd #

Что вы вот тут проверяете я так и не понял
<?php  if ($new_location || $old_location) {  ?>

0 Спасибо
Аватар пользователя xakd
4 недели 1 день назад xakd #

И в вашем коде $new_location всегда равно $old_location

0 Спасибо
Аватар пользователя makbuk
3 недели 3 дня назад makbuk #

Вы можете проверить они разные, до и после обновления.

0 Спасибо
Аватар пользователя makbuk
3 недели 3 дня назад makbuk #

Работает следующим образом

<?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'));
    }

}

?>

0 Спасибо