Connexion

Récupérer mon mot de passe

Derniers sujets
» [PhpBB2] Première lettre des titres en majuscule
par fascicularia Hier à 21:01

» [EDGE] Afficher les images côte à côte
par Angelface Hier à 19:47

» histoire du Jour sans fin
par Quad Daniel Hier à 15:10

» *RESOLU*[Edge] Customiser les boutons "Répondre" et "Nouveau sujet"
par Milouze14 Mar 17 Sep 2019 - 15:59

» [TOUTES VERSIONS] Afficher les outils de modération via la liste des sujets
par Splash Dim 15 Sep 2019 - 20:08

» *CORBEILLE*[AwesomeBB] Afficher le texte pour les champs du contact
par Milouze14 Dim 15 Sep 2019 - 19:20

» *RESOLU*[Edge] Ajouter l'année sur les posts
par Milouze14 Dim 15 Sep 2019 - 17:22

» *RESOLU*[Edge] Arrondir les angles du forum
par Milouze14 Sam 14 Sep 2019 - 19:05

» [AwesomeBB]Afficher les boutons " éditer, citer, supprimer, etc ... " sous forme de texte
par Milouze14 Sam 14 Sep 2019 - 7:35

» [Edge]Afficher les boutons " éditer, citer, supprimer, etc ... " sous forme de texte
par Milouze14 Sam 14 Sep 2019 - 6:36

» [ModernBB]Afficher les boutons " éditer, citer, supprimer, etc ... " sous forme de texte
par Milouze14 Sam 14 Sep 2019 - 6:25

» [Invision]Afficher les boutons " éditer, citer, supprimer, etc ... " sous forme de texte
par Milouze14 Sam 14 Sep 2019 - 5:32

» [PhpBB3]Afficher les boutons " éditer, citer, supprimer, etc ... " sous forme de texte
par Milouze14 Sam 14 Sep 2019 - 5:13

» [PunBB]Afficher les boutons " éditer, citer, supprimer, etc ... " sous forme de texte
par Milouze14 Sam 14 Sep 2019 - 4:57

» [PhpBB2]Afficher les boutons " éditer, citer, supprimer, etc ... " sous forme de texte
par Milouze14 Sam 14 Sep 2019 - 4:55

» [EDGE] Afficher/Masquer les catégories avec un effet
par chrisnvidia Ven 13 Sep 2019 - 22:17

» *RESOLU*[AwesomeBB] Afficher le bouton nouveau selon les permissions
par Milouze14 Jeu 12 Sep 2019 - 3:54

» [Toutes versions] Utiliser les variables utilisateur/forum
par fascicularia Jeu 12 Sep 2019 - 3:20

» *RESOLU*[Edge] Afficher les derniers tutoriels en ligne
par Milouze14 Mar 10 Sep 2019 - 11:26

» Règlement de l'entraide Forumactif
par chrisnvidia Lun 9 Sep 2019 - 21:23

*RESOLU*[AWESOMEBB] Adapter un code pour afficher les événements du calendrier dans un widget

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

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

avatar
Tony L
Milouzien

MessageTony L le Jeu 21 Mar 2019 - 21:07

Rappel du premier message :

Bonsoir à tous,


Je suis passé dernièrement sur la version awesomeBB.
De ce fait j'ai plusieurs codes qui ne sont plus adaptés (ils étaient prévus pour la version punbb).

Notamment j'avais un code qui récupéré les événements qui étaient dans le calendrier pour les afficher dans un widget, celui ci :

Code:
$(function(){(function(){
      try{
      var max_jours=999;
      var tri=[],i=0,ii,d=new Date(),$liste=$("<ul>",{class:'mon_calendrier'}),genObjet=function(d){
            try{
            var a,b=[],d=d;
            $('#main-content table.table.calendar td[class^="row"]',d).each(function(i,e){
            var $e=$(e),oC={},AAAA,MM,JJ;
            oC[i]={},oC=oC[i];
            oC.evenements=false;
            oC.anniversaires=false;
            oC.date=$e.find('p').eq(0).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;
            if(!$e.find('ul a.genmed').length){b.push(oC);return}
                  a=$e.find('ul a.genmed');
                  a.each(function(i,e){
                      $(e).each(function(ii,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).parents('li').eq(0).html();
                      })
                      });
                      b.push(oC);
            });
          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&&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);
          for(ii in tri[i].evenements){
            $("<li>",{class:'center evenement'}).html(tri[i].evenements[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)}
    })()});

Ma demande est donc de savoir quelles modifications ils faut faire pour qu'il fonctionne à nouveau svp.


Merci de l'aide,
Tony


Dernière édition par Tony L le Sam 4 Mai 2019 - 15:40, édité 1 fois

papa pig
Milouzien

Messagepapa pig le Sam 4 Mai 2019 - 13:38

Sympa Arnaud merci, mais ça ne donne rien. Il n'y a plus de bug par contre.
J'ai plusieurs pistes :
- j'ai mis le code complet "sur toutes les pages", c'est bien ça ?
- j'ai mis le widget sur l'index et sur le portail, c'est juste à un endroit ?

- sinon j'ai peut-être un conflit avec d'autres scripts ?
Script prochains évènements   
Scripts persos sur les sujets   
SoundCloud_Player
Boutton_SoundCloud_editeur   
Messages préformatés du staff   
MPF du staff
Category colors and icons   

Merci
no_way
no_way
Développeur

Messageno_way le Sam 4 Mai 2019 - 13:47

Je t'en prie, script modifié, essaie avec cette version:
Code:
class calendrier{
    constructor(date=new Date()){
        this.mois=date.getMonth()+1;
        if(this.mois<10)this.mois='0'+this.mois;
        this.annee=date.getFullYear();
    }
    entrees(){
        return new Promise((res,rej)=>{
            const m=this.obtention();
            m.then(
                d=>{
                    const doc=d.target.response;
                    let t,jours=doc.querySelectorAll('.calendar-day-date'),mois={};
                    for(let j of jours){
                        let jour_num=/\D*(\d{1,2})\D*/.exec(j.textContent)[1]*1;
                        let debut_jour=new Date(this.annee,this.mois*1-1,jour_num).getTime();
                        let fin_jour=new Date(this.annee,this.mois*1-1,jour_num+1).getTime();
                        let list=j.nextSibling;
                        let anniversaires=(t=list.querySelectorAll('a[href*="display=birth"]'),t.length?t:!1);
                        if(anniversaires)for(let a of anniversaires){
                            a.href=a.href.replace(/\??change_version=\w+/,'');
                            a.removeAttribute("onmouseover");
                            a.removeAttribute("onmouseout");
                        }
                        let evenements=(t=list.querySelectorAll('a[href*="/t"],a[href*="/e"]'),t.length?t:!1);
                        if(evenements)for(let a of evenements){
                            a.href=a.href.replace(/\??change_version=\w+/,'');
                            a.removeAttribute("onmouseover");
                            a.removeAttribute("onmouseout");
                        }
                        mois[j.textContent]={"date":j.textContent,"jour":jour_num,"mois":this.mois*1,"annee":this.annee,debut_jour,fin_jour,anniversaires,evenements};
                    }
                    res(mois);
                },
                e=>rej(e)
            )
        })
    }
    obtention(){
        return new Promise((res,rej)=>{
            try{
                let xhr=new XMLHttpRequest();
                xhr.addEventListener("error",e=>rej(e));
                xhr.addEventListener("timeout",e=>rej(e));
                xhr.addEventListener("load",d=>res(d));
                xhr.responseType="document";
                xhr.timeout=3000;
                xhr.open("GET",`/calendar?change_version=modernbb&start=${this.annee}${this.mois}01`);
                xhr.send();
            }catch(e){
                rej(e);
            }
        })
    }
};
$(function(){
    let d=new Date();
    /*On compte extraire 3 mois du calendrier à partir du mois en cours*/
    const moisCalendrier=[new calendrier().entrees(),new calendrier((d.setMonth(d.getMonth()+1),d)).entrees(),new calendrier((d.setMonth(d.getMonth()+1),d)).entrees()];
    Promise.all(moisCalendrier).then(v=>{
        for(let entrees of v){
            /*tri*/
            let x=Object.getOwnPropertyNames(entrees).sort((c,f)=>{
                return /\D*(\d{1,2})\D*/.exec(c)[1]</\D*(\d{1,2})\D*/.exec(f)[1]?-1:1;
            });
            /*Exploitation des données*/
            for(let i of x){
                let jour=entrees[i];
                if(!jour.anniversaires&&!jour.evenements)continue;
                $("<h4>",{text:jour.date,class:"date"}).appendTo("#prochains_evenements");
                if(jour.anniversaires){
                    for(let a of jour.anniversaires){
                        $("<div>").append(a).addClass("anniversaire").appendTo("#prochains_evenements");
                    }
                }
                if(jour.evenements){
                    for(let a of jour.evenements){
                        $("<div>").append(a).addClass("evenement").appendTo("#prochains_evenements");
                    }
                }
            }
        }
    });
});

Au passage, sois le bienvenu parmi nous ;)
avatar
Tony L
Milouzien

MessageTony L le Sam 4 Mai 2019 - 14:01

Hum, par contre un anniversaire vient d'apparaitre au 20 juillet sur le widget, bizarre
papa pig
papa pig
Milouzien

Messagepapa pig le Sam 4 Mai 2019 - 14:04

Merci ça fonctionne !
@no_way a écrit:Au passage, sois le bienvenu parmi nous ;)
Merci ! hinhin
no_way
no_way
Développeur

