Рейтинг:1

Как зацепить удаление абзаца?

флаг br

Я на D9, и у меня есть абзац внутри узла типа контента.

Мне нужно подключиться, когда абзац удален, чтобы выполнить некоторую пользовательскую логику и настроить очередь.

я пытался hook_entity_delete, hook_entity_predelete или же hook_paragraph_delete, hook_paragraph_predelete: эти хуки запускаются во время cron, если узел, содержащий абзац, удален.

Однако мне кажется, что они не срабатывают, если существующий абзац удаляется через виджет внутри формы редактирования узла.

Есть ли способ перехватить этот случай/решить мою проблему?

berramou avatar
флаг gb
когда вы удаляете абзац из содержимого, вы удаляете ссылку, а не элемент абзаца, поэтому нормально, что ни один из этих хуков не срабатывает.
Giuseppe avatar
флаг br
@berramou Это правда, но я ожидал, что они сработают во время cron, потому что я предполагал, что абзацы без ссылок были удалены. Однако после эффективной проверки БД они, похоже, не удаляются.
Рейтинг:6
флаг cn

Вам нужно реализовать хук обновления узла и сравнить идентификаторы абзаца:

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

/**
 * Реализует hook_ENTITY_TYPE_update() для сущностей узла.
 */
функция mymodule_node_update(NodeInterface $node) {
  если ($node->getType() == 'my_content_type') {
    $ids = array_column($node->field_paragraph->getValue(), 'target_id');
    $original_ids = array_column($node->original->field_paragraph->getValue(), 'target_id');
    // сравнить идентификаторы
  }
}

Если это вложенный абзац, используйте hook_paragraph_update() для типа родительского абзаца.

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

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