On March 26, 2019 we launched new MODX Forums. Please join us at the new MODX Community Forums.
Subscribe: RSS
  • Bonsoir,
    je ne sais pas si ça pourra servir à quelqu’un mais j’ai pas mal travaillé sur un projet de site bilingue avec modx en me basant sur la méthode qui consiste à duppliquer son site.J’étais un peu gené par le systeme qui consiste à devoir écrire "fr=35,en=67" dans les deux documents pour les lier; ça oblige à un allers retour avec copier coller sur le document d’origine. L’astuce que j’ai utilisé ci-dessous ne vaut bien sur pas pour un site qui gère plus de deux langues.

    Pour faciliter la tache de celui qui doit duppliquer un document je me suis rendu qu’il n’y avait besoin que de remplir un seul champ et une seule fois : il faut marquer dans une variable du document traduit l’id du document original. Cette variable de document sera aussi visible pour la partie française mais il faudra la laisser vide.

    Ensuite on peut à partir du document français numéro 5 facilement retrouver le jumeau anglais : il suffit de lancer un appel de Ditto (avec le filtre permettant de retrouver quel document anglais a une variable de modele ayant pour valeur 5). Dans le document anglais, il suffit de transformer la variable de modele en lien pour fabriquer un lien vers le document français.

    On se sert de ultimate parent pour définir si on est dans la partie française ou anglais et savoir si on affiche le lien grace à ditto ou grâce à la variable de modele.

    EDIT :concernant la traduction des différents snippets et éléments de la page; si la page est complexe ça devient galère d’utiliser simplement le combo "phx/ ultimate parent".
    je pense que le moyen le plus simple est stocker soi meme dans un petit snippet de "configuration" TOUTES les variables qui changent en fonction de la langue.

    - Par exemple l’id du répertoire de news français sera 40; celui des news anglais sera 60.
    - La langue pour afficher Ajaxsearch "francais" ou "english".

    Un snippet du genre :


    <?php
    //on crée le paramaètre variable
    $variable = isset($variable)? $variable:0;

    //on détermine si on se trouve dans la partie anglaise ou française avec ultimateparent
    $id = $modx->runSnippet(’UltimateParent’);

    //J’indique les id des répertoires contenant les deux sites
    $root_fr=82; //dossier du site français
    $root_en=222; //dossier du site anglais

    if($id==$root_fr) //Si on est dans la partie française, valeur des variables :
    {
    $petitmenu=78;//dossier menu 1
    $menuprincipal=117;//dossier menu 2
    $nouvelles=130;//dossier nouvelles
    $searchlang=’francais’; //pour ajaxsearch
    }


    if($id==$root_en) //Si on est dans la partie anglaise, valeur de ces memes variables :
    {
    $petitmenu=235;
    $menuprincipal=246;
    $nouvelles=259;
    $searchlang=’english’;
    }

    if($variable==’petitmenu’) {$output=$petitmenu;}
    if($variable==’menuprincipal’) {$output=$menuprincipal;}
    if($variable==’nouvelles’) {$output=$nouvelles;}
    if($variable==’searchlang’) {$output=$searchlang;}
    return $output;
    ?>

    On insére ensuite ces variables dans les différents appels de snippets du genre

    [!Ditto? &parents=`[!config? &variable=`nouvelles`!]` &depth=`3`!]


    Il y a un surement un moyen plus ingénieux de stocker les variables de langues que de cette manière...

    Autre avantage de la méthode :si pour une raison ou pour une autre lors de la création du site ou de sa maintenance il faut effacer des répertoires; aucune information capitale ne se trouve dans le template : tout ce qui garantit le bon fonctionnement du site bilingue se trouve dans ce fichier.
      [url=http://www.savepoint.fr/index.php?id=38] -petits tuyaux pour les d