Помощь с hook_entity_update, hook_entity_presave

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

Аватар пользователя gera8774 gera8774 20 ноября в 9:36

Здравствуйте! Не могу сообразить, как решить задачу на Drupal 10.
Есть роли Автор и Редактор.
Автор создает свой материал. По умолчанию он не опубликован. Поле публикации в планах скрыть от авторов.
Редактор смотрит материал. И далее:
1) если всё ок, ставит галочку публикации, сохраняет, и материал публикуется
2) может сам внести корректировки, ставит галочку, и материал публикуется с внесенными изменениями. Изменения автоматически попадают в журнал редакции и в зависимости от того, что поменялось, должно что-то происходить на сайте (уведомления, изменение поля в ЛК автора)
3) может не одобрить материал, оставить комментарий с недочетами, сохраняет материал без публикации

Как примерно это всё организовать и какими хуками?
В принципе вроде как получилось это сделать с помощью hook_entity_presave. Но как при этом отслеживать изменения?

Комментарии

Аватар пользователя OldWarrior OldWarrior 20 ноября в 11:09

gera8774 wrote: В принципе вроде как получилось это сделать с помощью hook_entity_presave. Но как при этом отслеживать изменения?

В hook_entity_presave приходит параметр $entity (или $node) у которого есть элемент $node->original. Это предыдущая копия $node, содержащая значения полей до текущего изменения. Остаётся сверить интересующие поля.

PS. Например:

<?php
...
$old_node $node->original;

if (

$node->field_body->value != $old_node->field_body->value) {
  
// Изменилось поле field_body.
}
...
?>