Drupal 10:ook_entity_insert иook_entity_update не работают для разметки абзацевPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Drupal 10:ook_entity_insert иook_entity_update не работают для разметки абзацев

Сообщение Anonymous »

Я работаю над модулем Drupal 10, который реализуетook_entity_insert иook_entity_update для автоматической пометки абзацев типа события в узле при его создании или обновлении. Перехватчики запускают логику, которая проверяет наличие абзацев, сравнивает теги с группой узла и добавляет недостающие.
Пока срабатывают перехватчики, абзацы не обновляются. В журналах иногда появляются сообщения типа:
  • "Абзацы не найдены"
  • "Узел не связан с группой"< /li>
…хотя данные явно существуют. Никаких ошибок не возникает — просто… ничего не происходит.
  • Нужно ли мне перезагружать объекты (например, абзацы или группы) внутри этих перехватчиков, чтобы гарантировать свежесть данных?
  • Есть ли какие-либо особенности сook_entity_insert илиook_entity_update, которые могут вызвать такое поведение?
  • Может ли проблема быть в моем пользовательские вспомогательные функции для получения ссылаются на объекты или данные группы?
Будем очень признательны за любые советы или идеи! Ниже приведен соответствующий код:

Код: Выделить всё

/**
* Implements hook_entity_insert().
*/
function my_module_entity_insert(EntityInterface $entity) {
if ($entity instanceof NodeInterface) {
my_module_handle_event_paragraph_tagging($entity);
}
}

/**
* Implements hook_entity_update().
*/
function my_module_entity_update(EntityInterface $entity) {
if ($entity instanceof NodeInterface) {
my_module_handle_event_paragraph_tagging($entity);
}
}

/**
* Handles tagging for paragraphs of type 'event' in a given node.
*
* @param \Drupal\node\NodeInterface $entity
*   The node entity being saved. This node contains referenced paragraphs.
*/
function my_module_handle_event_paragraph_tagging(NodeInterface $entity) {
if (!$entity->hasField('field_content_function')) {
\Drupal::logger('my_module')->warning('Node @id does not have field_content_function.', ['@id' => $entity->id()]);
return;
}

$paragraphs = FieldHelper::getReferencedEntities($entity, 'field_content_function');
if (empty($paragraphs)) {
\Drupal::logger('my_module')->notice('No paragraphs found in field_content_function for node @id.', ['@id' => $entity->id()]);
return;
}

$group = EntityHelper::getGroup($entity);
if (!$group) {
\Drupal::logger('my_module')->warning('Node @id is not associated with a group.', ['@id' => $entity->id()]);
return;
}

$auto_main_tag_groups = FieldHelper::getReferencedEntities($group, 'field_auto_main_tagged_groups') ?? [];
$auto_main_tag_group_ids = array_map(fn($g) => $g->id(), $auto_main_tag_groups);

foreach ($paragraphs as $paragraph) {
if ($paragraph->bundle() !== 'event') {
continue;
}

$main_event_list_groups = FieldHelper::getReferencedEntities($paragraph, 'field_main_tagged_groups') ?? [];
$main_event_list_group_ids = array_map(fn($g) => $g->id(), $main_event_list_groups);

$groups_to_add = array_diff($auto_main_tag_group_ids, $main_event_list_group_ids);

foreach ($groups_to_add as $group_id) {
$paragraph->get('field_main_tagged_groups')->appendItem(['target_id' => $group_id]);
}

try {
$paragraph->save();
} catch (\Exception $e) {
\Drupal::logger('my_module')->error('Error saving paragraph @id: @message', [
'@id' => $paragraph->id(),
'@message' => $e->getMessage(),
]);
}
}
}

/**
* Retrieves the group associated with a node.
*
* @param \Drupal\node\NodeInterface $node
*   The node entity.
*
* @return \Drupal\group\Entity\Group|null
*   The associated group entity, or NULL if no group is found.
*/
function my_module_get_group(NodeInterface $node) {
$group = FieldHelper::getReferencedEntities($node, 'field_group');
if (!empty($group)) {
return reset($group);
}

if ($node->hasField('field_parent_node')) {
$parent = FieldHelper::getReferencedEntities($node, 'field_parent_node');
if (!empty($parent) && $parent[0] instanceof NodeInterface) {
return my_module_get_group($parent[0]);
}
}

\Drupal::logger('my_module')->warning('No group found for node @id.', ['@id' => $node->id()]);
return NULL;
}
Дайте мне знать, если вы столкнулись с чем-то подобным или у вас есть идеи, что я мог упустить. Заранее спасибо! 🙏


Подробнее здесь: https://stackoverflow.com/questions/792 ... aragraph-t
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Drupal 10:ook_entity_insert иook_entity_update не работают для разметки абзацев
    Anonymous » » в форуме Php
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Drupal 8 программный перевод абзацев
    Anonymous » » в форуме Php
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Исключить свойство из SELECT, но включить в INSERT и UPDATE в Entity Framework Core
    Anonymous » » в форуме C#
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Исключить свойство из SELECT, но включить в INSERT и UPDATE в Entity Framework Core
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Исключить свойство из SELECT, но включить в INSERT и UPDATE в Entity Framework Core
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»