Widget calendrier sous forme de liste

Page 3 sur 3 Précédent  1, 2, 3

Voir le sujet précédent Voir le sujet suivant Aller en bas

Résolu Widget calendrier sous forme de liste

Message par alv le Ven 24 Fév 2017 - 18:19

Rappel du premier message :

Bonsoir,

Je voudrais afficher le widget calendrier sous forme de liste. J'ai fait beaucoup de recherches : http://forum.forumactif.com/s/calendrier
J'ai essayé les codes présents sur ces pages : http://forum.forumactif.com/t380439-affichage-des-evenements-sous-forme-de-liste et http://forum.forumactif.com/t385705-afficher-le-calendrier-sous-forme-de-liste mais ça ne marche pas.

Je souhaiterais que les évènements (évènements créés par messages et anniversaires) soit affichés pour les 7 prochains jours, en liste, avec le 1er en plus gros que les autres pour afficher plus d'informations.

Comment faire ?

Merci d'avance.


Dernière édition par alv le Lun 1 Mai 2017 - 18:49, édité 1 fois
avatar

alv
Membre habitué(e)

Messages : 1280
Inscrit(e) le : 09/07/2012

http://urlz.fr/2OYC
alv a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Widget calendrier sous forme de liste

Message par alv le Mar 18 Avr 2017 - 10:12

En slovaque : potrebujem pomoc (j'ai besoin d'aide)
avatar

alv
Membre habitué(e)

Messages : 1280
Inscrit(e) le : 09/07/2012

http://urlz.fr/2OYC
alv a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Widget calendrier sous forme de liste

Message par no_way le Mar 18 Avr 2017 - 22:48

Bonsoir, pourriez-vous me fournir un compte test sur le forum de votre profil ?

Si vous avez des scripts en rapport avec le calendrier, il va falloir les désactiver pour un moment.


avatar

no_way
Aidactif
Aidactif

Messages : 1936
Inscrit(e) le : 26/03/2010

no_way a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Widget calendrier sous forme de liste

Message par alv le Mer 19 Avr 2017 - 9:17

Bonjour,

Merci de vouloir m'aider.
J'ai créé un compte test. Comment je vous envoie les informations ? Les MP ne sont pas disponibles.
J'ai désactivé les JS du calendrier.
avatar

alv
Membre habitué(e)

Messages : 1280
Inscrit(e) le : 09/07/2012

http://urlz.fr/2OYC
alv a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Widget calendrier sous forme de liste

Message par no_way le Mer 19 Avr 2017 - 12:13

Bonjour, je viens de réactiver ma messagerie Wink


avatar

no_way
Aidactif
Aidactif

Messages : 1936
Inscrit(e) le : 26/03/2010

no_way a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Widget calendrier sous forme de liste

Message par alv le Mer 19 Avr 2017 - 13:12

Merci. Le MP est envoyé.
avatar

alv
Membre habitué(e)

Messages : 1280
Inscrit(e) le : 09/07/2012

http://urlz.fr/2OYC
alv a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Widget calendrier sous forme de liste

Message par alv le Ven 21 Avr 2017 - 8:45

@no_way a écrit:Très bien, faut-il absolument afficher les évènements pour les 7 prochains jours ou afficher les 7 prochains évènements conviendrait ?
Bonjour,

Les 7 prochains évènements conviendraient très bien.
avatar

alv
Membre habitué(e)

Messages : 1280
Inscrit(e) le : 09/07/2012

http://urlz.fr/2OYC
alv a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Widget calendrier sous forme de liste

Message par no_way le Ven 21 Avr 2017 - 11:50

