[Résolu] Cgcalendar:trier les résultats dans le foreach de $events

Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
#1
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.
#1
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.
#2
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}
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
#2
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}
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
#3
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.
#3
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.
#4
Tu as compris tout de suite jissey, ou c'est moi qui devient sénile ?
#4
Tu as compris tout de suite jissey, ou c'est moi qui devient sénile ?
#5
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...
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
#5
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...
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
#6
Le sénile utiliserait {if !isset($training)} et enlèverait {$training=0} Wink
#6
Le sénile utiliserait {if !isset($training)} et enlèverait {$training=0} Wink
#7
C'est son droit le plus élémentaire!
Une recette est faite pour être partagée et améliorée Wink
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
#7
C'est son droit le plus élémentaire!
Une recette est faite pour être partagée et améliorée Wink
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
#8
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.
#8
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.
#9
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!!
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
#9
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!!
{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
#10
Je vais entrer en réunion. Sad
Je vous donne le code juste après
#10
Je vais entrer en réunion. Sad
Je vous donne le code juste après
#11
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>
#11
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>
#12
Pourrais-tu éditer le titre de ton message et placer [Résolu] au début de celui-ci ?
Merci Smile
#12
Pourrais-tu éditer le titre de ton message et placer [Résolu] au début de celui-ci ?
Merci Smile


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)