Рейтинг:2

hook_node_presave получить оригинал переведенного узла

флаг cn

Я использую hook_node_presave и хочу определить, какое поле обновляется при обновлении переведенного узла. Вот мой код:

function hook_import_node_presave(\Drupal\node\NodeInterface $node) {
  если (!$node->isNew()){
    $entityFieldManager = \Drupal::service('entity_field.manager');
    $fields = $entityFieldManager->getFieldDefinitions('узел', 'статья');
    foreach($fields as $field_name => $field_definition) {
      foreach ($node->getTranslationLanguages() as $langcode => $langcode_value) {
        $node = $node->getTranslation($langcode);
        if ($node->get($field_name)->getValue() != $node->original->get($field_name)->getValue()) {
          // сделай что-нибудь
        }
      }
    }
  }
}

Однако,

$node = $node->getTranslation($langcode);
$node->original->get($field_name)->getValue()

даже после "getTranslation()" "original" по-прежнему указывает на язык по умолчанию. Я хочу получить «исходный» язык переведенного узла.

4uk4 avatar
флаг cn
Каков результат $node->original->getTranslation($langcode)->get($field_name)->getValue()?
Gabriel Fernandez avatar
флаг cn
Да! Похоже, теперь он получает «исходное» значение переведенного узла. Спасибо огромное!
Рейтинг:1
флаг cn
$node = $node->getTranslation($langcode);

Это изменяет перевод объекта узла, переданного по ссылке. Лучше использовать другую переменную:

$node_translation = $node->getTranslation($langcode);

$node->original->get($field_name)->getValue()

оригинальный является отдельным объектом узла и должен быть переведен отдельно:

$node->original->getTranslation($langcode)->get($field_name)->getValue()

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.