[javascript] calendario booking disponibilità

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
Buongiorno a tutti ho appena installato uno script per la visualizzazione di un calendario che evidenzia quando una camera non è disponibile.
Il tutto funziona correttamente passandogli tramite ciclo while php una data di arrivo ed una di partenza.
Ora vorrei potergli passare altre variabili all'interno del range così da visualizzare anche l'eventuale nome dell'ospite ed il prezzo da pagare.

Ecco il codice che elabora il tutto:
Codice:
(function ($) {
    var weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
    var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];


    function AvailabilityCalendar(container, bookedDates) {
        this.date = new Date();
        this.date.setDate(1);

        this.container = container;
        this.bookedDates = bookedDates;

        this.createCalendar();
        this.renderMonth();
    }


    AvailabilityCalendar.prototype = {
        /**
         * Setup methods
         */
        __createToolbar: function () {
            var $toolbar = $('<div></div>').appendTo(this.container);
            $toolbar.addClass('availability-calendar-toolbar');

            this.$monthLabel = $('<span></span>').appendTo($toolbar);
            var $inputContainer = $('<span></span>').appendTo($toolbar);

            $inputContainer.append('<input type="button" title="This month" value="This Month">');
            $inputContainer.append('<input type="button" title="Previous month" value="&#10094;">');
            $inputContainer.append('<input type="button" title="Next month" value="&#10095;">');

            var $inputs = $inputContainer.children('input');
            var self = this;

            $inputs.eq(0).on('click', function () {
                self.date = new Date();
                self.date.setDate(1);
                self.renderMonth();
            });

            $inputs.eq(1).on('click', function () {
                self.date.setMonth(self.date.getMonth() - 1);
                self.renderMonth();
            });

            $inputs.eq(2).on('click', function () {
                self.date.setMonth(self.date.getMonth() + 1);
                self.renderMonth();
            });
        },
        __createTable: function () {
            var $table = $('<table></table>').appendTo(this.container);
            $table.addClass('availability-calendar');

            // Weekday headers
            var $tr = $('<tr></tr>').appendTo($table);

            weekdays.forEach(function (day) {
                $('<th></th>').html(day).appendTo($tr);
            });

            // Day cells
            for (var i = 0; i < 6; ++i) {
                $tr = $('<tr></tr>').appendTo($table);
                $tr.append('<td></td><td></td><td></td><td></td><td></td><td></td><td></td>');
            }

            this.$cells = $table.find('td');
        },
        createCalendar: function () {
            this.__createToolbar();
            this.__createTable();
        },


        /**
         * Month rendering methods
         */
        __addPreviousMonthDays: function (date, cellIndexes, dates) {
            var firstWeekdayOfMonth = date.getDay() - 1;
            if (firstWeekdayOfMonth < 0) firstWeekdayOfMonth = 6;

            if (firstWeekdayOfMonth > 0) {
                date.setDate(0);
                var numDays = date.getDate();

                for (var i = numDays - firstWeekdayOfMonth + 1; i <= numDays; ++i) {
                    this.$cells.eq(dates.length).html(i).addClass('ex-month');

                    date.setDate(i);
                    var dateInt = date.valueOf();

                    cellIndexes[dateInt] = dates.length;
                    dates.push(dateInt);
                }
            }
        },
        __addThisMonthDays: function (date, year, month, cellIndexes, dates) {
            date.setFullYear(year, month + 1, 0); // Need to reset year
            var numDays = date.getDate();

            for (var i = 1; i <= numDays; ++i) {
                this.$cells.eq(dates.length).html(i);

                date.setDate(i);
                var dateInt = date.valueOf();

                cellIndexes[dateInt] = dates.length;
                dates.push(dateInt);
            }
        },
        __addNextMonthDays: function (date, month, cellIndexes, dates) {
            if (dates.length < 42) {
                date.setMonth(month + 1, 1);
                var remainingDays = 42 - dates.length;

                for (var i = 1; i <= remainingDays; ++i) {
                    this.$cells.eq(dates.length).html(i).addClass('ex-month');

                    date.setDate(i);
                    var dateInt = date.valueOf();

                    cellIndexes[dateInt] = dates.length;
                    dates.push(dateInt);
                }
            }
        },
        __addEvents: function (cellIndexes, dates) {
            var firstDate = dates[0];
            var lastDate = dates[dates.length - 1];
            var self = this;

            this.bookedDates.forEach(function (date) {
                if (date.start <= lastDate && date.end >= firstDate) {
                    var startIndex = cellIndexes[date.start];
                    var endIndex = cellIndexes[date.end];

                    if (startIndex !== undefined) {
                        self.$cells.eq(startIndex).addClass('unavailable').append('<div class="first"></div>');
                        ++startIndex;
                    }
                    else {
                        startIndex = cellIndexes[firstDate];
                    }

                    if (endIndex !== undefined) {
                        self.$cells.eq(endIndex).addClass('unavailable').append('<div class="last"></div>');
                        --endIndex;
                    }
                    else {
                        endIndex = cellIndexes[lastDate];
                    }

                    self.$cells.slice(startIndex, endIndex + 1).addClass('unavailable').append('<div></div>');
                }
            });
        },
        renderMonth: function () {
            var cellIndexes = {};
            var dates = [];

            var year = this.date.getFullYear();
            var month = this.date.getMonth();
            var date = new Date(year, month, 1);

            this.$monthLabel.html(months[month] + ' ' + year);
            this.$cells.removeClass('ex-month');
            this.$cells.filter('.unavailable').removeClass('unavailable').children().remove();

            this.__addPreviousMonthDays(date, cellIndexes, dates);
            this.__addThisMonthDays(date, year, month, cellIndexes, dates);
            this.__addNextMonthDays(date, month, cellIndexes, dates);

            this.__addEvents(cellIndexes, dates);
        }
    };


    $.fn.availabilityCalendar = function (bookedDates) {
        var dates = [];

        bookedDates.forEach(function (date) {
            var start = new Date(date.start);
            var end = new Date(date.end);

            start.setHours(0, 0, 0, 0);
            end.setHours(0, 0, 0, 0);

            start = start.valueOf();
            end = end.valueOf();

            if (start <= end) {
                dates.push({
                    start: start,
                    end: end
                });
            }
        });

        this.each(function () {
            new AvailabilityCalendar(this, dates);
        });

        return this;
    };
})(jQuery);

