We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 17422
    • 225 Posts
    Je viens de mettre en place une partie blog sur un site avec modx revo en français

    via ce tuto (http://rtfm.modx.com//display/revolution20/Creating+a+Blog+in+MODx+Revolution)

    quand j’utilise les snippets archivist ou autre, j’ai tjrs la date au format anglais,

    j’aimerai savoir comment passer toutes ces dates en français. et le mois écrit en français

    Merci pour votre aide

    Laurent
    • Salut Laurent,

      la solution que j’utilise est un plugin définissant la locale, se déclanchant sur l’évènement onInitCulture
      if($modx->context->get('key') == "web") {
          setlocale(LC_ALL, 'fr_FR.UTF-8');
      }
      


      Le test en amont sert à ne modifier la locale que dans le contexte souhaité.
      Je pense qu’il y a moyen d’automatiser la chose en récupérant la cultureKey
      $modx->getOption('cultureKey');

      ainsi que le jeu de caractères défini dans MODX, mais n’étant pas au top sur ce sujet, je m’abstiendrais.

      A savoir que si tu as un flux RSS, cela changera également les données et entrainera une non validation de celui-ci. Si quelqu’un a une solution pour ne pas déclancher le plugin sur un ID particulier, je suis preneur…

      En espérant que cela t’aide
        • 28432
        • 372 Posts
        Salut Laurent et Romain,

        la solution que moi j’utilise c’est du des filtres tu récupère avec [[*publishon]] la date de création de ton document et tu filtre avec strtotime:date=`la tes paramètre` pour le format français %d pour le jour en chiffre %b le mois court exemple dec pour descembre %Y pour l’année. En faite tu format comme en php. Voir documentation sur php.net la référence http://php.net/manual/fr/function.date.php

        [[*publishedon:strtotime:date=`%d %b %Y`]]

        si tu dois afficher une date d’un document autres que celui sur lequel tu te trouve remplace * par +

        [[+publishedon:strtotime:date=`%d %b %Y`]]

        En espérant que ça t’aide Laurent A+
          • 36730
          • 63 Posts
          Bonjour !
          Je rejoins ce topic parce que la question m’intéresse justement.
          Je fais déjà ce que tu indiques Steeve, et ça m’affiche quand même la date en anglais (les mois sont en abbréviation anglaise)

          Pour détailler, je fais comme ceci:
          Dans une page j’appelle:
            [[!getResources?   
             &parents=`0`  
             &hideContainers=`1`  
             &tpl=`latestNewsTpl`  
             &limit=`10`  
             &sortby=`editedon`
          ]]


          Ce tpl dans un chunk:

          <p><a href="[[~[[+id]]]]">[[+pagetitle]]</a>
            <br/><span class='discret'>le [[+editedon:modifdate]] à [[+editedon:modifheure]]</span>
          </p>

          // J’ai séparé la date et l’heure pour ajouter le "à" au milieu, ça pouvait probablement se faire autrement mais cette solution me paraissait plus simple pour réutiliser l’affichage de la date ou de l’heure ailleurs (sans avoir la date ET l’heure)

          Le snippet correspondant:
          <?php
          if (!isset($output))
            $output = '_';
          if (empty($pattern))
            $pattern = '%d %b %Y';
          
          if (!empty($input)) {
            $date = strtotime($input);
            $output = strftime($pattern, $date);
            }
            
          return $output;


          J’utilise donc le même schéma que ce que tu recommandes, mais ça ne donne pas le résultat attendu. (je ne retrouve pas le %b dans la page de la fonction date() d’ailleurs)
          Est-ce que quelqu’un aurait une piste ?
          Merci
            • 36404
            • 307 Posts
            Salut,

            au cas où ça pourrait servir à qque chose, perso, je le fais sauvage, comme ça...
            je crée un snippet que j’appelle dateFr par ex
            <?php
            function moisAff($mois) {
            	switch ($mois)
            	{
            		case ("01") : $moisaff = "Janvier";   break;
            		case ("02") : $moisaff = "Février";   break;
            		case ("03") : $moisaff = "Mars";      break;
            		case ("04") : $moisaff = "Avril";     break;
            		case ("05") : $moisaff = "Mai";       break;
            		case ("06") : $moisaff = "Juin";      break;
            		case ("07") : $moisaff = "Juillet";   break;
            		case ("08") : $moisaff = "Août";      break;
            		case ("09") : $moisaff = "Septembre"; break;
            		case ("10") : $moisaff = "Octobre";   break;
            		case ("11") : $moisaff = "Novembre";  break;
            		case ("12") : $moisaff = "Décembre";  break;
            	}
            	return $moisaff;
            }
            
            $zidate = isset($zidate) ? $zidate : "";
            if ($zidate == "") return "";
            else
            {
                $day   = date('d', $zidate);
                $month = moisAff(date('m', $zidate));
                $year  = date('Y', $zidate);
                return "$day $month $year"; 
            }
            ?>

            (en fait, le plus souvent, la function moisAff est dans un fichier de functions que je stocke dans le dossier snippets et que je vais chercher avec
            require_once(MODX_BASE_PATH."assets/snippets/functions/functions.php");

            mais bon, ça marche comme ça bien sûr)
            et, partout où j’ai besoin de la date en français il ne me reste plus qu’à faire
            [[dateFr? &zidate=`pubdate`]]

            par ex

            du coup, histoire de simplifier l’affaire, bien sûr si je crée une TV date, j’utilise le widget unixtime

            hope it helps
            Have swing
              réfléchir avant d'agir
              • 36730
              • 63 Posts
              Je pense que je vais tenter avec quelque chose comme ça, parce que je n’avais pas très envie d’afficher la date uniquement en nombres.
              Merci

              Enfin s’il y a une option à envoyer ou une fonction déjà existante dans PHP pour faire la même chose ça m’intéresse toujours smiley
                • 36730
                • 63 Posts
                Bon, à mon tour de donner ma solution:
                J’ai donc un appel à getRessources dont le template est un chunk, dans lequel on trouve
                [[+editedon:modifdate]]


                modifdate est donc un snippet dont le contenu est le suivant:
                <?php
                $input = isset($input) ? $input : "";
                
                if ($input == "") return "";
                else
                {
                	$jour = strftime('%d', strtotime($input));
                	$mois = strftime('%m', strtotime($input));
                	switch ($mois)
                	{
                		case ("01") : $moistxt = "Jan";    break;
                		case ("02") : $moistxt = "Fév";    break;
                		case ("03") : $moistxt = "Mars";  break;
                		case ("04") : $moistxt = "Avr";    break;
                		case ("05") : $moistxt = "Mai";    break;
                		case ("06") : $moistxt = "Juin";  break;
                		case ("07") : $moistxt = "Juil";  break;
                		case ("08") : $moistxt = "Août";  break;
                		case ("09") : $moistxt = "Sept";  break;
                		case ("10") : $moistxt = "Oct";    break;
                		case ("11") : $moistxt = "Nov";    break;
                		case ("12") : $moistxt = "Déc";    break;
                		}
                	$annee  = strftime('%Y', strtotime($input));
                return "$jour $moistxt $annee";
                }
                ?>
                


                J’ai découvert en testant que mettre une déclaration de fonction php dans un snippet ModX ne fonctionne pas (alors que ce même code dans une page php en dehors fonctionne. La seule solution pour déclarer une fonction c’est de passer par un fichier externe comme virtualgadjo (je n’ai pas bien compris comment il fait, mais ce n’est pas grave)
                Et vu que je n’ai pas la même entrée du format de date (là non plus je ne sais pas pourquoi) ceci
                date('d', $zidate);
                ne fonctionne pas chez moi, je n’obtenais pas d’erreur mais une mauvaise valeur

                En tout cas, ça fonctionne, et je suis content :] Un problème de résolu
                  • 36404
                  • 307 Posts
                  Salut Epy smiley

                  je pense pouvoir répondre à tes deux questions
                  - le format de date, probablement parce que je pars de timestamps unix là où tu pars de date au format datetime (ou timestamp mysql)
                  perso, je suis dans Evolution (Evo stocke les dates en timestamp, Revo, vérification faite, en datetime), j’ai abandonné Revo, beaucoup trop lent en front, j’y reviendrai assurément mais quand le front ne souffrira plus de lenteur chronique (je ne sais pas à quoi c’est dû mais un même script d’animation front dans Evo et Revo, c’est le jour et la nuit...)

                  - pour le comment je fais avec les fonctions (en réalité, ça marche de déclarer un fonction dans un snippet... à condition de n’utiliser qu’une fois le snippet dans la page, ce n’est pas propre à MODx, le fait est qu’on ne peut/doit pas redéclarer un fonction déjà déclarée dans une page, fais un test en raw php, il te fera la même que MODx smiley)
                  du coup (syntaxe evo, sorry), je trimballe un fichiers de fonctions qui me servent souvent, fichier que j’appelle... functions.php et que je colle dans un dossier... functions lui-même dans le dossier assets/snippets et, quand j’en ai besoin, que ce soit dans un module, un snippet ou autre, je fais
                  require_once(MODX_BASE_PATH."assets/snippets/functions/functions.php");

                  dans mon snippet par ex pour aller le chercher et le tour est joué
                  tu remarqueras d’ailleurs le require_once justement pour éviter la redéclaration des fonctions stockées si on includait le fichier à chaque appel du snippet

                  du coup, pour en revenir à cette histoire de dates, dans Revo, il faut juste ajouter un ligne à mon snippet pour qu’il prenne le format datetime
                  <?php
                  function moisAff($mois) {
                  	switch ($mois)
                  	{
                  		case ("01") : $moisaff = "Janvier";   break;
                  		case ("02") : $moisaff = "Février";   break;
                  		case ("03") : $moisaff = "Mars";      break;
                  		case ("04") : $moisaff = "Avril";     break;
                  		case ("05") : $moisaff = "Mai";       break;
                  		case ("06") : $moisaff = "Juin";      break;
                  		case ("07") : $moisaff = "Juillet";   break;
                  		case ("08") : $moisaff = "Août";      break;
                  		case ("09") : $moisaff = "Septembre"; break;
                  		case ("10") : $moisaff = "Octobre";   break;
                  		case ("11") : $moisaff = "Novembre";  break;
                  		case ("12") : $moisaff = "Décembre";  break;
                  	}
                  	return $moisaff;
                  }
                  
                  $zidate = isset($zidate) ? $zidate : "";
                  if ($zidate == "") return;
                  else
                  {
                      $zidate = strtotime($zidate); //pour mettre la date au format timestamp Unix
                      $day    = date('d', $zidate);
                      $month  = moisAff(date('m', $zidate));
                      $year   = date('Y', $zidate);
                      return "$day $month $year"; 
                  }
                  ?>

                  la fonction étant donc comme tu le soulignes justement à aller plutôt déclarer dans un fichier externe ou, sinon, à utiliser comme tu le fais directement dans le script sans en faire une function

                  voilou, amuse-toi bien smiley

                  Have swing
                    réfléchir avant d'agir
                    • 36730
                    • 63 Posts
                    Quote from: virtualgadjo at Apr 25, 2011, 06:27 AM

                    je pense pouvoir répondre à tes deux questions
                    - le format de date, probablement parce que je pars de timestamps unix là où tu pars de date au format datetime (ou timestamp mysql)
                    perso, je suis dans Evolution (Evo stocke les dates en timestamp, Revo, vérification faite, en datetime), j’ai abandonné Revo, beaucoup trop lent en front, j’y reviendrai assurément mais quand le front ne souffrira plus de lenteur chronique (je ne sais pas à quoi c’est dû mais un même script d’animation front dans Evo et Revo, c’est le jour et la nuit...)
                    Oui en effet pour les dates, merci.
                    J’ai aussi remarqué que c’était lent, je n’ai pourtant aucun javascript sauf peut être le compteur de visites. Mais ça n’était pas beaucoup plus rapide sur Evo et j’aime bien les fonctions apportées dans Revo
                    J’espère aussi que les développeurs pourront donner des vitamines à la tortue ^_^

                    - pour le comment je fais avec les fonctions (en réalité, ça marche de déclarer un fonction dans un snippet... à condition de n’utiliser qu’une fois le snippet dans la page, ce n’est pas propre à MODx, le fait est qu’on ne peut/doit pas redéclarer un fonction déjà déclarée dans une page, fais un test en raw php, il te fera la même que MODx smiley)
                    Ah mais oui !!! shocked Je le savais, j’ai de nombreuses fois fait l’erreur lors de mon apprentissage, toujours en cours d’ailleurs, et j’avais oublié. Mon test hors modx ne reproduisait pas ce cas de figure évidemment. :$

                    du coup (syntaxe evo, sorry), je trimballe un fichiers de fonctions qui me servent souvent, fichier que j’appelle... functions.php et que je colle dans un dossier... functions lui-même dans le dossier assets/snippets et, quand j’en ai besoin, que ce soit dans un module, un snippet ou autre, je fais
                    require_once(MODX_BASE_PATH."assets/snippets/functions/functions.php");

                    dans mon snippet par ex pour aller le chercher et le tour est joué
                    tu remarqueras d’ailleurs le require_once justement pour éviter la redéclaration des fonctions stockées si on includait le fichier à chaque appel du snippet

                    du coup, pour en revenir à cette histoire de dates, dans Revo, il faut juste ajouter un ligne à mon snippet pour qu’il prenne le format datetime
                    <?php
                    function moisAff($mois) {
                    	switch ($mois)
                    	{
                    		case ("01") : $moisaff = "Janvier";   break;
                    		case ("02") : $moisaff = "Février";   break;
                    		case ("03") : $moisaff = "Mars";      break;
                    		case ("04") : $moisaff = "Avril";     break;
                    		case ("05") : $moisaff = "Mai";       break;
                    		case ("06") : $moisaff = "Juin";      break;
                    		case ("07") : $moisaff = "Juillet";   break;
                    		case ("08") : $moisaff = "Août";      break;
                    		case ("09") : $moisaff = "Septembre"; break;
                    		case ("10") : $moisaff = "Octobre";   break;
                    		case ("11") : $moisaff = "Novembre";  break;
                    		case ("12") : $moisaff = "Décembre";  break;
                    	}
                    	return $moisaff;
                    }
                    
                    $zidate = isset($zidate) ? $zidate : "";
                    if ($zidate == "") return;
                    else
                    {
                        $zidate = strtotime($zidate); //pour mettre la date au format timestamp Unix
                        $day    = date('d', $zidate);
                        $month  = moisAff(date('m', $zidate));
                        $year   = date('Y', $zidate);
                        return "$day $month $year"; 
                    }
                    ?>

                    la fonction étant donc comme tu le soulignes justement à aller plutôt déclarer dans un fichier externe ou, sinon, à utiliser comme tu le fais directement dans le script sans en faire une function

                    voilou, amuse-toi bien smiley

                    Have swing

                    Merci beaucoup pour tes réponses !
                    Je me suis bien amusé, jusqu’à 2h du mat laugh, sur d’autres fonctions que j’ai réussi à faire marcher d’ailleurs \O/
                      • 36404
                      • 307 Posts
                      :) t’inquiète, celui qui prétend ne pas être toujours en mode apprentissage est ou un menteur ou un gros fainéant ! smiley c’est d’ailleurs ce qui fait que pour une fois, je fais un métier depuis plus de 10 ans, apprendre entretient ma cervelle confite dans le whisky...

                      Pour ce qui est de Revo et sa lenteur, j’avoue ne pas comprendre le pourquoi du truc puisqu’une fois une page servie peu importe cms ou pas et donc à fortiori la version de cms, la bête devrait être gérée par la machine utilisateur. Une lenteur à servir la page peut se comprendre par la complexité des requètes (pas bon signe, ça fait un peu drupal like mais bon, à la limite compréhensible)

                      mais là, perso, je suis un mootoolsien fou et le constat est flagrant, j’avais refais mon site perso dans Revo et les scripts tournaient comme s’ils étaient dans netscape 4 de la belle époque..., de guerre lasse, je suis en train de le refaire dans Evo, sans rien changer aux scripts mais en ayant au contraire alourdi à mort les pages avec du syntax highlight à haute dose + YAMS pour le faire en 2 langues (ça m’a pris comme ça...) et il va falloir que je ralentisse les scripts d’animation (c’est bien sûr dans les options...) tellement ça carbure.
                      Incompréhensible pour moi je l’avoue mais vraiment flagrant, si ça t’amuse de voir des pavés tourner à toute vitesse
                      www.virtual-gadjo.com
                      pour le moment squelettique, je n’ai pas trop le temps de jouer avec pour tout remettre mais le peu qui est en ligne parle de soi-même smiley

                      bonne journée à toi et continue de t’amuser avec les fonctions, je retourne faire la même smiley

                      Have swing
                        réfléchir avant d'agir