Как присоеденить к ноде уже созданные параграфы?

Главные вкладки

Комментарии

Аватар пользователя OldWarrior OldWarrior 14 декабря 2021 в 2:20

Как-то получилось, что никогда не пытался сделать это через UI. А кодом элементарно:

<?php
  $new_item 
Paragraph::create([
    
'type'         => 'MY_TYPE'// Маш. имя типа параграфа
    
'field_1'      => $some_value_1// Значения полей параграфа...
    
'field_2'      => $some_value_2,
    
'field_3'      => $some_value_3,
  ]);
  
$new_item->save();
  
// Присоединение нового экземпляра параграфа 
  // к полю entity_reference_revisions.
  
$node->field_my_paragraphs->appendItem($new_item);
?>

Подозреваю, что для того, чтобы добавлять через UI - нужно создать представление (View) для выбора параграфов и установить связь с ним в поле "Способ выбора" в настройках вашего поля entity_reference_revisions.

Аватар пользователя VasyOK VasyOK 14 декабря 2021 в 2:48
OldWarrior wrote: нужно создать представление (View) для выбора параграфов и установить связь с ним в поле "Способ выбора" в настройках вашего поля entity_reference_revisions.


Вьюха:

Связь с вьюхой в настройках поля парграфов:

Что-то еще нужно? Пока не вижу чтобы можно было на форме ноды указывать ид парграфа.

Аватар пользователя VasyOK VasyOK 15 декабря 2021 в 12:07

В предпросмотре вьюхи ИДшники выводятся. Но при созданиии ноды я не вижу их списка выбора. Т.е. виджета нет.

Что касается кода, как вижу приведено создание параграфов. А имеющиеся приаттачить к нодам можно?

P.S. Также пробовал через https://www.drupal.org/project/feeds/issues/2978757 - но пока труба. Не понимаю как получается там у кого-то.

Аватар пользователя OldWarrior OldWarrior 16 декабря 2021 в 2:49

VasyOK wrote: Что касается кода, как вижу приведено создание параграфов. А имеющиеся приаттачить к нодам можно?

Да можно всё. По сути - можно просто заменить метод ::create() на ::load()

<?php
  
...
  
$pid 1234// ID параграфа.
  
$item Paragraph::load($pid);
  
// Присоединение существующего экземпляра параграфа 
  // к полю entity_reference_revisions.
  
$node->field_my_paragraphs->appendItem($item);
  
// Не забыть сохранить сущность ноды.
  
$node->save();
  ...
?>

или множественное присоединение:

<?php
  
...
  
$pids = [123412351236]; // ID'шники параграфов.
  
$paragraph_storage = \Drupal::entityTypeManager()->getStorage('paragraph');
  
$paragraphs $paragraph_storage->loadMultiple($pids );
  foreach (
$paragraphs as $paragraph) {
    
$node->field_my_paragraphs->appendItem($paragraph);
  }
  
// Не забыть сохранить сущность ноды.
  
$node->save();
  ...
?>
Аватар пользователя OldWarrior OldWarrior 16 декабря 2021 в 14:19

Нигде. Приведён типичный частный пример с присоединением параграфов к ранее загруженной ноде $node. Если нужно загружать ещё и ноды, то конструкция, понятно, будет несколько сложнее. Типа Node::loadMultiple([1, 2, 3, 4, 5, ...]) и далее - цикл.

Аватар пользователя VasyOK VasyOK 17 декабря 2021 в 4:50

Понял. Работает. Думаю где нибудь мне это пригодится.
Даже если получится массово загрузить параграфы в library items, все равно будет проблема загрузить library items к нодам. Т.к. с feeds оно из каробки пока не дружит.