Рейтинг:1

How to translate the layout builder blocks of a node programmatically?

флаг kr

I am translating the nodes programmatically. Everything works fine except the layout builder blocks.

When I try to translate it, it also changes on the source node.

I have created a node in language en. Now I am translating it to nl. Here is my code.

if ($node->hasTranslation($language)) {
  $translated_entity =  $node->getTranslation($language);
}
else {
  $translated_entity =  $entity->addTranslation($language);
}

$translated_layout = $node->get('layout_builder__layout')->getValue();

foreach ($translated_layout as $section) {
  /** @var \Drupal\layout_builder\Section $section */
  $section = reset($section);

  foreach ($section->getComponents() as $component) {
    $configuration = $component->get('configuration');

    $component->setConfiguration($translated_configurations);
  }
}

$translated_entity->set('layout_builder__layout', $translated_layout);
$translated_entity->save();
$node->save();

Is there any way to retain the original blocks as it is on the source node and the save function only added the changes to the translated node?

флаг in
Есть ли причина, по которой вы делаете этот перевод программно?
Рейтинг:0
флаг kr

Я сделал это сам. Вот решение.

Сначала вам нужно скопировать макет из исходного узла в переведенный узел.

Затем получите макет переведенного узла и переведите его.

если ($node->hasTranslation($language)) {
  $translation_entity = $node->getTranslation($language);
}
еще {
  $translation_entity = $entity->addTranslation($language);
}

$translated_entity->set('layout_builder__layout', $node->get('layout_builder__layout')->getValue());
$translation_entity->сохранить();

$translated_layout = $translated_entity->get('layout_builder__layout')->getValue();

foreach ($translated_layout как $section) {
  /** @var \Drupal\layout_builder\Section $section */
  $ раздел = сброс ($ раздел);

  foreach ($section->getComponents() как $component) {
    $configuration = $component->get('configuration');

    $component->setConfiguration($translated_configurations);
  }
}

$translated_entity->set('layout_builder__layout', $translated_layout);     
$узел->сохранить();

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

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