Forum CMS Made Simple FR
[Résolu] Cgcalendar:trier les résultats dans le foreach de $events - Version imprimable

+- Forum CMS Made Simple FR (https://forum.cmsmadesimple.fr)
+-- Forum : Général (https://forum.cmsmadesimple.fr/forum-3.html)
+--- Forum : Modules, Tags (https://forum.cmsmadesimple.fr/forum-14.html)
+--- Sujet : [Résolu] Cgcalendar:trier les résultats dans le foreach de $events (/thread-3852.html)



[Résolu] Cgcalendar:trier les résultats dans le foreach de $events - cfra2701 - 31/05/2016

Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 1.12.x
#~ Url du site :
#~ Hébergeur / Soft : OVH
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.12.2
#~ Installed Modules:
#~ CMSMailer: 5.2.14
#~ CMSPrinting: 1.0.5
#~ FileManager: 1.4.5
#~ MenuManager: 1.8.7
#~ MicroTiny: 1.2.9
#~ ModuleManager: 1.5.8
#~ News: 2.15.2
#~ Search: 1.7.13
#~ ThemeManager: 1.1.8
#~ TinyMCE: 2.9.12
#~ FormBuilder: 0.7.3
#~ FormBrowser: 0.4.2
#~ CGSimpleSmarty: 1.10
#~ CGExtensions: 1.53.6
#~ CGCalendar: 1.16.1
#~ Captcha: 0.5.3
#~ Config Information:
#~ php_memory_limit:
#~ process_whole_template:
#~ max_upload_size: 64000000
#~ url_rewriting: mod_rewrite
#~ page_extension: .html
#~ query_var: p
#~ image_manipulation_prog: GD
#~ auto_alias_content: true
#~ locale:
#~ default_encoding: utf-8
#~ admin_encoding: utf-8
#~ set_names: true
#~ Php Information:
#~ phpversion: 5.6.21
#~ md5_function: On (Vrai)
#~ gd_version: 2
#~ tempnam_function: On (Vrai)
#~ magic_quotes_runtime: Off (Faux)
#~ E_STRICT: 2048
#~ E_DEPRECATED: 8192
#~ memory_limit: 512M
#~ max_execution_time: 300
#~ output_buffering: 4096
#~ safe_mode: Off (Faux)
#~ file_uploads: On (Vrai)
#~ post_max_size: 64M
#~ upload_max_filesize: 64M
#~ session_save_path: /tmp (0700)
#~ session_use_cookies: On (Vrai)
#~ xml_function: On (Vrai)
#~ xmlreader_class: On (Vrai)
#~ Server Information:
#~ Server Api: fpm-fcgi
#~ Server Db Type: MySQL (mysqli)
#~ Server Db Version: 5.5.49
#~ Server Db Grants: Impossible de trouver un privilège "GRANT ALL". Cela peut signifier que vous pourriez avoir des problèmes pour installer ou retirer des modules, ou encore l 'ajout et la suppression d'éléments, y compris les pages.
#~ Server Time Diff: Aucune différence de date du système de fichiers trouvées
#~ ----------------------------------------------
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~



Bonjour,
J'utilise le module CGcalendar pur afficher les matches et les entraînements d'un club de basketball.
J'affiche les entraînement du jour et du lendemain en utilisant une comparaison entre $smarty.now et la date de début de l'événement, ce qui marche parfaitement.
Par contre, je n'arrive pas à afficher un message indiquant qu'il n'y a plus d'événements.
Et je sais que c'est parce que ma condition est dans le foreach:
{foreach from=$events key=key item=event}
{if $event.event_date_start|date_format:"%Y-%m-%d" == "tomorrow"|date_format:"%Y-%m-%d"}
Entraînement
{else}
Plus d'entraînement
{/if}
{/foreach}

Si j'ai 15 entraînements au total, dont 2 répondent à la condition, cela va m'afficher 13 fois "Plus d'entraînement" ET c'est logique.
Je cherchais donc une solution comme "WHERE $event.event_date_start = " dans le foreach mais ça ne semble pas exister.
Je suppose donc que je devrais remonter dans le code php du module et créer une requête sql qui fait déjà ce tri? mais je ne sais pas où ni comment.
Ou alors, vous avez peut-être une autre solution...

Merci de toutes façons pour votre aide.

Bonne journée.


[Résolu] Cgcalendar:trier les résultats dans le foreach de $events - jissey - 31/05/2016

Bonjour,
essaie ça :
Code :
[== Indéfini ==]
{$training=0}
{foreach from=$events key=key item=event}
    {if $event.event_date_start|date_format:"%Y-%m-%d" == "tomorrow"|date_format:"%Y-%m-%d"}
      Entraînement
    {$training=1}
    {/if}
{/foreach}
{if !$training}
Plus d'entrainement
{/if}



[Résolu] Cgcalendar:trier les résultats dans le foreach de $events - Jean le Chauve - 31/05/2016

Peut-être souhaites-tu savoir quand on est sur le dernier enregistrement et afficher un message à ce moment ?
Si oui, utilise @last
Code :
{if $event.event_date_start|date_format:"%Y-%m-%d" == "tomorrow"|date_format:"%Y-%m-%d"}
      Entraînement
    {else}
         {if $event@last}Fin des événements{else}Plus d'entraînement{/if}
    {/if}
{/foreach}
Sinon, merci d'être aussi précis dans ta demande que doit l'être un code.


[Résolu] Cgcalendar:trier les résultats dans le foreach de $events - Jean le Chauve - 31/05/2016

Tu as compris tout de suite jissey, ou c'est moi qui devient sénile ?


[Résolu] Cgcalendar:trier les résultats dans le foreach de $events - jissey - 31/05/2016

je crois que oui : il veut savoir si il y a encore un entrainement demain.
C'est pour ça que je propose un drapeau dans la boucle pour détecter si il a répondu au test...


[Résolu] Cgcalendar:trier les résultats dans le foreach de $events - Jean le Chauve - 31/05/2016

Le sénile utiliserait {if !isset($training)} et enlèverait {$training=0} Wink


[Résolu] Cgcalendar:trier les résultats dans le foreach de $events - jissey - 31/05/2016

C'est son droit le plus élémentaire!
Une recette est faite pour être partagée et améliorée Wink


[Résolu] Cgcalendar:trier les résultats dans le foreach de $events - cfra2701 - 01/06/2016

Bonjour,

Je peux vous concéder que ce n'était pas clair, un peu comme mon esprit après des heures de test sur la même ligne de code. Smile

Merci à vous pour votre vivacité et vos réponses. Cela fonctionne maintenant.

Bonne journée à vous tous.


[Résolu] Cgcalendar:trier les résultats dans le foreach de $events - jissey - 01/06/2016

et ça fonctionne comment?
Le but d'un forum n'est pas seulement de se faire aider, mais d'en faire profiter tout le monde :p
Donne nous le code final pour avoir une réponse complète pour ceux qui auront la même problématique que toi!!


[Résolu] Cgcalendar:trier les résultats dans le foreach de $events - cfra2701 - 01/06/2016

Je vais entrer en réunion. Sad
Je vous donne le code juste après


[Résolu] Cgcalendar:trier les résultats dans le foreach de $events - cfra2701 - 01/06/2016

Réunion: Reportée :-)

Voilà le code. Le but était simple, comme vous l'aviez bien résumé, afficher des entraînements du jour + afficher un message "Pas d'entraînement" s'il n'y en a pas ou s'il n'y en a plus.

Le code est celui fourni par le template "Evénements à venir" (orig_upcominglist_template.tpl). J'ai simplement ajouté votre solution.
C'est un site que je fais bénévolement et je commente/traduis toujours les changements apportés pour un éventuel repreneur du site.

Je ne peux malheureusement pas encore vous le montrer à la demande du club

Encore merci pour votre aide

Code :
[== Indéfini ==]
<div class="cal-upcominglist">

{$training=0} /* Initialisation de la variable $training qui va nous permettre de savoir s'il y a des entraînements. Statut actuel: pas d'entraînement */

{foreach from=$events key=key item=event}

{if $event.event_date_start|date_format:"%Y-%m-%d" == $smarty.now|date_format:"%Y-%m-%d"}{*Test pour vérifier s'il y a des entraînements le jour courant. Conservez bien le date_format="%Y-%m-%d"*}

{$training=1}{*Il y au moins 1 entraînement, donc variable $training passe en statut : entraînement aujourd'hui*}

    <div class="calendar-event">
    <div class="training-title">{$event.event_title}</div>

    {if $event.event_date_start == $event.event_date_end || $event.event_date_end == 0}
<div class="date-terrain">
    <div class="calendar-date-from"><span class="calendar-date-title">{$lang.date}: </span>{$event.event_date_start|date_format:'%e %B %Y'} </div>
    {else}
    {if $event.event_date_start|date_format:"%d%m%Y" == $event.event_date_end|date_format:"%d%m%Y"}
<div class="date-terrain">
    <div class="calendar-date-from"><img src="/uploads/images/layout/****.png" width="32" height="16" align="absmiddle" /> &nbsp; de {$event.event_date_start|date_format:'%H:%M'} à {*$lang.to*} {$event.event_date_end|date_format:"%H:%M"}</div>
    
    {/if}
    {/if}
    
      {if isset($event.fields)}{*Récupération des champs supplémentaires: dans quelle salle se donne l'entraînement*}
    <div class="calendar-fields">
      {foreach $event.fields as $fieldname => $fieldrec}
        {*$fieldname*}<!--:&nbsp;--><img src="/uploads/images/layout/****.png" width="32" height="16" aligne="absmiddle" /> &nbsp; {$fieldrec.field_value}<br/>
      {/foreach}
    </div>
  {/if}
</div>
    </div>


{/if}{* Fin du test "entraînement aujourd'hui?" *}
{/foreach}
{if !$training} {*Vérification de l'existence de la variable $training. Sa valeur est-elle = zéro (en d'autres mots, elle n'existe pas) alors pas d'entraînement alors affichage du message*}

Plus d'entrainement aujourd'hui

{/if}
</div>



[Résolu] Cgcalendar:trier les résultats dans le foreach de $events - Jean le Chauve - 01/06/2016

Pourrais-tu éditer le titre de ton message et placer [Résolu] au début de celui-ci ?
Merci Smile