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? p>
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. p>
Je ne sais pas si j'ai manqué de lire une partie de la documentation FullCalendar. Veuillez aviser. Merci. P>
9 Réponses :
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 Je ne sais pas si FullCalendar fonctionne de cette façon, mais certains plugins vont abandonner un Action si vous si cela Ne fonctionne pas, à l'intérieur de En outre, si l'utilisateur est dans un mois hors de portée, vous pouvez immédiatement émettre 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>
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>
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>
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
}
}
});
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: p>
Dans votre fichier jQuery personnalisé .js, ajoutez à la méthode FullCalendar pour DayClick strong> qui prend la date comme variable: P>
Si (+ date <+ jquery.startdate || + date> jquery.enddate) { p>
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. P> Date de début: B>' + (jquery.stardate.getth () + 1) + '+' + jquery.startdate.getdate () + '+' + jquery.startdate.gedicalfinancy () + ' p> date de fin: b>' + (jQuery .Endated.getmonth () + 1) + '/' + jQuery.enddate.getdate () + '+ jQuery.enddate.gedicalfiny () +' p> ')
.dialogue({
AUTOOCHEN: FALSE,
modal: vrai,
Titre: 'Date hors de portée',
largeur: 600,
boutons: {
"OK": fonction () {
jquery (this) .dialog ("fermer");
}
}
}) p>
$ date_out_of_range_dialog.dialog ('Open'); P>
} else { p>
// fait quelque chose d'autre comme Afficher / Ajouter / Supprimer l'événement pour cette journée dans la plage. P>
} p> li>
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. p> li>
Voici le code de la date de sélection de DatePicker et de sélectionner sur FullCalendar: P>
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;
}
}); p> li>
ol>
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"); } } });
Il donne cette erreur non captueuse TypeError: View.Start.getMonth n'est pas une fonction
$('#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"); } }
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(); } }
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". p>
pour FullCalendar dans la version 2 Modifier ViewDisplay: fonction (vue) { code> à
Visualiseur: fonction (vue, élément) { code> (solution mixte des exemples de cette page):
@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);
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' });
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
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 Voici mon implémentation pour obtenir le calendrier pour répertorier l'année en cours. P> 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>.
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");
}
}