Рейтинг:0

Как программно установить настраиваемое поле ссылки на объект флага при программной установке флага?

флаг pe

Немного предыстории: я новичок в создании модулей Drupal 8/9. Мне нужно, чтобы узлы определенного типа контента автоматически помечались. У меня это работает, используя приведенный ниже код. Однако задействованный флаг также имеет настраиваемое поле, которое мне нужно установить.

  • Это поле ссылки на сущность (к другому узлу)
  • Я хочу, чтобы настраиваемое поле ссылки на объект флага имело то же значение, что и поле ссылки на объект на помеченном узле.

(Это может показаться странным. Возможно, есть лучший способ достичь целей UX. Я все еще хочу знать, как это сделать.)

«rf_tweaks» — это имя машины модуля, «research_note» — тип содержимого узла, а «research_item» — имя флага.

используйте Drupal\node\Entity\Node;

функция rf_tweaks_node_insert (узел $ узел) {
  если ($node->bundle() == 'research_note'){
 $flag = \Drupal::entityTypeManager()->getStorage('flag')->load('research_item');
 \Drupal::service('flag')->flag($flag, $node);
}
}

На сайте есть отличная информация пометить страницу API, но методы настолько разные, что мне непонятно, как их приспособить к этой ситуации.

Рейтинг:1
флаг cn

Метод в вашей последней строке кода возвращает объект "flagging", который представляет отношения объект/флаг. Это то, что вам нужно, чтобы установить поле. например

$flag = \Drupal::entityTypeManager()->getStorage('flag')->load('research_item');
$flagging = \Drupal::service('flag')->flag($flag, $node);

$flagging->field_foo->target_id = $node->field_bar->target_id;
$flagging->сохранить();

Это предполагает, что объект с пометкой сохраняется дважды, поэтому, если производительность когда-либо станет проблемой, вам может потребоваться создать Пометка объект вручную и сохраните его, чтобы избежать двойного попадания.

флаг pe
Работает на меня. Очень признателен!
флаг pe
Я добавил код с комментариями, чтобы попытаться понять, что происходит... в основном для моего собственного образования. Два вопроса: 1. Правильно ли я понимаю? 2. Мы используем ->save(), чтобы добавить значение поля, а не использовать службу флагов, потому что использование службы приведет к созданию другой пометки вместо изменения текущей?

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

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