Submitted by paul_normal on
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à...
J’ai déjà essayé et même
Permalien Soumis par selinav le 5 Septembre, 2011 - 18:01
J'ai déjà essayé et même constat si d'autres ont la solution ça m'intéresse.
Bon je m’en suis sorti en
Permalien Soumis par paul_normal le 6 Septembre, 2011 - 09:54
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
Permalien Soumis par nyl auster le 6 Septembre, 2011 - 15:25
"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
tiens nous au courant si la
Permalien Soumis par selinav le 6 Septembre, 2011 - 15:42
tiens nous au courant si la solution de Nyl Auster fonctionne. Merci
Merci pour vos réponses. Je
Permalien Soumis par paul_normal le 7 Septembre, 2011 - 14:55
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,