Рейтинг:0

Программно обновить узел и все переводы

флаг gu

Мне нужно добавить теги в качестве терминов таксономии к уже созданным узлам на 7 языках.

Если я сделаю это:

$node = Node::load($nid);
$node->set('field_tags', getTerms($terms));
$узел->сохранить();

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

getTerms() - это моя собственная функция, которая получает идентификаторы терминов и создает их, если они не существуют.

Мне нужно обновить все переводы узлов. Но как?

Пробовал это:

foreach (getLanguages() as $key => $value) {
  $node_translation = $node->addTranslation($key, $node->toArray());
  $node_translation->set('field_tags', getTerms($terms));
  $node_translation->сохранить();
}

Дает мне эту ошибку: [ошибка] Указан неверный язык перевода (ru). Но язык 'ru' активен.

getLanguages() - возвращает массив всех языков. Эта же функция используется для создания узлов и терминов, и там она работает нормально.

Как Обновить узел и все его переводы?

4uk4 avatar
флаг cn
Можете ли вы добавить место, где возникает ошибка, и трассировку стека до точки, где она соединяется с вашим кодом? Вы хотите обновить переводы, когда ваш код добавляет переводы. Как вы настроили справочное поле и словарь? Оба переводимы?
Рейтинг:0
флаг gu

Наконец-то нашел правильное решение для программного обновления перевода узла:

если ($node->hasTranslation($key)) {
  $translation = $node->getTranslation($key);
  $translation->set('field_tags', $terms);
  $перевод->сохранить();
}

$key - тег языка, например en, es, ru и т.д.

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

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