Afficher les articles dans un sommaire multilingue

Voici un problème qui revient souvent dans un site multilingue. Comment fournir un sommaire riche qui ne soit pas juste une liste de langue mais reflette aussi la vie du site.

Le sommaire multilingue

Il y a un grand nombre de façons de faire un site multilingue qui se séparent en deux grands groupes :

  1. les sites séparés en secteurs par langue
  2. les sites mixtes

Dans les deux cas le sommaire est souvent un problème, dans le premier cas on peut toujours juste afficher une liste de langues qui va rediriger vers les secteurs de langue. Les sommaires de chaque langue étant la page du secteur. Mais ce sommaire initial, où tous les visiteurs qui n’ont pas encore choisi de langue arrivent, ne reflète pas beaucoup le site et peut tout simplement repousser les visiteurs.

Il serait bien plus agréable pour le visiteur de voir une partie de la vie du site quand il arrive sur le sommaire. Mais alors quelle langue afficher ? Il n’y a pas de raison de privilégier un langue, en particulier, quand on chaque langue offre des articles différents.

L’idéal est donc de faire une boucle sur tous les derniers articles. Mais si des articles sont traduits dans plusieurs langues, alors on risque d’avoir des problèmes de doublons. Et un simple critère {doublons} ne nous sauvera pas ici puisque chaque traduction est un article différent.

Afficher les articles sans doublons

Il faut donc faire une boucle un peu plus complexe. La combinaison de boucles donnée plus bas s’inspire du code fournis sur le wiki ainsi que d’une première contrib un peu obsolète maintenant.

Ces boucles ont pour but de :

  1. lister les articles de préférence soit :
    • dans la langue choisi par l’utilisateur avec #MENU_LANG s’il l’a fait
    • dans la langue par défaut du site (fixée à la configuration)
  2. lister les articles qui n’existent pas dans cette langue dans leur langue d’origine
  3. exclure les doublons due aux traductions

On veut afficher tous les articles dans la langue choisie.
On exclut donc tous les articles qui sont des traductions de ces articles, grâce au doublons exclustrad.

	<BOUCLE_lang_choisie(ARTICLES) {lang} {doublons prefere}>
 	<BOUCLE_exclus_trad(ARTICLES) {doublons exclustrad} {traduction} {exclus}> </BOUCLE_exclus_trad>
 	</BOUCLE_lang_choisie>

Pour les articles qui restent (ceux qui ne sont pas dans le doublon prefere), on ne veut pas afficher les traductions. On veut juste l’article dans sa langue d’origine. On exlut donc les traductions des articles d’origines qui ne sont pas des articles dans la langue choisie avec le doublons exclustrad.

 	<BOUCLE_lang_origine(ARTICLES) {origine_traduction} {doublons prefere}><BOUCLE_exclus_trad2(ARTICLES)  {doublons prefere} {doublons exclustrad} {traduction} {exclus}
 	> </BOUCLE_exclus_trad2>
 	</BOUCLE_lang_origine>
 

On peut maintenant afficher les articles qui n’ont pas été exlus plus tôt dans le doublon exclustrad :

 	<B_derniers_articles>
 	<ul>
 	<BOUCLE_derniers_articles(ARTICLES) {par date} {inverse} {doublons exclustrad}>
 	<li>
 	                [(#LOGO_ARTICLE_RUBRIQUE|right||reduire_image{200,200})]
 	                [<span class="surtitre">(#SURTITRE)</span>]
 	                <span class="titre-extrait">&#91;#LANG&#93; <a href="#URL_ARTICLE">[(#TITRE|supprimer_numero)]</a></span>
 	                [<span class="surtitre">(#SOUSTITRE)</span>]
 	                <span class="detail">
 	                [(#DATE|nom_jour)] [(#DATE|affdate)]
 	                [<:par_auteur:>#LESAUTEURS)]
 	                </span>
 	                [<span class="texte">(#INTRODUCTION)</span>]
 	</li>
 	</BOUCLE_derniers_articles>
 	</ul>
 	</B_derniers_articles>

Remarque :
-  le code de l’affichage n’est là qu’à titre indicatif, on peut mettre ce que l’on veut
-  on peut ajouter des critères à la boucle pour afficher moins d’articles. Il faut alors penser à ajouter ces critères aux boucles _lang_choisie et _lang_origine sans les critères de limitation du nombre.

Discussion

4 discussions

  • angedavid

    Bonjour,

    Ce sujet m’intéresse beaucoup mais je ne sais pas ou coller ce code...
    désolé pour ma naïveté mais je débute !
    Merci

    Répondre à ce message

  • Bonjour,

    On dirait que c’est exactement ce que je veux faire...mais je ne suis vraiment pas habile avec le code !
    Oú est-ce que je dois coller ce code ? Dans quel fichier ? Je viens d’installer un Spip 2.0

    Merci de votre aide
    Ange

    Répondre à ce message

  • charliejo

    Bonjour,
    J’ai recopié le code et cela ne fonctionne pas.
    J’ai un article en anglais et français... et il apparait 2 fois....
    A moins que je me sois trompé... j’ai collé les 3 bouts de codes à la suite ????
    Merci

    Répondre à ce message

  • 1

    Bonjour,

    J’ai utilise cette contribution et elle fonctionne correctement si dans la Boucle_exclu_trad2, le critere doublon prefere est retire.

    En effet, la contribution actuelle fourni plusieurs traductions d’un meme article si l’article n’a pas de traduction dans la langue choisie.

    Grand merci.

    Michel

    • L’information ci-dessus est incorrecte.
      L’ordre des conditions dand la boucle est primordiale. La contribution est parfaitement juste.
      Mille excuses.
      Michel

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom