Antworten auf deine Fragen:
Neues Thema erstellen

dynamischer Kalender

G

greenwall

Guest

Hallo Leute,

ich mache hier gerade eine Website und da soll ein Kalender integriert werden. Ich habe schon sehr viel gegoogelt und im Forum gesucht aber nicht das passende gefunden.

Es ist so: stellt euch vor ihr habt eine Website wo user plätze in Kinos buchen können. Die Plätze sind natürlich begrenzt und im Kalender soll das angezeigt werden. Wenn also an einem bestimmten Tag alle Plätze reserviert sind, soll der Tag im Kalender rot erscheinen, wenn noch Plätze frei sind, dann grün und wenn gar keine reservierung möglich ist weil das Kino geschlossen hat, dann soll es grau hinterlegt sein. Dazu kommt das der User zwischen mehreren Kinos wählen kann. Er soll also aus der SQL Datenbank die möglichen freien plätze und auch die öffnungstage ziehen.

Das Buchungssystem habe ich schon programmiert und das bis jetzt nur mit einfach dropdown menüs gelöst um das Datum zu wählen. Ich brauche aber diesen Kalender mit den oben genannten funktionen.

Habt ihr irgend einen Tipp wo ich sowas finden kann? Wie gesagt, ich google bereits seit Tagen und habe nichts gefunden, langsam verzweifel ich :(
 

Chriss1987

me.drinkCoffee();

AW: dynamischer Kalender

Hi,

ich hatte mal vor ein paar Jahren einen dynamischen Kalender für php geschrieben, für unsere DLRG-Taucher, damit die sehen, wann der nächste Übungstauchgang stattfindet und ob er statt findet usw, da konnten sich die Taucher ein/austragen und sehen, wer alles mittaucht. Ich hab dir mal den Quelltext angehangen, der für das Erstellen des Kalenders verantwortlich ist. Die Termine werden als mehrd. Array übergeben ($termine[$year][$month][$day]) wobei der Value ein DB-Objekt mit entsprechenden Feldern ist. War noch aus einer Zeit, wo ich noch nicht so viel mit OOP am Hut hatte und würde ich heute bestimmt anders machen, aber als Anhaltspunkt hoffentlich zu gebrauchen. Achja, wenn ein Termin vorhanden wäre, dann könnte man auf den entsprechenden Tag klicken und es würde sich eine jQuery-Box (Colorbox) mit weiteren Infos öffnen. Kommentare wurden ein paar eingefügt. Wenn du noch Fragen hast, einfach stellen.

hier die Funktion:
PHP:
function createCalender($month, $year, $termine = array(), $small = false, $parent = false)
    {
        global $farben_typ;
        global $terminhelper;
        global $tauchtruppstaerke;
        global $sql;
        
        $return = "";
        if ($month == "13")
            {
                $month = 1;
                $year = $year + 1;
            }
        else if ($month == "0")
            {
                $month = 12;
                $year = $year - 1;
            }
        
        if ($parent)
            {
                $return .= "<table align=\"center\">\n";
                $return .= "    <tr>\n";
                $return .= "\t<td align=\"center\" onClick=\"window.location.href='?month=" . ($month - 1) . "&year=" . $year . "';\">\n";
                $return .= "<a href=\"?month=" . ($month - 1) . "&year=" . $year . "\"><img src=\"images/back_alt.png\" alt=\"zur&uuml;ck\" border=\"0\"></a>\n";
                $return .= "\t</td>\n";
                $return .= "\t<td align=\"center\">\n";
                $return .= createCalender($month - 1, $year, $termine, true, false);
                $return .= "\t</td>\n";
                $return .= "\t<td align=\"center\">\n";
            }
        
        if($small)
            {
                $height = "15px";
                $width = "15px";
                $h = "3";
                $font_size = "normal";
            }
        else
            {
                $height = "50px";
                $width = "50px";
                $h = "1";
                $font_size = "x-large";
            }
        
        // Monat 2-stellig
        $month = str_pad($month, 2, "0", STR_PAD_LEFT);

        // Anzahl der Tage des Monats ausgeben
        // $days = cal_days_in_month(CAL_GREGORIAN, $month, $year);
        $days = date("t", mktime(0, 0, 0, $month, 1, $year));

        // Wochentage zum Anzeigen
        $wochentage = array ("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa");
        
        // für Anzahl der Tage for-Schleife ausführen
        for ($day = 1; $day <= $days; $day++)
            {
                // aus dem Datum ein UNIX-Timestamp erstellen
                $unixtimestamp = mktime(0, 0, 0, $month, $day, $year);
                // nummerischen Wert des Tages auslesen #0 (für Sonntag) bis 6 (für Samstag)#
                $wochentag = date('w', $unixtimestamp);
                // Kalenderwoche auslesen
                $kalenderwoche = date('W', $unixtimestamp);
                // Wochentag ausgeben
                $wochentag = $wochentage[$wochentag];
                // Tag in ein multidemensionales Array schreiben => KW => Wochentag => Tag
                $kalender[$kalenderwoche][$wochentag] = $day;
            }
        
        // Wochentage in gewünschter Reihenfolge
        $wochentage = array ("Mo", "Di", "Mi", "Do", "Fr", "Sa", "So");
        
        // Monate
        $monate = array ("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember");

        // Monat ausgeben
        $return .= "<h$h onClick=\"$.fn.colorbox({height: '95%', width: '600px', iframe:true, href:'modules/anfrage_neu.php?action=monat&date=" . $month . "-" . $year . "', open:true});\" style=\"cursor:pointer;\">" . $monate[date("n", $unixtimestamp)-1] . " " . $year . "</h$h>\n";
        
        // Kopfzeile ausgeben
        $return .= "<table border=\"1\" cellpadding=\"5\" cellspacing=\"0\" align=\"center\">
    <tr style=\"background-color: #e0e0e0; font-size: $font_size; font-weight:bold; text-align: center;\">
        <td style=\"width: $width;\"><b>KW</b></td>
        <td style=\"width: $width;\"><b>Mo</b></td>
        <td style=\"width: $width;\"><b>Di</b></td>
        <td style=\"width: $width;\"><b>Mi</b></td>
        <td style=\"width: $width;\"><b>Do</b></td>
        <td style=\"width: $width;\"><b>Fr</b></td>
        <td style=\"width: $width;\"><b>Sa</b></td>
        <td style=\"width: $width;\"><b>So</b></td>
    </tr>\n";
        
        // Array durchlaufen und KW-Zeilen ausgeben
        foreach ($kalender AS $KW => $date)
            {
                $return .= "    <tr style=\"height: $height; vertical-align: middle; text-align: center;\">\n";
                $return .= "\t<td style=\"background-color: #e0e0e0;\"><b>" . $KW . "</b></td>\n";
                foreach ($wochentage AS $wochentag)
                    {   
                        if (isset($date[$wochentag]))
                            {
                                $day = str_pad($date[$wochentag], 2, "0", STR_PAD_LEFT);
                                if (isset($termine[$year][$month][$day]))
                                    {
                                        $zusagen = $sql->select("SELECT id FROM termine_user WHERE status=0 AND termin='" .  $termine[$year][$month][$day]->id ."'");
                                        if (count($zusagen) < $tauchtruppstaerke AND $termine[$year][$month][$day]->typ != 2 AND $termine[$year][$month][$day]->status == 0)
                                            {
                                                $termine[$year][$month][$day]->status = 4;
                                            }
                                        
                                        $farbe = $farben_typ[$termine[$year][$month][$day]->typ][$termine[$year][$month][$day]->status][0];
                                        if ($termine[$year][$month][$day]->tbis > 0)
                                            {
                                                // wenn Termin über einen Zeitraum geht, Folgetage markieren
                                                for ($i = $termine[$year][$month][$day]->tdatum; $i <= $termine[$year][$month][$day]->tbis; $i = $i + 86400)
                                                    {
                                                        $year_h = date("Y", $i);
                                                        $month_h = date("m", $i);
                                                        $day_h = date("d", $i);
                                                        
                                                        if (isset($terminhelper[$year_h][$month_h][$day_h]))
                                                            {
                                                                $terminhelper[$year_h][$month_h][$day_h] .= $farbe;
                                                            }
                                                        else
                                                            {
                                                                $terminhelper[$year_h][$month_h][$day_h] = $farbe;
                                                            }
                                                    }
                                            }
                                                
                                        if (isset($terminhelper[$year][$month][$day]))
                                            {
                                                $farbe .= ";" . $terminhelper[$year][$month][$day];
                                            }
                                        
                                        $status = $termine[$year][$month][$day]->status;
                                        // $farbe = " style=\"background-color: rgb(" . $farben_status[$status][0] . ", " . $farben_status[$status][1] . ", " . $farben_status[$status][2] . "); color: " . $farben_status[$status][3] . ";\"";
                                        // $farbe = "onClick=\"jQuery.facebox(function(date){jQuery.get('modules/anfrage.php?date=" . $year . "-" . $month . "-" . $date[$wochentag] . "', function(data) {jQuery.facebox(data)})});\" style=\"background-image: url(images/color.php?farben=$farbe); cursor:pointer;\"";
                                        $farbe = "onClick=\"$.fn.colorbox({height: '95%', width: '600px', iframe:true, href:'modules/anfrage_neu.php?date=" . $date[$wochentag] . "-" . $month . "-" . $year . "', open:true});\" style=\"background-image: url(images/color.php?farben=$farbe); cursor:pointer;\"";
                                        $b = "<b>";
                                        $be = "</b>";
                                    }
                                else
                                    {
                                        if (isset($terminhelper[$year][$month][$day]))
                                            {
                                                $farbe = $terminhelper[$year][$month][$day];
                                                $farbe = "style=\"background-image: url(images/color.php?farben=$farbe); cursor:pointer;\" onClick=\"$.fn.colorbox({height: '95%', width: '600px', iframe:true, href:'modules/anfrage_neu.php?date=" . $date[$wochentag] . "-" . $month . "-" . $year . "', open:true});\" style=\"background-image: url(images/color.php?farben=$farbe); cursor:pointer;\"";
                                            }
                                        else
                                            {
                                                $farbe = "onClick=\"$.fn.colorbox({height: '95%', width: '600px', iframe:true, href:'modules/anfrage_neu.php?date=" . $date[$wochentag] . "-" . $month . "-" . $year . "', open:true});\" style=\"cursor:pointer;\"";
                                            }
                                        $b = $be = "";
                                    }
                            }
                        else
                            {
                                $farbe = "";
                                $b = $be = "";
                            }
                        
                        if (isset($date[$wochentag]))
                            {
                                $return .= "\t<td onmouseout=\"UnTip();abbrechen();\"$farbe>$b" . $date[$wochentag] . "$be</td>\n";
                            }
                        else
                            {
                                $return .= "\t<td>&nbsp;</td>\n";
                            }
                    }
                $return .= "    </tr>\n";
            }
        $return .= "</table>\n";
        
        if ($parent)
            {
                $return .= "\t</td>\n";
                $return .= "\t<td align=\"center\">\n";
                $return .= createCalender($month + 1, $year, $termine, true, false);
                $return .= "\t</td>\n";
                $return .= "\t<td align=\"center\" onClick=\"window.location.href='?month=" . ($month + 1) . "&year=" . $year . "';\">\n";
                $return .= "<a href=\"?month=" . ($month + 1) . "&year=" . $year . "\"><img src=\"images/forward_alt.png\" alt=\"zur&uuml;ck\" border=\"0\"></a>\n";
                $return .= "\t</td>\n";
                $return .= "    </tr>\n";
                $return .= "</table>\n";
            }
        
        return $return;
    }

und ein Beispielaufruf:
PHP:
if (isset($_GET['month']))
    {
        $month = $_GET['month'];
    }
else
    {
        $month = date("m");
    }

if (isset($_GET['year']))
    {
        $year = $_GET['year'];
    }
else
    {
        $year = date("Y");
    }

echo createCalender($month, $year, array(), false, true);

HTH
Schöne Grüße aus dem Sauerland!
Chriss
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben