Connexion

Récupérer mon mot de passe

Derniers sujets
» *RESOLU*[PHPBB2] Ajouter lien message dans titre citation
par Milouze14 Hier à 18:44

» *RESOLU*[PHPBB2] WYSIWYG pour citation sur message rapide
par Milouze14 Hier à 18:32

» [TOUTES VERSIONS]Ajouter un contenu visible que par les membres ayant répondu.
par dymo Hier à 2:10

» *RESOLU*[PHPBB2] Mise en page dans le corps du message uniquement sur le 1er message
par Milouze14 Ven 14 Fév 2020 - 16:25

» [BESTOF] Les photos à partir de l'ID d'un membre
par Milouze14 Ven 14 Fév 2020 - 3:53

» [PHPBB2] Afficher un message en haut de sujet lorsqu'il est verrouillé
par christ77000 Jeu 13 Fév 2020 - 10:01

» [TOUTES VERSIONS]Visualiser le mot de passe
par christ77000 Jeu 13 Fév 2020 - 8:29

» [TOUTES VERSIONS] Recherche de texte dans les templates
par photoclic Mer 12 Fév 2020 - 19:42

» *CORBEILLE*[PHPBB2] Viewtopic_body : Séparer les champs du profil
par Milouze14 Sam 8 Fév 2020 - 6:15

» *CORBEILLE*[PHPBB2] Messenger sur forumactif
par Milouze14 Sam 8 Fév 2020 - 6:14

» *RESOLU*[PHPBB3] Mettre un cadre aux forums des catégories
par Milouze14 Jeu 6 Fév 2020 - 15:06

» *RESOLU*[MODERNBB] Couleur textarea
par Milouze14 Mer 5 Fév 2020 - 18:06

» [TOUTES VERSIONS]Message automatique au déplacemet d'un sujet
par Jackymi Mar 4 Fév 2020 - 8:50

» *RESOLU*[MODERNBB] Barre de navigation sur 2 lignes
par Milouze14 Mar 4 Fév 2020 - 3:47

» *CORBEILLE*[PHPBB2] Message automatique au déplacement d'un sujet
par Milouze14 Dim 2 Fév 2020 - 9:17

» *RESOLU*[MODERNBB] Largeur forum modernBB
par Milouze14 Dim 2 Fév 2020 - 8:13

» *CORBEILLE*[AWESOMEBB] Erreur "429 too many requests nginx"?
par Milouze14 Ven 31 Jan 2020 - 3:52

» *CORBEILLE*[PHPBB2] Profil
par Milouze14 Mer 29 Jan 2020 - 3:51

» *CORBEILLE*[PHPBB2] QUI REGARDE LES POSTS ,?
par Milouze14 Mar 28 Jan 2020 - 3:48

» *CORBEILLE*[PHPBB2] Profil et avatar
par Milouze14 Mar 28 Jan 2020 - 3:45

*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

Milouze14

Le respect mutuel est le fondement de la véritable harmonie.
Dalaï Lama

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