Je vous laisse essayer avec le script suivant:
Code:
$(function(){(function(){
          try{
          var max_jours=7;
          var tri=[],i=0,ii,d=new Date(),$liste=$("<ul>",{class:'mon_calendrier'}),genObjet=function(d){
                try{
                var a,b=[],d=d;
                $('>tbody>tr>td[class^="row"]',$('form[name="_calendar"]',d).parentsUntil("table").parent()).each(function(i,e){
                var $e=$('>table',e),oC={},AAAA,MM,JJ;
                if(!$e.length>0)return;
                oC[i]={},oC=oC[i];
                oC.evenements=false;
                oC.anniversaires=false;
                oC.date=$("tr:first-child",$e).first().text();
                //Timestamps
                oC.annee=/\d{4}/.exec(oC.date)[0]*1;
                oC.jour=/\d{2}/.exec(oC.date)[0]*1;
                //Un peu plus compliqué pour le mois
                oC.date.replace(/[^\s]{3,4}(?=\s+\d{4})/,function($$){
                var mois=['jan','fév','mar','avr','mai','juin','juil','aoû','sep','oct','nov','déc'];
                oC.mois=mois.indexOf($$.toLowerCase());
                });
                //Création d'un timestamp déterminant le début du jour
                oC.dJ_timestamp=(new Date(oC.annee,oC.mois,oC.jour,0,0,0,0)).getTime();
                //Création d'un timestamp déterminant la fin du jour
                oC.fJ_timestamp=oC.dJ_timestamp+86400000;
                //on incrémente de 1 le mois
                oC.mois+=1;
                //Le jour dans le calendrier est stocké.
                oC.object=$e;
                b.push(oC);
                if(!(a=$("tr:nth-child(n+1)",$e).find('a.genmed'),a).length)return;
                      a.each(function(i,e){
                            var ev;
                            if(e.href.indexOf('display=birth')!=-1){
                            !oC.anniversaires&&(oC.anniversaires={});
                            oC.anniversaires[i]={};
                            ev=oC.anniversaires[i]}else{
                            !oC.evenements&&(oC.evenements={});
                            oC.evenements[i]={};
                            ev=oC.evenements[i]}
                          ev.titre=$(e).text();
                          ev.html=$(e).parentsUntil('td').html();
                          });
                });
              return b}catch(e){console.log(e)}
              },nouvelle_url=function(){
          var AAAA,MM;
          AAAA=d.getFullYear();
          MM=d.getMonth()+1+i;
          if(!(MM<=12)){AAAA+=1;MM=1;}
          if(MM<10)MM='0'+MM;
          i++;
          return '/calendar?start='+AAAA+MM+'01';
          };
          $.when(
          $.ajax({method:'GET',cache:false,url:nouvelle_url()}),
          $.ajax({method:'GET',cache:false,url:nouvelle_url()}),
          $.ajax({method:'GET',cache:false,url:nouvelle_url()})
          ).done(function(){
              'use strict';
              var date=(new Date()).getTime(),i,ii,mois=[],tri=[];
              /*
              C'est la fonction genObjet déclarée plus haut qui crée un objet avec tous les jours du mois.
              On l'utilise sur toutes les requêtes AJAX faites.
              */
              for(i in arguments){
                    var d=arguments[i][0];
                    mois.push(genObjet(d));
              }
              /*On parcourt le tableau des mois*/
              for(i in mois){/*1 mois*/
                for(ii in mois[i]){/*1 jour*/
                    /*on teste pour chaque jour*/
                    if(date<mois[i][ii].fJ_timestamp&&(mois[i][ii].evenements||mois[i][ii].anniversaires)&&tri.length<max_jours)tri.push(mois[i][ii]);
                }
              }
          /*
          Notre tableau de tri contient à présent les jours où il y a un évènement à venir...
          Il est temps de s'attaquer à la mise en forme de notre liste
          */
          for(i in tri){
              $("<li>",{class:'center date',text:tri[i].date}).appendTo($liste);
              if(tri[i].evenements){
                for(ii in tri[i].evenements){
                    $("<li>",{class:'center evenement'}).html(tri[i].evenements[ii].html).appendTo($liste)
                }
              }
              if(tri[i].anniversaires){
                for(ii in tri[i].anniversaires){
                    $("<li>",{class:'center anniversaire'}).html(tri[i].anniversaires[ii].html).appendTo($liste)
                }
              }
          }
          /*
          Et voila notre liste est déjà créée :O !
          Ne nous reste donc plus qu'à l'ajouter à un élément du DOM disposant d'un identifiant,
          prochains_evenements
          par exemple.
          */
          $liste.appendTo('#prochains_evenements');
          }
          );
          }catch(e){console.log(e)}
        })()});


avatar

no_way
Aidactif
Aidactif

Messages : 1936
Inscrit(e) le : 26/03/2010

no_way a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Widget calendrier sous forme de liste

Message par alv le Ven 21 Avr 2017 - 13:43

Ça marche Very Happy
Vous pouvez le voir sur l'index de mon forum, sous le sondage, dans le tableau "saison".

J'aurai 2 demandes : ne pas afficher les anniversaires, mais afficher le dernier évènement passé.
Merci.
avatar

alv
Membre habitué(e)

Messages : 1280
Inscrit(e) le : 09/07/2012

http://urlz.fr/2OYC
alv a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Widget calendrier sous forme de liste

Message par alv le Mar 25 Avr 2017 - 10:29

Up Smile
avatar

alv
Membre habitué(e)

Messages : 1280
Inscrit(e) le : 09/07/2012

http://urlz.fr/2OYC
alv a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Widget calendrier sous forme de liste

Message par no_way le Mar 25 Avr 2017 - 19:59

Bonjour, utilisez le script suivant:
Code:
$(function(){(function(){
          try{
          var max_jours=7;
          var tri=[],i=0,ii,d=new Date(),$liste=$("<ul>",{class:'mon_calendrier'}),genObjet=function(d){
                try{
                var a,b=[],d=d;
                $('>tbody>tr>td[class^="row"]',$('form[name="_calendar"]',d).parentsUntil("table").parent()).each(function(i,e){
                var $e=$('>table',e),oC={},AAAA,MM,JJ;
                if(!$e.length>0)return;
                oC[i]={},oC=oC[i];
                oC.evenements=false;
                oC.anniversaires=false;
                oC.date=$("tr:first-child",$e).first().text();
                //Timestamps
                oC.annee=/\d{4}/.exec(oC.date)[0]*1;
                oC.jour=/\d{2}/.exec(oC.date)[0]*1;
                //Un peu plus compliqué pour le mois
                oC.date.replace(/[^\s]{3,4}(?=\s+\d{4})/,function($$){
                var mois=['jan','fév','mar','avr','mai','juin','juil','aoû','sep','oct','nov','déc'];
                oC.mois=mois.indexOf($$.toLowerCase());
                });
                //Création d'un timestamp déterminant le début du jour
                oC.dJ_timestamp=(new Date(oC.annee,oC.mois,oC.jour,0,0,0,0)).getTime();
                //Création d'un timestamp déterminant la fin du jour
                oC.fJ_timestamp=oC.dJ_timestamp+86400000;
                //on incrémente de 1 le mois
                oC.mois+=1;
                //Le jour dans le calendrier est stocké.
                oC.object=$e;
                b.push(oC);
                if(!(a=$("tr:nth-child(n+1)",$e).find('a.genmed'),a).length)return;
                      a.each(function(i,e){
                            var ev;
                            if(e.href.indexOf('display=birth')!=-1){
                            !oC.anniversaires&&(oC.anniversaires={});
                            oC.anniversaires[i]={};
                            ev=oC.anniversaires[i];
                            /*Supprimez la ligne suivante pour retrouver les anniversaires*/
                            oC.anniversaires=null
                            }else{
                            !oC.evenements&&(oC.evenements={});
                            oC.evenements[i]={};
                            ev=oC.evenements[i]}
                          ev.titre=$(e).text();
                          ev.html=$(e).parentsUntil('td').html();
                          });
                });
              return b}catch(e){console.log(e)}
              },nouvelle_url=function(){
          var AAAA,MM;
          AAAA=d.getFullYear();
          MM=d.getMonth()+1+i;
          if(!(MM<=12)){AAAA+=1;MM=1;}
          if(MM<10)MM='0'+MM;
          i++;
          return '/calendar?start='+AAAA+MM+'01';
          };
          $.when(
          $.ajax({method:'GET',cache:false,url:nouvelle_url()}),
          $.ajax({method:'GET',cache:false,url:nouvelle_url()}),
          $.ajax({method:'GET',cache:false,url:nouvelle_url()})
          ).done(function(){
              'use strict';
              var date=(new Date()).getTime(),i,ii,mois=[],tri=[];
              /*
              C'est la fonction genObjet déclarée plus haut qui crée un objet avec tous les jours du mois.
              On l'utilise sur toutes les requêtes AJAX faites.
              */
              for(i in arguments){
                    var d=arguments[i][0];
                    mois.push(genObjet(d));
              }
              /*On parcourt le tableau des mois*/
              for(i in mois){/*1 mois*/
                for(ii in mois[i]){/*1 jour*/
                    /*on teste pour chaque jour*/
                    if(date<mois[i][ii].fJ_timestamp&&(mois[i][ii].evenements||mois[i][ii].anniversaires)&&tri.length<max_jours)tri.push(mois[i][ii]);
                }
              }
          /*
          Notre tableau de tri contient à présent les jours où il y a un évènement à venir...
          Il est temps de s'attaquer à la mise en forme de notre liste
          */
          for(i in tri){
              $("<li>",{class:'center date',text:tri[i].date}).appendTo($liste);
              if(tri[i].evenements){
                for(ii in tri[i].evenements){
                    $("<li>",{class:'center evenement'}).html(tri[i].evenements[ii].html).appendTo($liste)
                }
              }
              if(tri[i].anniversaires){
                for(ii in tri[i].anniversaires){
                    $("<li>",{class:'center anniversaire'}).html(tri[i].anniversaires[ii].html).appendTo($liste)
                }
              }
          }
          /*
          Et voila notre liste est déjà créée :O !
          Ne nous reste donc plus qu'à l'ajouter à un élément du DOM disposant d'un identifiant,
          prochains_evenements
          par exemple.
          */
          $liste.appendTo('#prochains_evenements');
          }
          );
          }catch(e){console.log(e)}
        })()});

