Обратный вызов после сохранения?
Как выполнить функцию каждый раз, когда узел обновляется? Я попытался использовать hook_nodeapi, но похоже, что крюк удаляется из Drupal 7.
То, что я хочу сделать, это,
- добавить новое поле с типом контента основного изображения (типа bool) для того, чтоб админ установил основное изображение.
- Я собираюсь использовать модуль Views для отображения узлов, но упорядочить узлы по полю "main image" и добавленной дате.
- так что первый узел всегда является основным изображением.
для этого мне нужно убедиться, что всегда есть только один узел с "основным изображением", установленным в true.




Ответы - Обратный вызов после сохранения? / Post-save callback?

15.03.2011 10:04:05
Крючок не был удален, но разделен на отдельные крючки для каждого $ op.
См.: http://api.drupal.org/api/search/7/hook_node
После сохранения, вы хотите hook_node_insert() и hook_node_update()




15.03.2011 10:04:33
Я полагаюhook_entity_presave
что hook_entity_presave может быть крючком, который вы ищете, если вы хотите действовать до обновления вашего узла :
Действуйте на объект до того, как он собирается создаваться или обновляться.
Или, если вы предпочитаете действовать после его обновления, взгляните на hook_entity_update
:
Действуйте на объекты при обновлении.

04.06.2014 03:07:50
В настоящее время ядро Drupal не предлагает никаких крючков для выполнения действий после вставки/обновления/удаления узла/сущности в базе данных. Например, вы не можете отправить электронное письмо с упоминанием узла после вставки узла, потому что Drupal использует транзакции SQL, и узел еще не полностью записан в базу данных при вызове предварительного сохранения узла hook, поэтому, если по какой-либо причине транзакция откатывается, пользователи получат ложное сообщение.
Таким образом модуль Hook Post Action вводит несколько новых крючков Drupal для преодоления этого ограничения:
- hook_entity_postsave
- hook_entity_postinsert
- hook_entity_postupdate
- hook_entity_postdelete
- hook_node_postsave
- hook_node_postinsert
- hook_node_postupdate
- hook_node_postdelete


04.09.2017 05:10:25
Просто чтобы завершить это немного больше, и если вам нужно выполнить какую-либо операцию после того, как узел был сохранен / обновлен, вы можете использовать модуль @sina-salek рекомендовал вам или вы можете использовать этот код:
// Same for hook_node_save!
function my_module_node_update($node) {
if ($node->type == 'content_type_name') {
// Invoke your callback function AFTER the node is updated.
drupal_register_shutdown_function('_my_module_the_function_to_call', $node);
}
}
function _my_module_the_function_to_call($node) {
// do stuff...
}
Используя функцию drupal_register_shutdown_function, вы обязательно вызываете свою пользовательскую функцию, когда крючок завершен, и узел был сохранен в БД.


03.10.2019 01:57:55
Другой способ добиться этого-расширить сущность узла с помощью пользовательского класса и вызвать код внутри Node::postSave
. Этот метод будет вызван, когда узел будет сохранен или обновлен.
Вы указываете свой пользовательский расширенный класс, реализуя hook с именем hook_entity_type_build
и предоставляете свой новый класс, например: $entity_types['node']->setClass(NodeExtended::class)
Внутри вашего класса вы можете переопределить метод postSave. Обычно я просто отправляю свое пользовательское событие здесь, чтобы другие модули могли подписаться на это событие post save узла, но это другая тема.