8
votes

FullCalendar Limitez l'affichage des mois disponibles?

J'aimerais savoir comment puis-je limiter le FullCalendar pour montrer une période de trois mois et désélectionnable pour le reste des mois comme dans un satellie?

E.g. Le mois en cours est mai 2010, je voudrais seulement que le calendrier affiche mai et APR (en cliquant sur le mois précédent), et Jun (en cliquant sur le mois prochain), le reste des mois serait désélectionné à partir de la sélection des utilisateurs.

Je ne sais pas si j'ai manqué de lire une partie de la documentation FullCalendar. Veuillez aviser. Merci.


0 commentaires

9 Réponses :


4
votes

Je n'ai pas fait cela, alors je ne suis pas sûr que cela fonctionnera. Mais vous pouvez au moins essayer de voir.

Je regarderais probablement la personnalisation du rachat Code> ViewDisplay Code> Callback. Il reçoit un Objet contenant un Démarrer CODE> Propriété , entre autres. Vous pouvez utiliser les propriétés de l'objet Affichage pour tester quelle vue et la date à laquelle l'utilisateur examine l'utilisateur, puis effectuez des actions en fonction de celui-ci. P>

Je ne sais pas si FullCalendar fonctionne de cette façon, mais certains plugins vont abandonner un Action si vous retourne faux code> à partir d'un rappel. Afin que vous puissiez vérifier la date de démarrage code> CODE> et s'il est hors de votre gamme de mois acceptables, alors renvoie false code> pour abandonner l'action. P>

si cela Ne fonctionne pas, à l'intérieur de ViewDisplay code> Vous pouvez à nouveau vérifier la date code> Démarrer code>. Si le mois suivant ou le mois précédent est hors de portée, vous pouvez utiliser des sélecteurs JQuery pour saisir les boutons Prev / Next et les désactiver. De cette façon, l'utilisateur ne serait pas capable de passer à un mois hors de portée. P>

En outre, si l'utilisateur est dans un mois hors de portée, vous pouvez immédiatement émettre un goodate Commande pour passer à un mois valide. P>

$('#calendar').fullCalendar({
    viewDisplay: function(view) {
        // maybe return false aborts action? 
        if (view.start > lastDayOfNextMonth) {
            return false;
        }
        // or disable next button if this is last valid month
        if (view.end + oneDay >= lastValidDate) {
            $("#calendar #fc-button-next").attr("disabled","disabled");
        }
        // or gotoDate if view.start is out of range
        if (view.start > lastValidDate) {
           // gotoDate
        }
    }
});


0 commentaires

0
votes

