Puncte:1

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

drapel 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?

drapel in
Există vreun motiv pentru care faceți această traducere în mod programatic?
Puncte:0
drapel kr

Am făcut-o singur. Iată soluția.

Mai întâi trebuie să copiați aspectul din nodul sursă în nodul tradus.

Apoi obțineți aspectul nodului tradus și traduceți-l.

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

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

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

foreach ($translated_layout ca $secțiune) {
  /** @var \Drupal\layout_builder\Section $section */
  $sectiune = reset($sectiune);

  foreach ($secțiune->getComponents() ca $component) {
    $configurare = $component->get('configurare');

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

$translated_entity->set('layout_builder__layout', $translated_layout);     
$nod->salvare();

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.