We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 23269
    • 9 Posts
    Bonjour,

    Ja débute sur le MODx alors pas la tête.....
    Voili le problém !

    Le template par défaut de MODx me donne une date de type dd-mm-yyyy en chiffres lipsrsealed. Une date comportant le nom du jour en français, le jour du mois avec une numérotation de 1 à 31, le nom du mois et l’année avec quatre chiffres est tout de même plus élégant. J’ai trouvé la ligne qui génère le code. Elle se trouve dans le fichier docid_1.pageCache.php

    [b]Ligne 59[/b] [!DateTime? &format=`d-M-Y h:i A`!]


    :’( Damned !!!!! ce n’est pas du php. C’est un ou une snippet (fragment in English) si jé bien comprenu le manuel. C’est super ça évite les longues lignes de code. embarrassed Mah! problème pour obtenir une date qui affiche le jour et le mois en français ou autre, il faut avoir recours aux fonctions php setlocale() et strftime() ce qui évite entre autres les substitutions de chaînes à répétition et les pas beaux codes. Question cette "bribe" me permet-elle de lancer un format français. Voici ce que ça donnerait en php. C’est ce que j’ai ajouté dans l’index.php d’un de mes sites sous Joomla. J’utilise %e et %G qui ne marchent pas sous windows, comme c’est bizarre, (voir doc officielle) mais pas de problème sur serveur UNIX.

    <?php
        setlocale(LC_TIME, "fr");
        $today = strftime("%A %e %B %G");
        echo ucfirst("$today");
    ?>


    ucfirst() met une jolie majuscule en début de chaîne donc au jour et on a un truc du type Lundi 18 avril 2006 shocked

    Avec
    %A renvoie le jour dans la langue renvoyée par setlocale()
    %e le numéro du jour numérotation de 1 à 31
    %B renvoie le mois en frances
    et %G l’année en quatre chiffres.

    Alors huh huh huh >:( huh embarrassed :’( comment que j’fé avec la snippet :’(

    Marssssssssi d’avance

    Bonsoir à tous
      • 11975
      • 2,542 Posts
      salut,

      tu peux peut-être t’inspirer de la snippet [[FormatDate]] postée par Guillaume

      http://modxcms.com/forums/index.php/topic,3273.0.html
        Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
        • 23269
        • 9 Posts
        Quote from: heliotrope at Apr 18, 2006, 01:31 PM

        salut,

        tu peux peut-être t’inspirer de la snippet [[FormatDate]] postée par Guillaume

        http://modxcms.com/forums/index.php/topic,3273.0.html

        Merci pour la piste.

        J’ai regardé le code. Grâce à ça je commence à mieux voir comment le CMS est structuré. Je suis habitué à des CMS qui utilisent un php pur avec appel de script ou de fonction. Je vais essayer de proposer un snippet de date non-anglophone donc généralisable. Il suffira en effet de changer la variable de localisation que la fonction setlocale() va renvoyer et le tour est joué. Je ne connais pas encore toutes les variables fondamentales et la structure des fichiers de MODx mais il faut bien commencer.

        Je vais préparer un tuto sur les variables de date en php pour que les non-spécialistes puissent trouver suffisamment de renseignements pour trouver un affichage de date adapté et personnalisable.

        Si j’ai bien compris le principe de la ou du snippet, il y a une partie code php ou autre et un appel de code à insérer directement dans un template ou dans un contenu avec notifications des valeurs qui devront être traitées par le script.

        Bonne nuit les Petits
          • 23269
          • 9 Posts
          Bonjour,

          Pourquoi faire compliqué quand on peut faire très très simple, c’est-à-dire sans rajouter et donc alourdir le code. Si vous voulez une belle date dans la langue de Molière pas la peine d’alourdir le script. Voilà comment que j’ai fait. D’abord trouver le script qui gère la date >:( >:( >:(... après avoir trouvé le bon fichier trouver parmi les 3250 lignes laquelle est la bonne >:( >:( >:( >:( >:(

          Il s’agit en l’occurrence du fichier siteCache.idx.php à partir de la ligne 321. Voici à quoi que ça ressemble :

          $s['DateTime'] = '/**
           * DateTime 
           * Makes a date and time... thingy.
           *
           */
           
          
          if(!isset($timestamp)) {
              $timestamp=time();
          }
          
          return strftime("%d-%m-%Y %H:%M:%S", $timestamp);';
          


          Il faut juste faire deux modifications :
          1/ changer le pas beau format de date de la ligne 332

          return strftime("%d-%m-%Y %H:%M:%S", $timestamp);';


          En local sous Windows %e (numéro du jour du mois avec une numérotation de 1 à 31 et un espace pour les chiffres shocked kiss) et %G (différent de %Y voir question des nombres de semaines) ne sont pas lus... donc pas de surprise si cela ne fonctionne pas en local donc on utilisera %d et %Y en local et %e et %G en ligne sur un bon serveur UNIX.

          Par :

          return strftime("%A %d %B %Y %H:%M:%S", $timestamp);';


          Sur serveur UNIX

          return strftime("%A %e %B %G %H:%M:%S", $timestamp);';


          et là on a quelque chose comme :

          Wednesday 19 April 2006

          Mah !!! ça est de l’anglois !

          Effectivement, il manque quelque chose une information ("locale") qui dise au serveur dans quelle langue afficher les variables de temps. Vous pouvez donc afficher cette commande dans n’importe quelle langue.

          Il faut ajouter à la ligne 326 ceci :

          setlocale(LC_TIME, "fr");


          J’ai insérer ces petites précisions qui peuvent paraître totalement inintéressantes pour un spécialiste pour quatre raisons :

          1/ éviter un codage lourd utilisant un array() avec tous les jours de la semaine et les noms des mois mentionnés et des substitutions de chaînes alors que les fonctions comme setlocale() permettent de faire en une ligne ce qui en exigerait cinq ou six et qui ne sera pas transposable simplement dans une autre langue, il faudra traduire toute la liste des mois et des jours de la semaine.

          2/ setlocale gère toutes les variables locales donc si vous voulez afficher ce code en italien en finnois ou autre il suffit juste de mettre à la place de "fr" la valeur souhaitée, pour l’Italie je crois que c’est "it" etc.

          3/ j’ai perdu beaucoup de temps à trouver comment modifier l’affichage de la date dans un format français avec un code simple

          4/ tout le monde ne passe pas son temps dans les manuels de php ou dans la doc et si je ne m’abuse (pas trop j’espère) parce que je pense qu’un CMS appartient tout autant aux utilisateurs qui veulent diffuser leurs contenus sans s’arracher les cheveux avec le code et il y en a beaucoup, aux designers soucieux d’offrir des sites beaux et ergonomiques qu’aux développeurs proprement dits

          Donc si ça intéresse quelqu’un je n’aurai pas perdu mon temps.

          Si vous voulez que yé fasse oun topo sur l’affichage de la date et les variables de localisation je suis à vos ordres...

          Le Phil
            • 33175
            • 711 Posts
            A ma connaissance, actuellement, setlocale() n’est utile que pour les dates dans Modx. Mais il se peut tout à fait que cette fonction soit utile ailleurs. Il est donc préférable de l’inclure en 1ère ligne du fichier de langue "francais.inc.php".
            L’utilité des snippets est déviter de faire des hacks sur le code original. Le principal argument à ça est pour les mises à jour de Modx. En effet, le jour où tu mettras ta version de Modx à jour (chose qui arrivera tôt ou tard), le snippet devrait fonctionner (à moins qu’il ne s’appuie sur des fonctions "core" de Modx) : la mise à jour sera transparente.
            Dans ton cas, avec le hack, si tu mets à jour Modx, tu devras rechercher à nouveau la fonction voulue et re modifier le code.
            Un autre avantage d’utiliser un snippet est le passage de paramètre : ainsi, les dates peuvent être formattées de différentes manières suivants tes besoins. Sur mon site, j’utilise les dates dans une "sidebar" et en fin de mes billets. Dans la sidebar, comme je dispose de peu de place, la date est en abrégé ; dans les billets, elle est affichée en toute lettre (comme ce que tu souhaites).

            Le snippet FormatDate ne permet pas de mettre la première lettre en majuscules pour une raison toute simple : les dates localisées (avec setlocale) sont renvoyées directement et correctement écrites : en anglais les noms des jours commencent par une majuscules mais en français non. Un autre avantage de mon snippet est la possibilité d’afficher correctement les dates accentuées en UTF-8. A savoir que la fonction strftime() renvoie les dates uniquement en ISO-8859-1, ce que mon snippet corrige automatiquement. (Non, non !! je ne me fais pas de pub !! wink)

            Si tu as besoin de fonctionnalités supplémentaires sur ce snippet, il suffit d’en faire la demande dans le sujet de FormatDate.
              Sorry for my english. I&#39;m french... My dictionary is near me, but it&#39;s only a dictionary !
              • 23269
              • 9 Posts
              Quote from: Guillaume at Apr 19, 2006, 08:54 AM

              A ma connaissance, actuellement, setlocale() n’est utile que pour les dates dans Modx. Mais il se peut tout à fait que cette fonction soit utile ailleurs. Il est donc préférable de l’inclure en 1ère ligne du fichier de langue "francais.inc.php".

              Merci, je vais regarder le script... les autres variables gérées par setlocale peuvent être utiles.

              Quote from: Guillaume at Apr 19, 2006, 08:54 AM

              L’utilité des snippets est déviter de faire des hacks sur le code original. Le principal argument à ça est pour les mises à jour de Modx. En effet, le jour où tu mettras ta version de Modx à jour (chose qui arrivera tôt ou tard), le snippet devrait fonctionner (à moins qu’il ne s’appuie sur des fonctions "core" de Modx) : la mise à jour sera transparente.
              Dans ton cas, avec le hack, si tu mets à jour Modx, tu devras rechercher à nouveau la fonction voulue et re modifier le code.
              Un autre avantage d’utiliser un snippet est le passage de paramètre : ainsi, les dates peuvent être formattées de différentes manières suivants tes besoins. Sur mon site, j’utilise les dates dans une "sidebar" et en fin de mes billets. Dans la sidebar, comme je dispose de peu de place, la date est en abrégé ; dans les billets, elle est affichée en toute lettre (comme ce que tu souhaites).

              Je suis tout à fait séduit par le système même si je n’en maîtrise pas encore toutes les subtilités. Le problème dans ce cas c’est que j’ai déjà une fonction qui est présente, pour éviter un codage sauvage je préfère utiliser ce qui est déjà fait, c’est ce que je tire de la pratique d’une bonne dizaines de systèmes, et apporter de petites touches pour améliorer le code en travaillant et en réfléchissant sur les besoins et la nécessité de garder un code optimisé et si cela s’avère nécesssaire comme dans ton cas proposer une modif substantielle mais optimisée donc cohérente avec l’existant. Le risque c’est la dérive type PHP-Nuke avec un codage qui a fini par rebuter y compris les meilleurs développeurs qui utilisent le système, d’où Maximus, Fuzion, Platinium et j’en passe. Je propose une modif très simple qui évite un array() et qui fait intervenir une fonction de "localisation" des variables mais j’espère que cela pourra être pris en compte dans un cadre de développement plus large. J’ai préféré modifier l’existant pour éviter l’accumulation des modifications le codage anarchique de PHP-Nuke et de phpBB m’a laissé un trop mauvais souvenir.

              Quote from: Guillaume at Apr 19, 2006, 08:54 AM
              Le snippet FormatDate ne permet pas de mettre la première lettre en majuscules pour une raison toute simple : les dates localisées (avec setlocale) sont renvoyées directement et correctement écrites : en anglais les noms des jours commencent par une majuscules mais en français non. Un autre avantage de mon snippet est la possibilité d’afficher correctement les dates accentuées en UTF-8. A savoir que la fonction strftime() renvoie les dates uniquement en ISO-8859-1, ce que mon snippet corrige automatiquement. (Non, non !! je ne me fais pas de pub !! wink

              Effectivement tu ne peux pas échapper à une petite substitution de chaîne personnellement j’utilise ucfirst(), de toute façon strftime() c’est quand même mieux que date() et deux array() un pour les jours et un pour les mois... Mon problème est un peu différent du tien. C’est à la fois un problème de design web : afficher la date de la manière la plus adaptée et la plus élégante possible si nécessaire en introduisant un conteneur <div> ou une classe et permettre un paramétrage avec autre chose que %d-%M-%Y sur un site "littéraire" ou de développement local ça jure un peu. Donc il faudrait peut être réfléchir à un snippet de modifications de ce type de paramètre mais pour l’heure je ne connais pas encore assez bien le système...

              Enchanté de cette discussion

              A bientôt

              Philippe
                • 33175
                • 711 Posts
                Quote from: Phil_le_filou at Apr 19, 2006, 10:44 AM

                et en réfléchissant sur les besoins et la nécessité de garder un code optimisé et si cela s’avère nécesssaire comme dans ton cas proposer une modif substantielle mais optimisée donc cohérente avec l’existant.
                C’est un très bon point de vue. La seule critique que je puisse faire ici, c’est toujours par rapport au mise à jour de l’application principale (Modx). En cas de changement majeur et important, notemment pour la sécurité, il y a toujours un risque (?) de devoir effectuer une mise à jour qui pourrait écraser les hacks.
                Normalement bientôt, il devrait y avoir un "label" "Modx approved" pour les ressources (snippets, plugins, etc...) pour éviter les ressources "plombant" le système. Les ressources approuvées devraient offrir (de mémoire) une documentation claire et un code optimisé. Je ne me souviens plus de tout mais c’est là les principaux arguments pour ce "label".

                Quote from: Phil_le_filou at Apr 19, 2006, 10:44 AM
                de toute façon strftime() c’est quand même mieux que date() et deux array() un pour les jours et un pour les mois...
                C’est sûr ! d’autant plus que date ne permet pas de géréer les dates en français si le serveur est configurer en anglais par défaut : date() n’est pas affectée par setlocale().

                Quote from: Phil_le_filou at Apr 19, 2006, 10:44 AM

                Mon problème est un peu différent du tien. C’est à la fois un problème de design web : afficher la date de la manière la plus adaptée et la plus élégante possible si nécessaire en introduisant un conteneur <div> ou une classe et permettre un paramétrage avec autre chose que %d-%M-%Y sur un site "littéraire" ou de développement local ça jure un peu. Donc il faudrait peut être réfléchir à un snippet de modifications de ce type de paramètre mais pour l’heure je ne connais pas encore assez bien le système...
                D’où l’intérêt des snippets qui utilisent les paramètres. FormatDate permet de formatter la date comme tu le souhaites (la chaine à passer en paramètre est le même que pour strftime()). Rien ne t’empèche d’utiliser un chunk avec un div à l’intérieur et un appel à FormatDate avec les paramètres voulues. Ainsi, si tu souhaites modifier leformat de la date, il suffit juste de modifier les paramètres du snippet dans le chunk. Tu évites ainsi les redondances d’appel au snippet, optimise les modifications du format, gère l’utf-8 et l’iso nativement et évite les hacks. laugh Rien ne t’empèche non plus de faire un hack de FormatDate pour l’adapter à tes besoins.

                Quote from: Phil_le_filou at Apr 19, 2006, 10:44 AM

                Enchanté de cette discussion
                De même smiley

                La communauté francophone de Modx est très active et permet de répondre à pas de problème smiley
                  Sorry for my english. I&#39;m french... My dictionary is near me, but it&#39;s only a dictionary !
                  • 21902
                  • 11 Posts
                  USE iconv(localeCharset,utf8)
                  it’s not a bug this is in server configuration
                    • 23269
                    • 9 Posts
                    Quote from: Nuker at Apr 20, 2006, 06:54 AM

                    USE iconv(localeCharset,utf8)
                    it’s not a bug this is in server configuration

                    Dobry vyecher,

                    This conversion issue is rather concerning Guillaume’s snippet than my poor two lignes code modification to display a correct French date format. I have no personal trouble with charset iso-8859-1 (or 8859-15 to add the euro sign) for Western European languages. I think Guillaume did not say it is a conversion bug. I think he rather prefers to convert a UNICODE charset. I do not agree with him at all but I also think it is an other subject than a pure strftime() displaying concern.

                    do svidaniya

                    Philippe
                      • 33175
                      • 711 Posts
                      The problem is that strftime() return value only in ISO-8859-1. Or, my website use UTF-8 and I need to display date with accent. So, I found a solution : I use utf8_encode if needed.

                      I don’t know why use iconv(). Could you explain it to me please ?

                      Thanks
                        Sorry for my english. I&#39;m french... My dictionary is near me, but it&#39;s only a dictionary !