Eu encontrei vários posts com essa mesma pergunta, mas as respostas sempre divergem para outro tópico ou elas não funcionam para as minhas necessidades.
Depois que um nó é salvo, desejo que meu módulo personalizado insira uma linha em uma das minhas tabelas personalizadas que contém o nid do novo nó. Quando hook_node_submit
é chamado, o nid ainda não existe. hook_node_insert
tem o nid, mas só é chamado na primeira vez em que o nó é salvo, mas potencialmente preciso tomar uma ação cada vez que o nó é salvo.
Meu plano é separar minha funcionalidade em seu próprio método e implementar os dois ganchos, mas estou tentando aprender a fazer as coisas corretamente com o Drupal e, portanto, estou me perguntando se existe um gancho que realmente se encaixe nos meus requisitos.
Existe um gancho chamado toda vez que um nó é salvo e chamado APÓS a gravação ser concluída?
hook_node_insert
ehook_node_update
(atua sempre que um nó está sendo salvo).hook_node_submit
mas nãohook_node_update
?hook_node_insert
, bem como emhook_node_update
.hook_node_insert()
ehook_node_update()
são os ganchos corretos para isso,hook_node_submit()
é chamado durante o processo de envio do formulário antes que o nó seja salvo. Não se esqueça de que você precisa limpar os caches sempre que adicionar / remover um ganchoRespostas:
Olhando para os comentários sobre a questão, parece que a solução óbvia é usar os ganchos
hook_node_insert()
ehook_node_update()
.Na verdade, fiz algo muito semelhante ao descrito na resposta: escrevi uma função que faz o que quero que seja feita toda vez que um nó é criado / atualizado e, em seguida, chamo-o de cada um desses ganchos. Funciona muito bem.
fonte
hook_form_alter()
. drupal.stackexchange.com/a/221041/15055A maneira correta de fazer isso é respeitar a transação db do Drupal. Se você deseja executar alguma ação do banco de dados em hook_node_insert, considere que o nó ainda não foi realmente salvo. o que significa que, se falhar e reverter, você terá dados órfãos no banco de dados. Portanto, a API do banco de dados Drupal deve ser usada e não a execução direta da consulta.
Se você deseja atualizar o próprio nó em hook_node_insert, não é possível, porque não é possível usar o node_save, pois o nó ainda não está salvo no banco de dados e a chamada causa exceção. Uma solução é usar a função register_shutdown_function e passar o nid, você pode usar o node_load para garantir que ele esteja realmente salvo e executar qualquer outra ação que desejar no novo nó.
ATUALIZAÇÃO: Você também pode encontrar uma alternativa mais fácil aqui /programming//a/24035797/1726778
fonte
drupal_register_shutdown_function()
. Mas esteja ciente de que ambos parecem ter problemas em ambiente php-fpm, consulte drupal.stackexchange.com/q/102603/10667og_is_group
. Eu acho que estava recebendo falsos negativos por esse motivo.Existe um novo módulo drupal, Hook Post Action , que adiciona os ganchos de pós-salvamento. Vamos tentar ver se funciona.
fonte