Salut,
Je viens d’uploader un système de gestion de liens entre les articles pour
gérer les traductions. Il s’agit tout simplement de pouvoir indiquer qu’un
article est la traduction d’un autre.
- Dans la page d’un article, sous le choix de la langue, apparaissent deux
entrées :
- A. La principale, à droite, est un bouton « Ecrire une nouvelle
traduction de cet article ». C’est la façon la plus simple de s’y prendre :
le nouvel article est directement « lié » au premier en tant que traduction.
Tous les rédacteurs peuvent utiliser ce bouton pour proposer une
traduction.
- B. La seconde (en interface complète seulement), uniquement si article
éditable, à gauche, permet d’indiquer qu’un article est la traduction d’un
autre article (on indique son numéro). Cette fonctionnalité est
indispensable pour rattraper les oublis, et pour mettre à jour un site déjà
existant. Messages d’erreur si article inexistant ou déjà lié.
- Les articles ainsi liés apparaissent en tant que « Cet article est la
traduction de... ». On peut décider de ne plus lier l’article (déplier la
case).
- Si on lie un article appartenant déjà à un groupe de traduction à un
autre groupe déjà existant, les deux groupes de traductions fusionnent.
- Il n’y a pas de vérification de concurrence des langues (par exemple, un
article en français peut être lié à un autre article en français par ce
biais - même si ça n’est vraiment pas fait pour). Je ne sais pas si c’est
vraiment nécessaire (notamment : ça pose de gros problèmes de logique : que
faire en cas de concurrence ?)
- Dans la table, c’est géré très simplement via une colonne supplémentaire
dans « spip_articles » : « id_trad » (qui n’est qu’un chiffre dans l’absolu,
incrémenté par calcul manuel ; il n’y a pas par exemple de table « spip_trad »
où l’on retrouverait ces « id_trad »). Les articles qui sont la traduction
l’un de l’autre ont tout simplement le même numéro de $id_trad. L’avantage
de cette méthode est de simplifier à l’extrême les requêtes (notamment dans
les requêtes construites par les boucles : il n’y a pas besoin d’un table
intermédiaire, on se contente de récupérer le id_trad du contexte).
- Dans les boucles (uniquement de type ARTICLES, puisque seuls les articles
sont ainsi liés), il suffit d’utiliser le critère traduction :<BOUCLE_trad(ARTICLES){traduction}{exclus}>
fournit la liste des articles liés à l’article principal (lui-même
s’excluant). Très très simple donc.
N.B. J’aurais pu utiliser directement id_trad (on peut, mais faut alors
préciser aussi id_trad>0, mais j’ai préféré créer un critère spécifique
(traduction). En effet, c’est nettement plus explicite, et surtout
id_trad pourrait laisser penser à de véritables « groupes » de traduction
(façon id_mot, id_forum...) alors que ça n’est pas le cas : il ne faut
surtout pas essayer de s’amuser à sélection des id_trad (genre id_trad=3)
parce que ça ne rime à rien (sachant que, de plus, pour un article, les
id_trad peuvent changer au cours du temps, notamment lors des fusions de
liens).
Ah oui, dans les menus de sélection de la rubrique (pour sous-rubrique,
article, brève), j’indique les changements de langues. C’est important,
puisque ça conditionne la langue des articles et brèves (surtout si on
n’active pas le choix de langue par article/brève).
Au passage, je signale un changement cosmétique : les boutons qui utilisent
la petite icone « supprimer.gif » adoptent un fond à rayures (noir et orange,
mais très très pale), marquant une action relativement « dangereuse ».
ARNO*