Connexion

Récupérer mon mot de passe

Derniers sujets
» [PhpBB2] Effet transition icône du forum
par petitefeuille Aujourd'hui à 8:57

» [PhpBB3] Miniature agrandie sur réponse rapide
par Milouze14 Aujourd'hui à 4:16

» [PhpBB2] Ouverture d'une balise object ou iframe au clic sur un bouton
par fascicularia Hier à 21:48

» [PhpBB2] positionnement css
par Milouze14 Lun 18 Nov 2019 - 17:50

» histoire du Jour sans fin
par Quad Daniel Lun 18 Nov 2019 - 7:28

» *RESOLU*[PhpBB2] Notifications Push
par Milouze14 Lun 18 Nov 2019 - 6:06

» *RESOLU*[PhpBB2] Modifier la toolbar
par Milouze14 Lun 18 Nov 2019 - 6:03

» [PHPBB2] Menu Rechercher en haut à gauche effet survol
par HardRock Sam 16 Nov 2019 - 21:23

» *RESOLU*[PhpBB3] Couleur de lien dans les messages
par Milouze14 Sam 16 Nov 2019 - 19:04

» *CORBEILLE*[PhpBB2] avertissement lors de la publication d'un email 2 le retour
par Milouze14 Sam 16 Nov 2019 - 7:16

» [PhpBB2]Module de connexion type forumactif
par petitefeuille Jeu 14 Nov 2019 - 13:12

» Règlement de l'entraide Forumactif
par msfeettoes Mer 13 Nov 2019 - 17:28

» *RESOLU*[PhpBB3] Retirer bouton contact aux invités
par Milouze14 Mer 13 Nov 2019 - 15:59

» [PhpBB2] Avertissement lors de la publication d'un email
par Milouze14 Mer 13 Nov 2019 - 3:53

» *RESOLU*[PhpBB2] Annonce Google décalée
par Milouze14 Lun 11 Nov 2019 - 21:08

» [PhpBB2] Ajouter à vos favoris
par Milouze14 Lun 11 Nov 2019 - 18:22

» [PhpBB2] Changer le nom d'un groupe
par petitefeuille Lun 11 Nov 2019 - 15:53

» *RESOLU*[Edge] Bannière defilante
par Milouze14 Lun 11 Nov 2019 - 8:57

» *RESOLU*[PhpBB3] Bouton uniquement sur premier post
par Milouze14 Dim 10 Nov 2019 - 19:19

» *RESOLU*[PhpBB3] Photos par thèmes
par Milouze14 Dim 10 Nov 2019 - 17:51

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

Page 1 sur 2 1, 2  Suivant

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

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
Milouze14
Milouze14
Fondateur

MessageMilouze14 le Sam 23 Mar 2019 - 7:03

Hello Tony,

c'est encore une belle trouvaille de mon ami Arnaud @no_way .

Je n'arrive pas à le mettre en fonction surement dû à l'année (sous réserve) .

Arnaud dès qu'il le pourra (il est assez occupé actuellement) regardera ce qui cloche.

Pour information ,j'ai déposé la div suivante:
Code:
<div id="prochains_evenements">
</div>

Dans la page d'accueil,car les widgets se trouvent en bas de page sur mon fofo de test et je ne sais pas pourquoi!!
no_way
no_way
Développeur

Messageno_way le Dim 24 Mar 2019 - 21:50

Bonsoir, j'ai fait un code indépendant de jQuery, je le mets caché pour le moment:

Il s'agit d'une classe en mesure de récupérer la maximum d'informations peu importe la version du forum, il est primordial qu'elle ne soit déclarée qu'une seule et unique fois.


Dernière édition par no_way le Sam 4 Mai 2019 - 12:22, édité 1 fois
Milouze14
Milouze14
Fondateur

MessageMilouze14 le Lun 25 Mar 2019 - 7:34

Hello Arnaud,
merci beaucoup, je vais tâcher de trouver comment extraire tous les évènements
vers une div.
avatar
Tony L
Milouzien

MessageTony L le Lun 25 Mar 2019 - 22:04

Bonsoir Philippe et Arnaud,


En tous cas merci pour cette aide, ça ne m'à l'air pas très simple à adapter.


hinhin
avatar
Tony L
Milouzien

MessageTony L le Mar 30 Avr 2019 - 22:31

Bonsoir Arnaud et Philippe,


