Sujet fermé
Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

[RESOLU] CGCalendar 2.1.3 et vue FullCalendar-
#1

Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 2.1.3
#~ Url du site :
#~ Hébergeur / Soft :
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~


Bonjour,

j'utilise CGcalendar dans sa dernière mouture. Tout fonctionne comme attendu. Un détail me pose problème cependant:

L'insertion par défaut avec la vue FullCalendar fonctionne bien (bon, ça oblige à charger une sacré morceau de script mais...).
Par contre je cherche à ce que je ne perde pas le "mois de l'événement" lorsque je consulte le détail d'un événement donné.
Je m'explique : si je clique sur un événement qui aura lieu disons en octobre 2016, pas de souci, celui-ci s'affiche bien mais au rechargement de la page (page de "détail" appelée), ma vue FullCalendar reprend ses valeur par défaut et donc retour au mois actuel.

Dans le temps, on pouvait utiliser use_session pour pallier le truc avec la vue "Calendar", mais avec FullCalendar, cela ne fonctionne pas (c'est normal, c'est pas prévu...).
J'ai trouvé un semblant de solution sur stackoverflow un peu genre bazooka pour....
Utiliser les cookies pour stocker la date de l'événement et récupérer ça au chargement de la page ce qui signifie:
Encore ajouter un script supplémentaire pour les cookies....

Jai du mal à le faire fonctionner, voici le code suggéré:
Code :
[== Indéfini ==]
defaultView: Cookies.get('fullCalendarCurrentView') || 'month',
defaultDate: Cookies.get('fullCalendarCurrentDate') || null,
viewRender: function(view) {
  Cookies.set('fullCalendarCurrentView', view.name, {path: ''});
  Cookies.set('fullCalendarCurrentDate', view.intervalStart.format(), {path: ''});
}

Bon à la rigueur cela devrait être le fonctionnement attendu à l'initial.
Les gabarits de calendrier sont passés dans la gestion du design et Robert a fait un sacré ménage. Rome ne s'est pas... après tout.

FullCalendar, c'est bien....mais on ajoute encore une couche, un niveau de complexité, des problèmes éventuels avec certains navigateurs.(problèmes de DOM etc...).
J'aime bien Jquery, javascript,Ajax lorsqu'il s'agit de mettre en œuvre ce que j'appellerai des "fonctionnalités secondaires" (les âmes chagrines me diront qu'aujourd'hui 99.3% des menus.... elles n'ont pas tort) mais je ne suis pas bien certain qu'une mise en œuvre trop généreuse participe à la solidité de la plateforme.

Win 10 pro 64 - CMSMS 2.2.19 - grincheux parfois...
#2

Hello,

si c'est dans la vue de détail d'un évènement, et que tu veux afficher le fullCalendar pour le mois de l'évènement dont le détail est en cours, tu peux aussi récupérer ce mois-ci depuis l'objet Smarty et l'utiliser dans le JS de CGCalendar je pense.

Sinon comme dit, avec un cookie ... ou encore avec un passage de paramètre dans l'URL mais bon, c'est pas très beau Wink
#3

Hello,

Merci pour la piste ! Bon c'est fait comme je ne suis pas très à l'aise avec cette partie je livre le fruit de mes maigres cogitations. N'hésitez pas à corriger les erreurs ! Smile

Premier boulot connaître la variable qui est utilisée par fullCalendar pour l'affichage du calendrier à une date donnée, ici Google est notre ami :
Code :
[== Indéfini ==]
defaultDate

Bon ensuite dans le gabarit de détail va falloir récupérer la date de l'événement puis la mettre au bon format:
Donc dans le gabarit "CGCalendar Event View Sample", gabarit de type event view on récupère la date et on l'assigne:
Code :
[== Indéfini ==]
{assign var="dateretenue" value=$event.event_date_start|date_format: '%Y-%m-%d' scope="global"}


Reste plus qu'à récupérer le truc dans le gabarit FullCalendar:
Pour ça il faut se souvenir que la variable est accessible directement dans la partie "head" du template mais pas dans la partie "body" qui contient l'appel de la vue FullCalendar.
Donc juste après le tag body on va rajouter :
Code :
[== Indéfini ==]
{content assign='moncontenu'}

et ne pas oublier de remplacer un peu plus loin dans le gabarit de page {content} par {$moncontenu}

Voilà, la fin est presque triviale:
On ouvre le gabarit "CGCalendar FullCalendar View Sample" et on rajoute la ligne suivante:
Code :
[== Indéfini ==]
defaultDate: "{if (isset($dateretenue))}{$dateretenue}{else}{current_date|date_format:'%Y-%m-%d'}{/if}",

dans l'appel pour l'initialisation du calendrier. (on fait un peu attention à la virgule qui traîne à la fin)

That's all folks ! Smile

Merci encore à Mathieu pour "la bonne piste" Smile

Win 10 pro 64 - CMSMS 2.2.19 - grincheux parfois...
#4

Bien joué Wink Merci pour le tuto, cela servira à d'autres. Peux-tu marquer le sujet en [Résolu] ? Merci


Petites précisions relatives à Smarty - entre :

Code :
{assign var="dateretenue"}

et

Code :
{assign var='dateretenue'}

Toujours utiliser la seconde avec les simples quotes - les double quotes sont là pour interpréter du code et cela prend plus de temps inutilement. Par exemple quand vous voulez générer une variable à partir d'une variable ou d'une sortie de plugin.

Exemple où les double quotes sont nécessaires :

Code :
{assign var='test_url' value="{root_url}/mapage"}


Enfin, si on assigne une balise {content}, {content_module} ou {content_image} à une variable, il faut préciser "nocache" lors de l'affichage :

Code :
{$moncontenu nocache}

Ceci dans le cas où le cache est activé - ce que nous vous conseillons Wink

Plus d'infos sur la gestion du cache : http://docs.cmsmadesimple.org/general-in...g-in-cmsms
#5

Merci pour les précisions et corrections ! Smile
J'avais pas vu passer les infos sur la gestion du cache : à lire impérativement

A noter dans la nouvelle version de CGcalendar l'ancienne syntaxe pour la récupération des champs customfield ne marche plus , il faut faire :

Code :
[== Indéfini ==]
{CGSmartImage src1=$entry->file_location src2={$event.fields.monchampadore.field_value}   filter_croptofit="360,240"}
Quand on est habitué,...on trouve plus vite.
Allez c'est Résolu.

Win 10 pro 64 - CMSMS 2.2.19 - grincheux parfois...
Sujet fermé


Atteindre :


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