Je faisais face à une situation similaire: j'ai un programme d'événements et je voulais limiter le FullCalendar à la plage de dates pour les événements (par exemple, 12 semaines). Donc, si aujourd'hui est la semaine 6, le calendrier affiche uniquement les dates de la semaine 1 à 12 lorsque l'utilisateur clique sur la prochaine ou la précédente. J'ai examiné la modification de FullCalendar.js mais je n'ai pas le temps de détourner de ma chronologie du projet. Donc, en tant que solution de contournement ici, c'est ce que j'ai fait:

  1. Ajoutez un dayspicker dans un div au côté gauche de la page, avec FullCalendar à droite.
  2. Définissez un démarrage et enddate pour votre gamme de dates de programme.
  3. Définissez le Mindate et le MaxDate Vars à DatePicker à l'aide de StartDate et enddate pour la plage de dates de programme à DatePicker, pour griser toutes les autres dates en dehors de la gamme. Le but de ceci est d'indiquer à l'utilisateur de rester dans la gamme. En outre, j'ai ajouté du code de sorte que lorsqu'un utilisateur clique sur la date de DatePicker, la journée est affichée en FullCalendar.
  4. Dans votre fichier jQuery personnalisé .js, ajoutez à la méthode FullCalendar pour DayClick qui prend la date comme variable:

    Si (+ date <+ jquery.startdate || + date> jquery.enddate) {

    var $ date_out_of_range_dialog = jQuery ('') .html ('

    Désolé, la date que vous avez sélectionnée est en dehors de la plage de dates pour le programme en cours.

    Date de début: ' + (jquery.stardate.getth () + 1) + '+' + jquery.startdate.getdate () + '+' + jquery.startdate.gedicalfinancy () + '

    date de fin: ' + (jQuery .Endated.getmonth () + 1) + '/' + jQuery.enddate.getdate () + '+ jQuery.enddate.gedicalfiny () +' ') .dialogue({ AUTOOCHEN: FALSE, modal: vrai, Titre: 'Date hors de portée', largeur: 600, boutons: { "OK": fonction () { jquery (this) .dialog ("fermer"); } } })

    $ date_out_of_range_dialog.dialog ('Open');

    } else {

    // fait quelque chose d'autre comme Afficher / Ajouter / Supprimer l'événement pour cette journée dans la plage.

    }

  5. La méthode .Dialog pour ouvrir la boîte de dialogue est de MotoTools, mais quelque chose de similaire peut être utilisé dans JQuery. J'ai daté de Jquery. Pour démarrer et endormir afin que les VARS soient disponibles à travers mon fichier .js.

  6. Voici le code de la date de sélection de DatePicker et de sélectionner sur FullCalendar:

    jQuery ('# datePicker_for_calendar'). DatePicker ({ DefaultDate: jquery.startdate, Mindate: jquery.startdate, maxdate: jquery.enddate, Inline: vrai, showbuttonpanel: vrai, OnSélectionnez: Fonction (DateText, Inst) { var d = nouvelle date (DateText); jquery ('# calendrier'). Fullcalendar ("gobing", d); SélectionnéDate = D; } });


0 commentaires

9
votes

Ceci est basé sur Tauren 'S Répondre , mais inclut la date nécessaire que les sélecteurs de mathématiques et FullCalendar pour le retirer (ce code utilise une plage de 12 mois):

jQuery('#edit-calendar').fullCalendar({
    viewDisplay   : function(view) {
      var now = new Date(); 
      var end = new Date();
      end.setMonth(now.getMonth() + 11); //Adjust as needed

      var cal_date_string = view.start.getMonth()+'/'+view.start.getFullYear();
      var cur_date_string = now.getMonth()+'/'+now.getFullYear();
      var end_date_string = end.getMonth()+'/'+end.getFullYear();

      if(cal_date_string == cur_date_string) { jQuery('.fc-button-prev').addClass("fc-state-disabled"); }
      else { jQuery('.fc-button-prev').removeClass("fc-state-disabled"); }

      if(end_date_string == cal_date_string) { jQuery('.fc-button-next').addClass("fc-state-disabled"); }
      else { jQuery('.fc-button-next').removeClass("fc-state-disabled"); }
    }
});


1 commentaires

Il donne cette erreur non captueuse TypeError: View.Start.getMonth n'est pas une fonction



1
votes
 $('#calendar').fullCalendar({
            viewDisplay   : function(view) {
                var now = new Date(); 
                var end = new Date();
                var begin =  new Date ();

                end.setMonth(now.getMonth() + 12); //Adjust as needed
                begin.setMonth(now.getMonth() - 12); //Adjust as needed

                var cal_date_string = view.start.getMonth()+'/'+view.start.getFullYear();
                var cur_date_string = now.getMonth()+'/'+now.getFullYear();
                var end_date_string = end.getMonth()+'/'+end.getFullYear();
                var begin_date_string = begin.getMonth()+'/'+begin.getFullYear();

                if(cal_date_string == begin_date_string) { jQuery('.fc-button-prev').addClass("fc-state-disabled"); }
                else { jQuery('.fc-button-prev').removeClass("fc-state-disabled"); }

                if(end_date_string == cal_date_string) { jQuery('.fc-button-next').addClass("fc-state-disabled"); }
                else { jQuery('.fc-button-next').removeClass("fc-state-disabled"); }
            }

0 commentaires

2
votes
            var academicYearStartDate = new Date('2013/4/10');
            var academicYearEndDate = new Date('2014/4/10');

            viewDisplay: function (view) {
                //========= Hide Next/ Prev Buttons based on academic year date range
                if (view.end > academicYearEndDate) {
                    $("#SchoolCalender .fc-button-next").hide();
                    return false;
                }
                else {
                    $("#SchoolCalender .fc-button-next").show();
                }

                if (view.start < academicYearStartDate) {
                    $("#SchoolCalender .fc-button-prev").hide();
                    return false;
                }
                else {
                    $("#SchoolCalender .fc-button-prev").show();
                }

            }

0 commentaires

0
votes

Mon tour pour ajouter un Tweak. Ceci est toutefois basé sur LEWSID 'S Répondre qui inclut les sélecteurs de mathématiques de la date et FullCalendar nécessaires pour le retirer, mais avec une torsion.

Je viens d'ajouter deux ifs, que vous pouvez choisir d'utiliser un ou les deux, ou aucun. Le but d'eux est d'être une journée spécifique, simplement parce que vous permettez par exemple, "2 mois" et de retour, si vous êtes sur une semaine, le "Today" + 2 mois pourrait être désactivé, et aussi, après votre avance pourrait être bloqué de revenir à "aujourd'hui". xxx


0 commentaires

18
votes

pour FullCalendar dans la version 2 Modifier ViewDisplay: fonction (vue) { à Visualiseur: fonction (vue, élément) { (solution mixte des exemples de cette page): XXX


3 commentaires

@Foton croit que les noms de classe .fc-next-boutons et .fc-prev-bouton sont maintenant .FC-Button-Bouton-Suivant et .FC-Button-Prev, respectivement


sa ne fonctionne pas correctement en fin.setmonth (maintenant.getmonth () + 1);


supprimer le retour false; que son travail pour fin.setmonth (maintenant.getmonth () + 1);



3
votes

Vous pouvez utiliser l'option

$('#calendar').fullCalendar({
            header: {
                left: 'prev,next today',
                center: 'title',
                right: 'month,agendaWeek,agendaDay'
            },
            validRange: {
                start: '2017-05-01',//start date here
                end: '2017-07-01' //end date here
            },
            defaultDate: '2017-05-12'
            });


1 commentaires

L'utilisation de la propriété Validrange est la réponse la plus simple pour des vues génériques. Les dates affichées avant le début ou une fois la fin ne seront pas navigables. Voir: Validrange



0
votes

J'ai beaucoup aimé la réponse de Lewsidise beaucoup, mais cela a des problèmes. Tout d'abord, la vue.Start est un moment, pas une date, donc getminth () code> n'existe pas. Deuxièmement, Démarrer d'une vue CODE> est juste la première journée visible de ce mois, ce qui signifie que la date peut être du mois précédent. Pour contourner cela, utilisez la propriété intervalstart code>.

Voici mon implémentation pour obtenir le calendrier pour répertorier l'année en cours. P>

viewRender: function(view, element) {
    var now = new Date(new Date().getFullYear(), 0, 1);
    var end = new Date(new Date().getFullYear(), 11, 31);

    var calDateString = view.intervalStart.month()+'/'+view.intervalStart.year();
    var curDateString = now.getMonth()+'/'+now.getFullYear();
    var endDateString = end.getMonth()+'/'+end.getFullYear();

    if (calDateString === curDateString) {
        jQuery('.fc-prev-button').addClass("fc-state-disabled");
    } else {
        jQuery('.fc-prev-button').removeClass("fc-state-disabled");
    }

    if (endDateString === calDateString) {
        jQuery('.fc-next-button').addClass("fc-state-disabled");
    } else {
        jQuery('.fc-next-button').removeClass("fc-state-disabled");
    }
}


0 commentaires