Messageno_way le Sam 4 Mai 2019 - 14:05

Oui c'est normal, l'anniversaire est bien indiqué sur ton calendrier, si tu ne souhaites pas afficher les anniversaires c'est possible, il suffit d'ajouter dans ta feuille de style:
Code:
#prochains_evenements .anniversaire{
    display:none;
}
avatar
Tony L
Milouzien

MessageTony L le Sam 4 Mai 2019 - 14:21

Super ! Merci encore Arnaud :))

Ce serait beaucoup de travail pour aller pour afficher les événements sur une durée plus longue que 3 mois ? Ou il faut peut être modifier une variable ?
no_way
no_way
Développeur

Messageno_way le Sam 4 Mai 2019 - 14:29

Je t'en prie, non c'est au contraire très simple mais combien de mois veux-tu afficher ?
avatar
Tony L
Milouzien

MessageTony L le Sam 4 Mai 2019 - 14:37

Hum, en fait il n'y à pas de concours d'oiseaux tout les mois.. C'est souvent en fin d'année après septembre.
Bref :-)

Sur 6 mois, voir sur l'année en cours serait l'idéal
no_way
no_way
Développeur

Messageno_way le Sam 4 Mai 2019 - 14:49

J'ai directement modifié le script sur ton forum pour traiter une année complète d'avance.
avatar
Tony L
Milouzien

MessageTony L le Sam 4 Mai 2019 - 14:49

Je viens de mettre le code sur mon forum officiel. Je n'obtiens pas le meme resultat arf, toutes les dates s'affichent dans le widget, tu peux le voir ici : https://www.diamant-mandarin-evo.com/portal , tout en bas
no_way
no_way
Développeur

Messageno_way le Sam 4 Mai 2019 - 15:00

Sans doute trop de requêtes à la fois, modifie:
Code:
moisCalendrier.length<12
par:
Code:
moisCalendrier.length<6
avatar
Tony L
Milouzien

MessageTony L le Sam 4 Mai 2019 - 15:02

Hum apparemment non, j'ai testé avec celui sur 3 mois, meme resultat
no_way
no_way
Développeur

Messageno_way le Sam 4 Mai 2019 - 15:29

12 mois à récupérer prenait trop de temps (ajax timeout), j'ai limité à 6 mois et augmenté le délai maximal d'attente à 10 secondes, ça devrait fonctionner à présent.
avatar
Tony L
Milouzien

MessageTony L le Sam 4 Mai 2019 - 15:40

Oui, génial ! C'est parfait et super pratique :))))

Un grand merci Arnaud ! Je mets en résolu

Bon week-end hinhin
Milouze14
Milouze14
Fondateur

MessageMilouze14 le Sam 4 Mai 2019 - 15:45


Coucou

Sujet résolu et déplacé dans le forum adéquate

A bientôt pour une prochaine demande clin oeil

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

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

Créer un compte ou se connecter pour répondre

Vous devez être membre pour répondre.

S'enregistrer

Rejoignez notre communauté ! C'est facile !


S'enregistrer

Connexion

Vous êtes déjà membre ? Aucun soucis, cliquez ici pour vous connecter.


Connexion

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