En revoyant le sujet, je me demandé si il était possible de le rendre fonctionnelle. Reste t-il beaucoup de travail ?

Cordialement,
Tony
Milouze14
Milouze14
Fondateur

MessageMilouze14 le Mer 1 Mai 2019 - 6:16

Hello Tony,
j'ai remonté ta demande dans l'entraide, étonnant qu'elle se trouvait a se balader dans un autre fofo!!

En revoyant le sujet, je me demandé si il était possible de le rendre fonctionnelle. Reste t-il beaucoup de travail ?


Je n'ai pas eu le temps de m'y pencher très sincèrement Tony ...
avatar
Tony L
Milouzien

MessageTony L le Mer 1 Mai 2019 - 19:08

Hello Philippe,


Il y a d'autres choses bien plus importantes, d'autant plus le 1er mai !  clin oeil
C'est déjà génial tout se qui est proposé sur ton forum et je l’apprécie d'avantage dans sa version revue depuis ce nouveau départ.

Bonnes soirée à tous et à toutes
Milouze14
Milouze14
Fondateur

MessageMilouze14 le Mer 1 Mai 2019 - 19:34


C'est déjà génial tout se qui est proposé sur ton forum et je l’apprécie d'avantage dans sa version revue depuis ce nouveau départ.

Merci , c'est gentil mon ami clin oeil
Milouze14
Milouze14
Fondateur

MessageMilouze14 le Jeu 2 Mai 2019 - 18:22

Re tony,

je n'arrive pas a trouver la parade pour l'adapter pour la version Awesomebb

Il faudra que Arnaud @no_way voit cela mais actuellement il est assez occupé.
On va laisser ton topic ouvert le temps qu'il faudra afin qu'il puisse jeter un œil.

Donc pas besoin de remonter ta demande comme sur le forum des forums clin oeil .



avatar
Tony L
Milouzien

MessageTony L le Jeu 2 Mai 2019 - 21:23

Bonsoir Philippe,

Ok, ça marche clin oeil

Bonne soirée
no_way
no_way
Développeur

Messageno_way le Jeu 2 Mai 2019 - 23:49

Ola je zieute ça ce week-end sans faute ;)
no_way
no_way
Développeur

Messageno_way le Ven 3 Mai 2019 - 11:54

Ola voici un script pour exploiter la classe calendrier et afficher le tout dans ton widget, à tester:
Code:
{
    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");
                    }
                }
            }
        }
    });
};
avatar
Tony L
Milouzien

MessageTony L le Ven 3 Mai 2019 - 16:39

Hello Arnaud,

J'ai mis la div :
Code:
<div id="prochains_evenements">
</div>

Dans le widget et ajouté le script sur toutes les pages. Il y a dans le calendrier un événement en juin.
Il n'y à pas eu de résultat affiché dans le widget et cela à effacé les publications qui étaient dans le widget dernières publications (j'ai désactivé le script pour que ce dernier widget refonctionne) .

Est-ce que c'était bien les manip. à effectuer pour un test ?
no_way
no_way
Développeur

Messageno_way le Ven 3 Mai 2019 - 22:44

Ola, oui c'était bien ce qu'il fallait faire mais je ne vois pas de widget activé, s'agit-il bien du forum indiqué sur ton profil ?
avatar
Tony L
Milouzien

MessageTony L le Sam 4 Mai 2019 - 10:58

Hello Arnaud,


J'ai préféré l'enlever de mon forum officiel.
Je viens de le remettre sur un forum d'essai, widget : Prochains rassemblements.

http://forumessai.superforum.fr/portal
no_way
no_way
Développeur

Messageno_way le Sam 4 Mai 2019 - 11:47

Il semble que tu aies oublié d'ajouter la classe calendrier à ton forum, ajoutes le premier script que je t'ai fourni et vérifie que tu l'actives bien sur toutes les pages ;)
avatar
Tony L
Milouzien

MessageTony L le Sam 4 Mai 2019 - 12:00

J'ai bien mis le script sur toutes les pages et la gestion du javascript est activé.

Comment ajouter la classe calendrier stp ? C'est peut être dû au faite que cette version de forum est encore en Béta..
no_way
no_way
Développeur

Messageno_way le Sam 4 Mai 2019 - 12:14

En ajoutant le premier code javascript que je t'ai fourni.
Pas de souci par rapport au fait que AwesomebBB soit en bêta.
avatar
Tony L
Milouzien

