Supprimer les traductions d'un noeud en même temps que le noeud

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

J'aimerai pouvoir supprimer toutes les traductions d'un noeud lorsque je supprime ce dernier. En effet, avec i18n, locale et Content translation, quand je supprime un noeud, il reste toujours sa traduction. Dans mon cas c'est simple je n'ai que Anglais et Français. Je voudrais donc que le noeud traduit en anglais soit supprimé en même temps que le noeud en français.

J'ai essayé de développer un module avec le hook_nodeapi ou le hook_delete, mais il semble que ces hooks s'exécutent après la suppression du premier noeud, et par conséquent, le champ tnid de la table 'node' pour le noeud traduit redevient égal à 0. En gros : après suppression du noeud d'origine, on ne peux plus retrouver quelle était le noeud de départ du noeud traduit...

Existerait-il une fonction ou un hook qui s'exécuterait juste avant le hook_delete, de manière à pouvoir récupérer les informations dans la table node ?

Merci par avance, je coince sévère là...

Forum : 
Version de Drupal : 

Bon je m'en suis sorti en écrivant un module contenant juste une implémentation du hook_nodeapi(), comme prévu. Sauf qu'à la place de supprimer uniquement le noeud traduit correspondant à celui qu'on est en train de supprimer, je fais une recherche dans la base et je supprime tous les noeuds anglais qui n'ont pas de traduction française. Dans mon cas ça me convient puisque sur mon site, il est impossible d'avoir un noeud en anglais si il n'existe pas au préalable en français.

Maintenant, c'est une méthode assez peu élégante, et devoir supprimer uniquement la bonne traduction peut être très utile par la suite. Alors discussion à suivre, si quelqu'un a une idée (patch pour les modules Locale ou / et Content translation, nouveau module, etc... ?), il est le bienvenu !

Bon courage !

"mais il semble que ces hooks s’exécutent après la suppression du premier noeud"

Le hook_nodeapi du module translation doit s'éxécuter avant le tien, du coup ça remet les tnid à 0. Si ton hook_nodeapi passe avant celui de translation, tu auras encore probablement les tnids à disposition pour faire ce que tu souhaites.

Essaie de changer le poids de ton module pour que ton hook passe avant translation.

http://drupal.org/node/110238

Merci pour vos réponses. Je ne savais pas qu'on pouvait changer le poids d'un module pour influer sur l'ordre d'exécution des hooks, c'est une information très utile ;-)
J'ai fait quelques tests, ça me modifie bien le 'weight' dans la base. J'ai mis -1 pour passer avant locale et translation, ça a l'air de fonctionner... sauf que du coup lorsque je créé une traduction d'un noeud, elle n'est plus liée, etc. Bref ça m'a mis un peu le bordel, et comme je n'ai pas vraiment le temps de regarder en détail tout ce qui se passe, et que la première solution fonctionne dans mon cas, je vais en rester là pour le moment.
Cependant, je referai des tests plus tard, et quand j'aurai un peu plus de temps, je coderai un module s'adaptant à toutes les langues ;-)

Merci encore,