Mentre quello che stampa a video il calendario è il seguente:

PHP:
 <?php echo"<script>var unavailableDates = [";
while($result = mysqli_fetch_array($resultSet))        {          

$unixtimearrivo = $result['data_arrivo'];
$unixtimepartenza = $result['data_partenza'];
$nome_ospite= $result['nome_ospite'];
$dataarrivo = date("Y-m-d",$unixtimearrivo);
$datapartenza = date("Y-m-d",$unixtimepartenza);
           
echo"{start: '".$dataarrivo."', end: '".$datapartenza."' },";

}
echo"];$('#calendar').availabilityCalendar(unavailableDates);</script>";

?>

Il calendario evidenzia sauna data di arrivo ed una data di partenza una striscia rossa che specifica lagno disponibilità della camera.
Come potrei aggiungere un'ulteriore variabile tipo nome ospite? non sono esperto di javascript e prototype. Spero qualcuno possa indicarmi il percorso. Grazie!
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, per passare una varibile in più ti basta aggiungerla quando crei l'oggetto
PHP:
echo"{start: '" . $dataarrivo . "', end: '" . $datapartenza . "',nome:'" . $nome_ospite= 
. "' },";
poi la leggi con la sintassi di javascript, non ho provato il codice ma probabilmente la dovrai inserire qui
Codice:
.append('<div class="last">' + data.nome + '</div>');
 

maxnegri

Utente Attivo
12 Ott 2004
87
0
6
Grazie mille per la dritta. Ho trovato un altro calendario che già mi permette di passare infinite variabili. Grazie ancora!!!
 
Discussioni simili
Autore Titolo Forum Risposte Data
A [Javascript] Datepicker - il calendario non si apre Javascript 16
E [Javascript] Assegnazione variabile da campo input di tipo "a calendario" Javascript 3
Gaetano1991h Passaggio da calendario php a javascript PHP 2
D Cambio funzioni mouse in calendario Javascript Javascript 1
A errore javascript calendario scolastico Javascript 3
I Creare un banner temporaneo JavaScript Javascript 0
S Impossibile scorrere un oggetto in JavaScript Javascript 0
N Passare array da php a javascript PHP 5
L Quiz javascript funzionante da migliorare Javascript 0
P errore 404 con javascript Javascript 2
D aiuto funzioni javascript Javascript 1
M Upload immagine con javascript problemi con FormData() Javascript 1
L countdown multiplo javascript Javascript 1
S Problemi Javascript + Aruba Javascript 2
M Inviare un file su un server remoto con JavaScript Javascript 0
T a href="javascript:;" Javascript 1
F Creare elementi html con javascript Javascript 3
A pulsante di update campo mysql con javascript Javascript 2
8 Javascript - PDF Form Javascript 0
B javascript per problemi con pdf e Safari Javascript 0
N informazione javascript Programmazione 0
I Eecuzione di javascript in ciclo foreach php. PHP 7
P javascript:document.forms Javascript 7
S Consiglio esercizio Javascript Javascript 2
MarcoGrazia Aggiungere o rimuovere classi in javascript Javascript 1
P Passaggio id php a javascript PHP 6
R Confrontare il dominio di una mail con una stringa contenente un dominio personalizzato, tutto ciò in php o javascript PHP 0
E lettura da un Database con Javascript jQuery 2
V TRIS in javascript Javascript 1
IClaude Funzione Javascript Javascript 8
Alex_70 Javascript date color Javascript 3
F Convertire JavaScript per la compatibilità nei browser obsoleti Javascript 0
I Passare dei parametri in javascript PHP 0
Shyson Meglio Javascript o HTML? Javascript 4
G Problema verifica palindromo e verifica pari e dispari javascript Javascript 0
M Chiamare pagina php da javascript Javascript 8
M Errore JavaScript per php [objeto HTMLParagraphElement] PHP 0
D Javascript per il download dei dati Javascript 0
grgfede Problema javascript con aruba Javascript 1
R Cerco supporto in programmazione javascript Offerte e Richieste di Lavoro e/o Collaborazione 0
webmachine [PHP] [JAVASCRIPT] Form strano in HTML PHP PHP 1
W Modificare il Type di un Input box in javascript ovunque si trovi Javascript 0
I javascript come caricare una pagina sopra quella corrente in automatico Javascript 2
L [Javascript] Problema salvataggio dati in db Javascript 1
max1974 [Javascript] Grafico chartjs con dati da J.ajax Javascript 3
G Quiz Javascript Javascript 4
A [Javascript] Scrittura su più campi contemporaneamente Javascript 18
F classic asp popolare combo box javascript Presentati al Forum 1
claudio_lorenzo [Javascript] aiuto su jquery per calcolo altezze dom Javascript 1
F [Javascript] comando innerHTML non funziona Javascript 5

Discussioni simili