Module menu restaurant

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Module menu restaurant

    Bonjour à tous,
    J'ai créer un module pour afficher le menu du jour d'un restaurant...
    Jusqu'ici, tout vas bien...
    Tout fonctionne, mais plutôt que faire un champ texte pour entre la date sous la forme "Lundi 1 janvier 1990" je voulais utiliser le champ "calendar"...
    Pour ca, je formate mon champ de cette façon : format="%A %d %B %Y" ce qui donne exactement le résultat escompté jusqu'au moment ou... j'enregistre...
    La, toute la page bug (plus d'affichage des menu de joomla, uniquement la page d'accueil du module" et lorsque je retourne dans la liste des modules, un message s'affiche "Alerte Champ requis: Renseignez une date"
    Je ne comprends pas l'erreur qui est la suivante :
    Erreur: 0 DateTime::__construct(): Failed to parse time string (Mardi Avril 2019) at position 0 (M): The timezone could not be found in the database
    Auriez vous une idée?
    Voici le code complet du champ :
    Code:
    [I]<field name="menuDate" type="calendar" default="" label="Renseignez une date" description="" class="input-medium" required="true" filter="user_utc" format="%A %d %B %Y" showtime="false" todaybutton="false" filltable="false" translateformat="false" />[/I]
    A priori, il semblerait que le format de la date que je lui propose, à savoir "%A %d %B %Y" soit la source du problème, mais je ne vois pas la solution...
    Quelqu'un aurait il une idée?
    Dernière édition par Darkhan à 29/04/2019, 15h15

  • #2
    Il y a une difference entre l'utilisation du champ "calendar" pour entrer une date dans la base de données et l'affichage du résultat du dit champ.

    Exemple pour la date de création d'un article.

    Code:
            <field
                name="created"
                type="calendar"
                label="COM_CONTENT_FIELD_CREATED_LABEL"
                description="COM_CONTENT_FIELD_CREATED_DESC"
                translateformat="true"
                showtime="true"
                size="22"
                filter="user_utc"
            />
    affichera la date DANS le calendrier selon le format défini dans la string de langue, exemple pour fr-FR:
    Code:
    DATE_FORMAT_CALENDAR_DATE="%d-%m-%Y"
    DATE_FORMAT_CALENDAR_DATETIME="%d-%m-%Y %H:%M:%S" // si showtime est true
    soit:
    Code:
    29-04-2019 06:00:08

    Sera sauvegardé dans la db sous le format UNIX, quel que soit l'ordre jour mois année sous la forme
    2019-04-29 06:00:08
    Les formats utilisables (voir https://www.php.net/manual/fr/function.strftime.php ) ne peuvent être que numériques.
    cad pour le jour: %d ou %e, pour le mois %m, pour l'année %y ou %Y

    Son affichage dépendra du format défini dans le template:
    Code:
    JHtml::_('date', $displayData['item']->created, JText::_('DATE_FORMAT_LC3'))
    ici
    Code:
    DATE_FORMAT_LC3="j F Y"
    cad en utilisant les formats php ( voir https://www.php.net/manual/fr/function.date.php )
    ici "29 avril 2019"
    Jean-Marie Simonet / infograf768
    Joomla co-fondateur.
    Sauf demande explicite de ma part, merci de ne pas utiliser de Message Privé pour poser des questions. Le forum est là pour ça.

    Commentaire


    • #3
      Bonjour infograf768 et merci pour cette réponse!
      Si je comprends bien, le champ "calendar" doit rester à un format standard "%Y-m%-d%" et être enregistrer sous cette forme en BDD sinon, celle-ci ne comprend pas le format de l'enregistrement, d'où les messages d'erreur que j'ai...
      C'est donc coté template qu'il faut modifier l'affichage, mais nous parlons bien ici du template "module" et non du template "site"!?
      Il faut donc, si j'ai bien tout compris, que dans mon fichier default.php de mon module, je prévois en amont de mon affichage la modification...
      J'ai donc codé ceci coté template !
      Code HTML:
      <?php
      $today3 = $params->get('madate');
      setlocale(LC_TIME, 'fr', 'fr_FR', 'fr_FR.ISO8859-1');   
      $today2 = strftime("%A %d %B %Y",strtotime("$today3"));
      ?>
      Ce qui m'affiche exactement le format que je désire... sauf que... j'ai un jour de retard à l'affichage alors que coté backoffice, la date est juste...
      Là encore...
      Dernière édition par Darkhan à 30/04/2019, 11h12

      Commentaire


      • #4
        Bon, j'ai résolu mon problème... mon jour de retard était du a la fonction
        Code HTML:
        filter="user_utc"
        J'ai viré le filtre et tout est rentré dans l'ordre...
        Tout va bien
        Dernière édition par Darkhan à 30/04/2019, 14h22

        Commentaire


        • #5
          Envoyé par Darkhan Voir le message
          Bonjour infograf768 et merci pour cette réponse!
          Si je comprends bien, le champ "calendar" doit rester à un format standard "%Y-m%-d%" et être enregistrer sous cette forme en BDD sinon, celle-ci ne comprend pas le format de l'enregistrement, d'où les messages d'erreur que j'ai...
          Non, il peut-être %d-%m-%Y, dans le xml du formulaire, mais ce sera l'affichage rendu par JQuery lors de la sélection de la date dans le calendrier.
          Ceci devant permettre aussi une saisie directe au clavier au format Français

          Mais avec translateformat="true" et sans forcer le format cela doit se faire tout seul normalement.

          Mais on parle bien là du champ date dans le formulaire de saisie.

          Voir : https://docs.joomla.org/Calendar_form_field_type/fr

          Lors d'un affichage simple dans une vue ou un module (donc sans saisie) là tu dois utiliser:
          JHtml::_('date', $nom_de_la_variable_date_a_afficher, $format_d_affichage) Et là tu peux mettre un format pour avoir éventuellement le jour et la mois en clair du type mardi 3 décembre xxxx Ceci comme te l'a très bien expliqué infograf768 dans sa réponse ci-dessus décembre.

          Concernant le décalage 1 jour c'est surprenant.
          Le framework stocke les heures en UTC, voir https://ordi-genie.com/joomla/develo...-et-les-heures
          Mais c'est 2 heures pas 1 jour de décalage... sauf si tu n'es pas en France ou que tu as fait test test entre 0H et 2H du matin (ce qui te ramène à la veille entre 22H et 24H) (si je ne me trompe pas entre l'heure d'été et d'hivers).

          Pour l'internationalisation, il est conseillé de respecter ce système et de stocker tes dates et datetimes en UTC.

          Pour l'affichage et la conversion selon la timezone du user courant tu peux aussi utiliser :
          Code PHP:
          $result JHtml::date($ma_date$le_format_voulu
          avec un
          Code PHP:
          use Joomla\CMS\HTML\HTMLHelper as JHtml
          au début de ton code pour être compatible Joomla 4.

          Voir /librairies/src/HTML/HTMLHelper.php ligne 782 qui te donnera les paramètres de la fonction :
          Code PHP:
              /**
               * Returns formated date according to a given format and time zone.
               *
               * @param   string   $input      String in a format accepted by date(), defaults to "now".
               * @param   string   $format     The date format specification string (see {@link PHP_MANUAL#date}).
               * @param   mixed    $tz         Time zone to be used for the date.  Special cases: boolean true for user
               *                               setting, boolean false for server setting.
               * @param   boolean  $gregorian  True to use Gregorian calendar.
               *
               * @return  string    A date translated by the given format and time zone.
               *
               * @see     strftime
               * @since   1.5
               */
              
          public static function date($input 'now'$format null$tz true$gregorian false)
              {
          .... 
          Dernière édition par roland_d_alsace à 30/04/2019, 15h30
          A tous les utilisateurs de Joomla du très Grand Est de la France et du Jura suisse
          Rejoignez le Joomla Users Groupe Alsace...
          roland_d_alsace va-t-il devenir roland_du_grand_est ?

          Commentaire

          Annonce

          Réduire
          Aucune annonce pour le moment.

          Partenaire de l'association

          Réduire

          Hébergeur Web PlanetHoster
          Travaille ...
          X