MessageTony L le Sam 4 Mai 2019 - 12:18

Ok, je viens de l'ajouter, j'ai désactivé le second.
Pas de changement sur le widget de mon coté
no_way
no_way
Développeur

Messageno_way le Sam 4 Mai 2019 - 12:22

Le premier script fourni est une classe, le dernier script manipule la-dite classe, les deux travaillent de concert donc il faut qu'ils soient tous deux activés :)
avatar
Tony L
Milouzien

MessageTony L le Sam 4 Mai 2019 - 12:29

Oups ok :)

Je les aient activés tous deux sur toutes les pages. Je ne vois pas de changement dans le widget
no_way
no_way
Développeur

Messageno_way le Sam 4 Mai 2019 - 12:33

Désolé mais je ne vois toujours pas la classe calendrier, peux-tu me fournir un compte admin sur ton forum de test afin de régler plus rapidement ce souci.
avatar
Tony L
Milouzien

MessageTony L le Sam 4 Mai 2019 - 12:35

Ok, je l'envoie par MP :)
no_way
no_way
Développeur

Messageno_way le Sam 4 Mai 2019 - 12:52

Voila qui est installé, tu avais pris l'ancien code ça ne pouvait donc pas marcher ;)
no_way
no_way
Développeur

Messageno_way le Sam 4 Mai 2019 - 13:00

Pour référence, voici le code complet (la classe + le code qui la manipule):
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+/,'');
                        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+/,'');
                        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");
                    }
                }
            }
        }
    });
});


Dernière édition par no_way le Sam 4 Mai 2019 - 13:01, édité 1 fois
avatar
Tony L
Milouzien

MessageTony L le Sam 4 Mai 2019 - 13:01

Oh, super ! Merci bien :))

Euh, si je peux te demander une amélioration.. Par exemple l'exposition 1 est sur trois jours, elle apparait donc 3 fois dans le widget.
Il serait possible de ne l'a fait apparaitre qu'une fois ?
avatar
Tony L
Milouzien

MessageTony L le Sam 4 Mai 2019 - 13:03

Lorsque l'on clique sur un événement, la mis en forme n'est pas la même que le forum en lui même. C'est normal ?
no_way
no_way
Développeur

Messageno_way le Sam 4 Mai 2019 - 13:05

Ma foi ce serait possible mais es-tu sûr de vouloir faire cela ?
Tu as conscience que ça implique que des jours pendant lesquels il y a une exposition en cours risquent purement et simplement de ne plus s'afficher ?

Je ne vois aucune différence de mon côté, lorsque tu cliques sur un évènement tu es redirigé vers le sujet donc pas d'écart de mise en forme.
papa pig
papa pig
Milouzien

Messagepapa pig le Sam 4 Mai 2019 - 13:11

Salut Arnaud, Tony,
je suis tombé sur ce topic via google recherchant sur le FDF une réponse à ce problème : créer un widget prochains événements sur awesomebb. Et me voilà Milouzien...
Je viens de l'installer sur mon forum test, et le code fait buguer le portail http://bf-v22.forumactif.com/
no_way
no_way
Développeur

Messageno_way le Sam 4 Mai 2019 - 13:13

Salut, peux-tu indiquer quel est le bug en question ?
De mon côté aucun bug.
avatar
Tony L
Milouzien

MessageTony L le Sam 4 Mai 2019 - 13:17

Autant pour moi, j'ai supprimer les cookies et l'affichage des événements et revenu à la normal :-)

Humm, oui il faut que j'y réfléchissent.. Ou mettre la date dans le titre ou la durée quelque part
papa pig
papa pig
Milouzien

Messagepapa pig le Sam 4 Mai 2019 - 13:17

Salut, le bug se produit quand depuis le widget généré, je survole un lien vers un événement. C'est d'abord la barre de navigation tout en haut du forum qui disparaît, ensuite quelques secondes après, le header, puis tout la page sauf le footer, seul élément qui reste.
no_way
no_way
Développeur

Messageno_way le Sam 4 Mai 2019 - 13:28

Ok je viens de constater le souci mais j'ignore pourquoi ça ne marche pas sur le tien, je vais te créer une version sans la partie qui fait dérailler tout ça.
papa pig
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

Page 1 sur 2 1, 2  Suivant

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