Cela permettra déjà de ne plus extraire les anniversaires.

La deuxième demande est un peu plus délicate et je n'ai pas beaucoup de temps là, je laisse la suite à toute personne en mesure d'aider Smile.


Dernière édition par no_way le Mer 26 Avr 2017 - 22:25, édité 1 fois (Raison : mise à jour)


avatar

no_way
Aidactif
Aidactif

Messages : 1936
Inscrit(e) le : 26/03/2010

no_way a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Widget calendrier sous forme de liste

Message par alv le Mer 26 Avr 2017 - 14:45

Bonjour,

Merci no_way. Les anniversaires ayant lieu le même jour des évènements apparaissaient toujours. J'ai enlevé ça :
Code:
if(tri[i].anniversaires){
    for(ii in tri[i].anniversaires){
          $("<li>",{class:'center anniversaire'}).html(tri[i].anniversaires[ii].html).appendTo($liste)
    }
}
Est-ce-que le compte test vous est toujours utile ?

A qui peut m'aider : comment afficher le dernier évènement passé ?
avatar

alv
Membre habitué(e)

Messages : 1280
Inscrit(e) le : 09/07/2012

http://urlz.fr/2OYC
alv a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Widget calendrier sous forme de liste

Message par no_way le Mer 26 Avr 2017 - 15:21

De rien, conservez le compte test pour la personne qui vous aidera éventuellement Smile


avatar

no_way
Aidactif
Aidactif

Messages : 1936
Inscrit(e) le : 26/03/2010

no_way a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Widget calendrier sous forme de liste

Message par alv le Mer 26 Avr 2017 - 15:23

OK. Merci beaucoup no_way pour votre aide.
avatar

alv
Membre habitué(e)

Messages : 1280
Inscrit(e) le : 09/07/2012

http://urlz.fr/2OYC
alv a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Widget calendrier sous forme de liste

Message par alv le Jeu 27 Avr 2017 - 16:05

A qui peut m'aider : comment afficher le dernier évènement passé ?
avatar

alv
Membre habitué(e)

Messages : 1280
Inscrit(e) le : 09/07/2012

http://urlz.fr/2OYC
alv a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Widget calendrier sous forme de liste

Message par alv le Ven 28 Avr 2017 - 18:42

Up
avatar

alv
Membre habitué(e)

Messages : 1280
Inscrit(e) le : 09/07/2012

http://urlz.fr/2OYC
alv a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Widget calendrier sous forme de liste

Message par alv le Sam 29 Avr 2017 - 18:24

Up
avatar

alv
Membre habitué(e)

Messages : 1280
Inscrit(e) le : 09/07/2012

http://urlz.fr/2OYC
alv a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Widget calendrier sous forme de liste

Message par alv le Dim 30 Avr 2017 - 18:19

Up
avatar

alv
Membre habitué(e)

Messages : 1280
Inscrit(e) le : 09/07/2012

http://urlz.fr/2OYC
alv a été remercié(e) par l'auteur de ce sujet.

Résolu Re: Widget calendrier sous forme de liste

Message par alv le Lun 1 Mai 2017 - 18:45

Je sens que je n'aurai jamais de réponse. En plus de deux mois, il n'y a que clost et no_way qui m'ont aidés. Merci à vous deux.

résolu
avatar

alv
Membre habitué(e)

Messages : 1280
Inscrit(e) le : 09/07/2012

http://urlz.fr/2OYC
alv a été remercié(e) par l'auteur de ce sujet.

Page 3 sur 3 Précédent  1, 2, 3

Voir le sujet précédent Voir le sujet suivant Revenir en haut


Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum