The code of calendar.html is:
<template>
<div class="page">
<div class="navbar navbar-large-transparent">
<div class="navbar-bg"></div>
<div class="navbar-inner">
<div class="left">
<a href="#" class="link back">
<i class="icon icon-back"></i>
<span class="if-not-md">Back</span>
</a>
<a href="#" class="link icon-only panel-open" data-panel="left">
<i class="icon f7-icons if-not-md">menu</i>
<i class="icon material-icons md-only">menu</i>
</a>
</div>
<div class="title sliding navbar-calendar-title"></div>
<div class="right">
<a class="link icon-only searchbar-enable" data-searchbar=".searchbar-components">
<i class="icon f7-icons if-not-md">search</i>
<i class="icon material-icons md-only">search</i>
</a>
</div>
<div class="title-large">
<div class="title-large-text navbar-calendar-title"></div>
</div>
<form data-search-container=".components-list" data-search-in="a" class="searchbar searchbar-expandable searchbar-components searchbar-init">
<div class="searchbar-inner">
<div class="searchbar-input-wrap">
<input type="search" placeholder="Search components"/>
<i class="searchbar-icon"></i>
<span class="input-clear-button"></span>
</div>
<span class="searchbar-disable-button if-not-aurora">Cancel</span>
</div>
</form>
</div>
</div>
<div class="page-content">
<div class="block">
<p>Info calendario</p>
</div>
<div id="calendar" class="block block-strong no-padding no-margin no-hairline-top"></div>
<div id="calendar-events" class="list no-margin no-hairlines no-safe-area-left">
<ul>
{{#each eventItems}}
<li class="item-content">
<div class="event-color" style="background-color: {{color}}"></div>
<div class="item-inner">
<div class="item-title">{{title}}</div>
<div class="item-after">{{time}}</div>
</div>
</li>
{{else}}
<li class="item-content">
<div class="item-inner">
<div class="item-title text-color-gray">No events for this day</div>
</div>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
</template>
<style>
#calendar, #calendar-events {
height: 50%;
box-sizing: border-box;
}
#calendar .calendar {
height: 100%;
}
#calendar-events ul {
height: 100%;
overflow: auto;
}
#calendar-events .event-color {
position: absolute;
left: 0;
top: 0;
width: 8px;
height: 100%;
}
@media (orientation: landscape) {
#calendar {
float: left;
}
#calendar, #calendar-events {
height: 100%;
}
#calendar, #calendar-events {
width: 50%;
}
#calendar-events {
margin-left: 50% !important;
border-left: 1px solid #eee;
}
.theme-dark #calendar-events {
border-left-color: #282828;
}
}
</style>
<script>
return {
data: function () {
var varTest = { events: [] };
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth();
var day = date.getDate();
var allEvents = {
eventItems: [],
today: new Date(year, month, day),
events: []
}
Framework7.request.json('http://----mydomain---/prbDB2.php', function (data2) {
for(var i=0 ; i < data2['events'].length ; i++) {
var x = varTest['events'].push(data2['events'][i]);
}
console.log("length inside" + varTest['events'].length);
for(var i=0 ; i < varTest['events'].length ; i++) {
var varDate = new Date(varTest['events'][i]['date'].substring(0,10));
var varHour = varTest['events'][i]['date'].substring(11,13);
var varMinutes = varTest['events'][i]['date'].substring(14,16);
var varTitle = varTest['events'][i]['title']
var x = allEvents['events'].push({date: varDate, hours: varHour, minutes: varMinutes, title: varTitle, color: '#2196f3'});
}
console.log(allEvents);
});
console.log("length outside" + varTest['events'].length);
return allEvents;
},
methods: {
renderEvents: function (calendar) {
var self = this;
var currentDate = calendar.value[0];
var currentEvents = self.events
.filter(function (event) {
return (
event.date.getTime() >= currentDate.getTime() &&
event.date.getTime() < currentDate.getTime() + 24 * 60 * 60 * 1000
);
});
const eventItems = [];
if (currentEvents.length) {
currentEvents.forEach(function (event) {
const hours = event.hours;
let minutes = event.minutes;
if (minutes < 10) minutes = `0${minutes}`;
eventItems.push({
title: event.title,
time: `${hours}:${minutes}`,
color: event.color,
});
});
}
self.$setState({
eventItems: eventItems,
});
},
},
on: {
pageInit: function (e, page) {
var self = this;
var app = self.$app;
var $ = self.$;
var monthNames = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto' , 'Septiembre' , 'Octubre', 'Noviembre', 'Diciembre'];
self.calendar = app.calendar.create({
containerEl: '#calendar',
toolbar: false,
value: [self.today],
events: self.events,
on: {
init: function (calendar) {
$('.navbar-calendar-title').text(monthNames[calendar.currentMonth] +', ' + calendar.currentYear);
app.navbar.size(app.navbar.getElByPage(page.el));
calendar.$el.addClass('no-safe-area-right');
self.renderEvents(calendar);
},
monthYearChangeStart: function (calendar) {
$('.navbar-calendar-title').text(monthNames[calendar.currentMonth] +', ' + calendar.currentYear);
app.navbar.size(app.navbar.getElByPage(page.el));
},
change: function (calendar) {
self.renderEvents(calendar);
},
}
});
},
pageBeforeRemove() {
var self = this;
self.calendar.destroy();
},
},
}
</script>
The PHP file returns a json object like this:
{ "events" : [{ "id":"1", "title":"event n1", "date":"2020-03-03 13:00:00" } ,{ "id":"2", "title":"event n2", "date":"2020-03-06 13:30:00" } ,{ "id":"3", "title":"event n3", "date":"2020-03-12 15:00:00" } ,{ "id":"4", "title":"event n4", "date":"2020-03-08 16:30:00" } ,{ "id":"5", "title":"event n5", "date":"2020-03-16 20:30:00" } ,{ "id":"6", "title":"event n6", "date":"2020-03-13 09:00:00" } ] }
I’m working making changes in a Framework7 default template, in the default calendar sample… Solving problems step by step learning in the way… after that I need to make the reloading of data when the month changes… but first i’ve need to learn how to get the data from the database and request it in framework 7… step by step…
Now the calendar don’t show the events in the days, i can’t see what days have events, but when i click in a day it listed the events apart…
I’ve not write the most of the code… it’s just taked from the F7 example…
I’ve read something about the async request before, but I need to lear how to manage about it
Thanks a lot…