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*