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

Аватар пользователя makbuk

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

Версия Drupal:
Форумы:
0 Thanks

Комментарии

Аватар пользователя makbuk
makbuk 8 месяцев назад

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

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

Аватар пользователя makbuk
makbuk 8 месяцев назад

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

Аватар пользователя bumble
bumble 8 месяцев назад

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

Аватар пользователя makbuk
makbuk 7 месяцев назад

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

Аватар пользователя xakd
xakd 7 месяцев назад

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

Аватар пользователя makbuk
makbuk 7 месяцев назад
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');
}
}

Аватар пользователя xakd
xakd 7 месяцев назад

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

Аватар пользователя makbuk
makbuk 7 месяцев назад

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

?>
Аватар пользователя xakd
xakd 7 месяцев назад

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

Аватар пользователя xakd
xakd 7 месяцев назад

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

Аватар пользователя makbuk
makbuk 7 месяцев назад

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

Аватар пользователя makbuk
makbuk 7 месяцев назад

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

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

}

?>