J'ai trouvé plusieurs messages avec cette même question, mais les réponses divergent toujours vers un autre sujet ou elles ne fonctionnent pas pour mes besoins.
Une fois un nœud enregistré, je souhaite que mon module personnalisé insère une ligne dans l'une de mes tables personnalisées qui contient le nid du nouveau nœud. Quand hook_node_submit
est appelé, le nid n'existe pas encore. hook_node_insert
a le nid, mais n'est appelé que la première fois que le nœud est enregistré, mais j'ai potentiellement besoin de prendre des mesures à chaque fois que le nœud est enregistré.
Mon plan est de séparer ma fonctionnalité dans sa propre méthode et d'implémenter les deux crochets, mais j'essaie d'apprendre à faire les choses correctement avec Drupal et je me demande donc s'il y a un crochet qui correspond réellement à mes besoins.
Existe-t-il un hook qui est appelé chaque fois qu'un nœud est enregistré et appelé APRÈS la sauvegarde est terminée?
hook_node_insert
ethook_node_update
(agit à chaque fois qu'un nœud est enregistré).hook_node_submit
mais pashook_node_update
?hook_node_insert
aussi bien que danshook_node_update
.hook_node_insert()
ethook_node_update()
sont les crochets corrects pour cela,hook_node_submit()
est appelé pendant le processus de soumission du formulaire avant que le nœud ne soit enregistré. N'oubliez pas que vous devez vider les caches chaque fois que vous ajoutez / retirez un crochetRéponses:
En regardant les commentaires sur la question, il semble que la solution évidente consiste à utiliser les crochets
hook_node_insert()
ethook_node_update()
.En fait, je viens de faire quelque chose de très similaire, comme décrit dans la réponse: j'ai écrit une fonction qui fait ce que je veux faire à chaque fois qu'un nœud est créé / mis à jour, puis je l'appelle à partir de chacun de ces crochets. Cela fonctionne très bien.
la source
hook_form_alter()
. drupal.stackexchange.com/a/221041/15055La bonne façon de procéder est de respecter la transaction db de Drupal. Si vous souhaitez effectuer une action de base de données dans hook_node_insert, vous devez considérer que le nœud n'est pas encore réellement enregistré. ce qui signifie qu'en cas d'échec et de restauration, vous vous retrouvez avec des données orphelines dans votre base de données. L'API de base de données Drupal doit donc être utilisée et non l'exécution directe des requêtes.
Si vous souhaitez mettre à jour le nœud lui-même dans hook_node_insert, vous ne pouvez pas, car il n'est pas possible d'utiliser node_save car le nœud n'est pas encore enregistré dans la base de données et son appel provoque une exception. Une solution consiste à utiliser la fonction register_shutdown_function et à passer nid, vous pouvez utiliser node_load pour vous assurer qu'il est vraiment enregistré, puis effectuer toute autre action que vous souhaitez sur le nouveau nœud.
MISE À JOUR: Vous pouvez également trouver une alternative plus simple ici /programming//a/24035797/1726778
la source
drupal_register_shutdown_function()
. Mais sachez que les deux semblent avoir des problèmes dans l'environnement php-fpm, voir drupal.stackexchange.com/q/102603/10667og_is_group
. Je pense que je recevais de faux négatifs pour cette raison.Il y a un nouveau module drupal, Hook Post Action , qui ajoute les hooks de sauvegarde du post. Essayons de voir si cela fonctionne.
la source