29.Mai
2010

PHP – Kalender

Klar kann man einen kleinen Kalender recht einfach in JavaScript in seine Website einbauen. Aber hier möchte ich gerne mal einen anderen Weg gehen und einen Kalender in PHP erstellen. Um es genauer zu sagen: Ich werde zeigen, wie man eine eigene Kalender-Klasse erstellt, die man dann in seine Struktur einbauen und bei sinnvoller Strukturierung an mehreren Stellen verwenden kann. Das Ganze auch noch mit dynamischen Styles. ;-)

Beginnen wir zunächst einmal mit dem Erstellen eines neuen PHP-Files, welches wir Calender.php nennen. Außerdem erstellen wir ein weiteres PHP-File, dem wir den Namen CalenderStyles.php geben.

Da es nun einige Leute gibt, die sich (leider) nicht die Mühe machen und solche Beiträge lesen, sondern einfach das Codeing kopieren, werde ich nun zunächst den Code der beiden Files hier einfügen und im Anschluss die einzelnen Arbeitsschritte erklären. Die Kommentare habe ich in diesem Codeing bewusst weggelassen, da die einzelnen Schritte ja von mir erklärt werden. Weiter muss ichkurz anmerken, dass in diesem Beispiel Zend_Date verwendet wird, da ich überwiegend mit dem Zend-Framework arbeite, natürlich kann man an den entsprechenden Stellen auch das PHP eigene “date” verwenden.

Calender.php

<?php
class Calender {

  private $_selectedMonth;

  private $_selectedYear;

  private $_selectedDay;

  private $_currentMonth;

  private $_currentYear;

  private $_currentDay;

  private $_prevYear;

  private $_prevMonth;

  private $_nextYear;

  private $_nextMonth;

  private $_timestamp;

  private $_maxday;

  private $_thisMonth;

  private $_startday;

  private $_monthNames = array('Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember');

  private $_dayNames = array('Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag');

  private $_date;
  public function __construct() {
    $this->_date = new Zend_Date();
  }

  public function selectDates ($year = null, $month = null, $day = null) {

    if ($month == null) {
      $month = $this->_date->get('MM');
    }
    if ($year == null) {
      $year = $this->_date->get('YYYY');
    }
    if ($day == null) {
      $day = $this->_date->get('dd');
    }

    $this->_selectedMonth = $month;
    $this->_selectedYear = $year;
    $this->_selectedDay = $day;

    $this->_prevYear = $this->_selectedYear;
    $this->_nextYear = $this->_selectedYear;

    $this->_prevMonth = $this->_selectedMonth -1;
    $this->_nextMonth = $this->_selectedMonth +1;
    if ($this->_prevMonth == 0 ) {
      $this->_prevMonth = 12;
      $this->_prevYear = $this->_selectedYear - 1;
    }
    if ($this->_nextMonth == 13 ) {
      $this->_nextMonth = 1;
      $this->_nextYear = $this->_selectedYear + 1;
    }

    $this->_timestamp = mktime(0, 0, 0, $this->_selectedMonth, 1, $this->_selectedYear);
    $this->_maxday = date('t', $this->_timestamp);
    $this->_thisMonth = getdate ($this->_timestamp);
    $this->_startday = $this->_thisMonth['wday'];
  }
  public function buildCalender ($calenderStyle) {
    $this->_currentMonth = $this->_date->get('MM');
    $this->_currentYear = $this->_date->get('YYYY');
    $this->_currentDay = $this->_date->get('dd');

    $calenderHead = '<table>
                       <tr>
                         <td>
                         <table>
                           <tr>
                             <td>&nbsp;&nbsp;<a href="' . $_SERVER["PHP_SELF"] . '?month=' . $this->_prevMonth . '&year=' . $this->_prevYear . '&day=1">Vorheriger</a></td>
                             <td><a href="' . $_SERVER["PHP_SELF"] . '?month=' . $this->_nextMonth . '&year=' . $this->_nextYear . '&day=1">N&auml;chster</a>&nbsp;&nbsp;</td>
                           </tr>
                         </table>
                         </td>
                       </tr>
                       <tr>
                         <td>
                         <table>
                           <tr>
                             <td><strong>' . $this->_monthNames[$this->_selectedMonth -1] . ' ' . $this->_selectedYear . '</strong></td>
                           </tr>
                           <tr>
                             <td><strong>So</strong></td>
                             <td><strong>Mo</strong></td>
                             <td><strong>Di</strong></td>
                             <td><strong>Mi</strong></td>
                             <td><strong>Do</strong></td>
                             <td><strong>Fr</strong></td>
                             <td><strong>Sa</strong></td>
                           </tr>';

    $calenderDays = '';
    for ($i = 0; $i < ($this->_maxday + $this->_startday); $i++) {
      if(($i % 7) == 0 ) {
        $calenderDays = $calenderDays . "<tr>\n";
      }
      if($i < $this->_startday) {
        $calenderDays = $calenderDays . "<td></td>\n";
      } else {
        if (($i - $this->_startday + 1) == $this->_selectedDay && ($i - $this->_startday + 1) == $this->_currentDay && $this->_selectedMonth == $this->_currentMonth && $this->_selectedYear == $this->_currentYear) {
          $calenderDays = $calenderDays . "<td class='" . $calenderStyle->selectedCurrentDate . "'><a href=" . $_SERVER['PHP_SELF'] . "?month=". $this->_selectedMonth . "&year=" . $this->_selectedYear . "&day=" . ($i - $this->_startday + 1) . " class='" . $calenderStyle->selectedCurrentDateATag . "'>". ($i - $this->_startday + 1) . "</a></td>\n";
        } else if (($i - $this->_startday + 1) != $this->_selectedDay && ($i - $this->_startday + 1) == $this->_currentDay && $this->_selectedMonth == $this->_currentMonth && $this->_selectedYear == $this->_currentYear) {
          $calenderDays = $calenderDays . "<td class='" . $calenderStyle->currentDate . "'><a href=" . $_SERVER['PHP_SELF'] . "?month=". $this->_selectedMonth . "&year=" . $this->_selectedYear . "&day=" . ($i - $this->_startday + 1) . " class='" . $calenderStyle->currentDateATag . "'>". ($i - $this->_startday + 1) . "</a></td>\n";
        } else if (($i - $this->_startday + 1) == $this->_selectedDay && ($i - $this->_startday + 1) != $this->_currentDay) {
          $calenderDays = $calenderDays . "<td class='" . $calenderStyle->selectedDate . "'><a href=" . $_SERVER['PHP_SELF'] . "?month=". $this->_selectedMonth . "&year=" . $this->_selectedYear . "&day=" . ($i - $this->_startday + 1) . " class='" . $calenderStyle->selectedDateATag . "'>". ($i - $this->_startday + 1) . "</a></td>\n";
        } else {
          $calenderDays = $calenderDays . "<td class='" . $calenderStyle->dates . "'><a href=" . $_SERVER['PHP_SELF'] . "?month=". $this->_selectedMonth . "&year=" . $this->_selectedYear . "&day=" . ($i - $this->_startday + 1) . " class='" . $calenderStyle->datesATag . "'>". ($i - $this->_startday + 1) . "</a></td>\n";
        }
      }
      if(($i % 7) == 6 ) {
        $calenderDays = $calenderDays . "</tr>\n";
      }
    }

    $calenderEnd = '</table>
                    </td>
                    </tr>
                    </table>';

    $calender = $calenderHead . $calenderDays . $calenderEnd;

    return $calender;
  }

  public function getDayName ($day) {
    $name = $this->_dayNames[($day + $this->_startday -1) % 7];

    return $name;
  }
}

Property.php

<?php

class Property {

  public $outerTable;

  public $monthTr;

  public $prevNextMonthTd;

  public $monthTable;

  public $prevMonthTd;

  public $prevMonthATag;

  public $nextMonthTd;

  public $nextMonthATag;

  public $monthDaysNamesTd;

  public $monthDaysNamesTable;

  public $monthDaysNamesTr;

  public $currentMonthTd;

  public $daysNamesTd;

  public $selectedCurrentDate;

  public $selectedCurrentDateATag;

  public $currentDate;

  public $currentDateATag;

  public $selectedDate;

  public $selectedDateATag;

  public $dates;

  public $datesATag;

}

So, wie gesagt für die Leute, die einfach nur Code kopieren und sich nciht mit der Erklärung befassen, die können sich nun das Codeing kopieren. Für alle anderen Leute folgt nun die Erklärung:

Calender.php

Zunächst beginnen wir mit der Deklaration der Variablen. Ich denke das bedarf keiner großen Erklärung, da einfach nur die Namen vergeben werden.

<?php
class Calender {

  private $_selectedMonth;

  private $_selectedYear;

  private $_selectedDay;

  private $_currentMonth;

  private $_currentYear;

  private $_currentDay;

  private $_prevYear;

  private $_prevMonth;

  private $_nextYear;

  private $_nextMonth;

  private $_timestamp;

  private $_maxday;

  private $_thisMonth;

  private $_date;

  private $_startday;

Eine Ausnahme sind die folgenden zwei Variablen:

  private $_monthNames = array('Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember');

  private $_dayNames = array('Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag');

Das Array $_monthNames nimmt, wie man schon sieht und auch am Namen der Variable erkennt die Namen für die einzelnen Monate eines Jahres auf, während das Array $_dayNames die Namen der jeweiligen Wochentage aufnimmt.

Im Constructor wird der Variable $_date lediglich eine neue Instanz von Zend_Date zugewiesen, damit Zend_Date jederzeit in dieser Klasse verfügbar ist, wenn diese in anderen PHP-Files eingebunden wird. Klar, Zend_Date brauchen wir, schließlich braucht man für die Darstellung eines Kalenders auch das Datum bzw. die Daten:

  public function __construct() {
    $this->_date = new Zend_Date();
  }

Weiter geht es mit der Funktion selectDates(), die schon etwas mehr beinhaltet, als der Constructor:

  public function selectDates ($year = null, $month = null, $day = null) {

    // Prüfen, ob User ein Datum gewählt hat oder der Default-Wert gesetzt ist und bei Default-Wert (null) das aktuelle Datum zuordnen.
    if ($month == null) {
      $month = $this->_date->get('MM');
    }
    if ($year == null) {
      $year = $this->_date->get('YYYY');
    }
    if ($day == null) {
      $day = $this->_date->get('dd');
    }

    $this->_selectedMonth = $month;
    $this->_selectedYear = $year;
    $this->_selectedDay = $day;

    // Werte zur Anzeige des nächsten / vorherigen Jahres setzen.
    $this->_prevYear = $this->_selectedYear;
    $this->_nextYear = $this->_selectedYear;

    // Werte zur Anzeige des nächsten / vorherigen Monats setzen.
    $this->_prevMonth = $this->_selectedMonth -1;
    $this->_nextMonth = $this->_selectedMonth +1;

    if ($this->_prevMonth == 0 ) {
      $this->_prevMonth = 12;
      $this->_prevYear = $this->_selectedYear - 1;
    }

    if ($this->_nextMonth == 13 ) {
      $this->_nextMonth = 1;
      $this->_nextYear = $this->_selectedYear + 1;
    }

    // Startdatum des Monats berechnen / setzen.
    $this->_timestamp = mktime(0, 0, 0, $this->_selectedMonth, 1, $this->_selectedYear);
    $this->_maxday = date('t', $this->_timestamp);
    $this->_thisMonth = getdate ($this->_timestamp);
    $this->_startday = $this->_thisMonth['wday'];
}

Die Funktion sieht vielleicht auf den ersten Blick etwas kompliziert aus, ist sie aber absolut nicht. Eigentlich ist die Funktion ganz schnell erklärt. Der Funktion werden Paramter übergeben bzw. können übergeben werden, bei denen der Default-Wert null ist. Diese Parameter stehen, wie man an deren Bezeichnungen schon erkennt für den Monat, das Jahr und den Tag, die der User auswählt bzw. die das aktuelle Datum widerspiegeln. Diese Parameter 7 Variablen werden nun auf einen Wert überprüft. Sollte eine dieser Variablen den Default-Wert besitzen, wird der jeweiligen Variable der aktuelle Datumswert zugewiesen via $this->_date->get(). Im nächsten Schritt werden die Werte dann den Variablen für die spätere Anzeige übergeben, sprich die Für die Anzeige des aktuelle gewählten Datum und die Links für das vorherige / nächste Jahr bzw. den vorherigen / nächsten Monat. Am Ende der Funktion wird nun noch der Wert für die Variable $this->_startday anhand der gewählten Daten und der Anzahl der Monatstage und Wochentage gesetzt. Diese Wert dient später dazu, den 1. eines jeden Monats auf den richtigen Tag zu legen, aber dazu später noch mehr.

Die nächste Funktion baut nun den eigentlichen Kalender zusammen. auf Grund der Komplexität dieser Funkttion splitte ich die Erklärung ein wenig auf, um besser den Durchblick zu behalten.

  public function buildCalender ($calenderStyle) {
    // Aktuelle Datums-Werte vergeben.
    $this->_currentMonth = $this->_date->get('MM');
    $this->_currentYear = $this->_date->get('YYYY');
    $this->_currentDay = $this->_date->get('dd');

    $calenderHead = '<table>
                       <tr>
                         <td>
                         <table>
                           <tr>
                             // Name für vorherigen / nächsten Monat auslesen und in Kalender-Kopf einfügen.
                             <td>&nbsp;&nbsp;<a href="' . $_SERVER["PHP_SELF"] . '?month=' . $this->_prevMonth . '&year=' . $this->_prevYear . '&day=1">Vorheriger</a></td>
                             <td><a href="' . $_SERVER["PHP_SELF"] . '?month=' . $this->_nextMonth . '&year=' . $this->_nextYear . '&day=1">N&auml;chster</a>&nbsp;&nbsp;</td>
                           </tr>
                         </table>
                         </td>
                       </tr>
                       <tr>
                         <td>
                         <table>
                           <tr>
                             // Name für aktuellen Monat auslesen und in Kalender einfügen.
                             <td><strong>' . $this->_monthNames[$this->_selectedMonth -1] . ' ' . $this->_selectedYear . '</strong></td>
                           </tr>
                           <tr>
                             // Namenskürzel für die einzelnen Wochentage festlegen.
                             <td><strong>So</strong></td>
                             <td><strong>Mo</strong></td>
                             <td><strong>Di</strong></td>
                             <td><strong>Mi</strong></td>
                             <td><strong>Do</strong></td>
                             <td><strong>Fr</strong></td>
                             <td><strong>Sa</strong></td>
                           </tr>';

    $calenderDays = '';

Zuerst werden der aktuelle Tag, der aktuelle Monat und das aktuelle Jahr an die entsprechenden Variablen übergeben. Dann wird der Kopf des Kalenders zusammengestellt, sprich der Teil des Kalenders, der den gewählten Monat, das gewählte Jahr und die Verlinkung zum nächsten / vorherigen Monat enthält. Wie man sieht enthält die Variable $calenderHead lediglich einige HTML-Tags, die eine Tabelle bilden. Hier kann man natürlich seiner Fantasie freien Lauf lassen, wie der Aufbau aussehen soll, aber ich empfehle diese Form beizuhalten. Durch $_SERVER["PHP_SELF"] wird der Pfad gesetzt für die Verlinkung zum nächsten / vorherigen Monat. Diesem Pfad wird dann jeweils ein Parameter angehangen (month) und der Wert der Variable, die den nächsten bzw. vorherigen Monat darstellt. Weiter wird aus dem Array, welches die Monatsnamen enthält der aktuelle Monat herausgezogen. Hierzu wird einfach der numerische Wert des gewählten Monats minus 1 gerechnet (da ein Array immer bei 0 anfängt zu zählen) und der Name an der dem Ergebnis entsprechenden Stelle ausgelesen. Dann werden noch die Namen für die einzelnen Tage vergeben. Ich benutze hier die üblichen deutschen Kürzel, die man natürlich je nach belieben ändern kann. Die Variable $calenderDays wird als leerer String angelegt, diese wird im nächsten Schritt verarbeitet:

    for ($i = 0; $i < ($this->_maxday + $this->_startday); $i++) {
      // Neue Zeile einleiten, wenn eine Woche durchlaufen ist.
      if(($i % 7) == 0 ) {
        $calenderDays = $calenderDays . "<tr>\n";
      }
      // Ein leeres Feld setzen, wenn der Wert von $i noch unter dem 1. des Monats liegt.
      if($i < $this->_startday) {
        $calenderDays = $calenderDays . "<td></td>\n";
      } else {
        // Styles für die jeweiligen Tage setzen. td-Tags mit Styles und Werten als Stringaddition an String $calenderDays anhängen.
        if (($i - $this->_startday + 1) == $this->_selectedDay && ($i - $this->_startday + 1) == $this->_currentDay && $this->_selectedMonth == $this->_currentMonth && $this->_selectedYear == $this->_currentYear) {
          $calenderDays = $calenderDays . "<td class='" . $calenderStyle->selectedCurrentDate . "'><a href=" . $_SERVER['PHP_SELF'] . "?month=". $this->_selectedMonth . "&year=" . $this->_selectedYear . "&day=" . ($i - $this->_startday + 1) . " class='" . $calenderStyle->selectedCurrentDateATag . "'>". ($i - $this->_startday + 1) . "</a></td>\n";
        } else if (($i - $this->_startday + 1) != $this->_selectedDay && ($i - $this->_startday + 1) == $this->_currentDay && $this->_selectedMonth == $this->_currentMonth && $this->_selectedYear == $this->_currentYear) {
          $calenderDays = $calenderDays . "<td class='" . $calenderStyle->currentDate . "'><a href=" . $_SERVER['PHP_SELF'] . "?month=". $this->_selectedMonth . "&year=" . $this->_selectedYear . "&day=" . ($i - $this->_startday + 1) . " class='" . $calenderStyle->currentDateATag . "'>". ($i - $this->_startday + 1) . "</a></td>\n";
        } else if (($i - $this->_startday + 1) == $this->_selectedDay && ($i - $this->_startday + 1) != $this->_currentDay) {
          $calenderDays = $calenderDays . "<td class='" . $calenderStyle->selectedDate . "'><a href=" . $_SERVER['PHP_SELF'] . "?month=". $this->_selectedMonth . "&year=" . $this->_selectedYear . "&day=" . ($i - $this->_startday + 1) . " class='" . $calenderStyle->selectedDateATag . "'>". ($i - $this->_startday + 1) . "</a></td>\n";
        } else {
          $calenderDays = $calenderDays . "<td class='" . $calenderStyle->dates . "'><a href=" . $_SERVER['PHP_SELF'] . "?month=". $this->_selectedMonth . "&year=" . $this->_selectedYear . "&day=" . ($i - $this->_startday + 1) . " class='" . $calenderStyle->datesATag . "'>". ($i - $this->_startday + 1) . "</a></td>\n";
        }
      }
      if(($i % 7) == 6 ) {
        $calenderDays = $calenderDays . "</tr>\n";
      }
    }

Nun wird der Teil des Kalenders erstellt, der die Daten anzeiget (1, 2, 3, 4, 5, usw….). Das Ganze läuft in einer For-Schleife, die so lange läuft, wie $i nicht größer ist, als das Ergebnis der Anzahl der maximalen Tage des Monats + dem Wert des Srat-Tages. In der ersten If-Anweisung wird nun geprüft, ob der Wert von $i durch 7 gleich 0 ist. Ist dies der Fall, wird eine neue Zeile eingeleitet, sprich der nächste Wert wird wieder auf den Sonntag gelegt, da in diesem Beispiel jede Woche mit dem Sonntag beginnt. Im nächsten Schritt wird geprüft, ob $i noch kleiner ist als der Wert des Start-Tages. Dies bedeutet, dass wenn der Wert kleiner ist, einfach ein “leerer” Tag eingefügt wird, sprich wenn der Start-Tag, also der 1. des Monats ein Freitag ist, dann besitzt dieser den numerischen Wert 6. Solange nun $i kleiner ist als 6, bleiben die anderen tage leer, also Sonntag, Montag, Dienstag, Mittwoch und Donnerstag, somit liegt der 1. des Monats wie gewollt auf dem Freitag und nicht auf dem Sonntag. In meinem Beispiel habe ich dann im folgenden Verlauf der Schleife, wennd er Wert von $i größer ist, als der Start-Tag drei Abfragen eingabaut. Diese Abfragen greifen entweder, wenn der aktuell vom User gewählte Tag auch der aktuelle Tag ist, wenn der gewählte Tag nicht dem aktuellen Tag entspricht und wenn der Tag, der gerade in der Schleife behandelt wird der aktuelle Tag ist. Kurz zur Erklärung dieser Abfragen muss ich sagen, dass diese lediglich bewirken, dass der aktuelle Tag in einer anderen Farbe angezeigt wird, als die anderen Tage, dass der gewählte Tag in einer anderen Farbe eingerahmt wird, wenn er der aktuelle Tag ist, als wie wenn er nicht der aktuelle Tag ist. Klingt kompliziert….. Ist es aber nicht! ;-)

Hier sieht man übrigens schon, dass für die Styles Klassen eines Stylesheets verwendet werden bzw. an dieser Stelle die entsprechenden Variablen aus der Klasse Property, die später noch in diesem Artikel behandelt und erklärt wird. Also zunächst einmal hinnehmen, dass hier eine Klasse z.B. den Namen $calenderStyle->currentDate besitzt, dies wird noch erläutert. $calenderStyle, soviel kann ich schon mal verraten, ist die Klasse Property.

Zum Schluss dieser Funktion wird nun noch das Ende des Kalenders erstellt. Dieses schließt einfach nur die zuvor im Kopf geöffneten Tags, nicht mehr und nicht wenige. ;-)

    $calenderEnd = '</table>
                    </td>
                    </tr>
                    </table>';

    $calender = $calenderHead . $calenderDays . $calenderEnd;

    return $calender;
  }

Weiter werden die drei Teile (Kopf, Tage, Ende) in der Variable (String) $calender zusammengesetzt und via return zurückgegeben. Und siehe da….. Wire haben einen Kalender…. :-)

Eine kleine Zusatz-Funktion habe ich bei mir noch eingebaut, die einfach vom aktuell gewählten Tag den namen aus dem Array holt und zurückgibt, somit kann ich mir an gegebener Stelle einen String bilden, der z.B. besagt “Samstag, den 29.05.2010″. Wer dies nicht braucht, lässt es weg….

  public function getDayName ($day) {
    $name = $this->_dayNames[($day + $this->_startday -1) % 7];

    return $name;
  }
}

Damit haben wir die Calender.php auch schon abgeschlossen. Nun die Erklärung, wie man die Styles, die ja hier als PHP-Variable in den Tags übergeben wurden dynamisch gestalten kann. Dazu nehmen wir uns die Poperty-Klasse vor.

Property.php

Wir wissen aus dem obigen Text schon, dass diese Klasse an der gewünschten Stelle (bei mir im Controller) komplett an die Klasse Calender in die Funktion buildCalender() übergeben wird. Vielleicht ist einigen nun schon klar, wie das Ganze funktioniert, aber ich erkläre es natürlich trotzdem. Die Klasse Property enthält lediglich Variablen, die in der Funktion in der Calender.php einfach über $CalenderStyles->VARIABLE an den sntsprechenden Stellen gesetzt sind.

<?php

class Property {

  public $outerTable;

  public $monthTr;

  public $prevNextMonthTd;

  public $monthTable;

  public $prevMonthTd;

  public $prevMonthATag;

  public $nextMonthTd;

  public $nextMonthATag;

  public $monthDaysNamesTd;

  public $monthDaysNamesTable;

  public $monthDaysNamesTr;

  public $currentMonthTd;

  public $daysNamesTd;

  public $selectedCurrentDate;

  public $selectedCurrentDateATag;

  public $currentDate;

  public $currentDateATag;

  public $selectedDate;

  public $selectedDateATag;

  public $dates;

  public $datesATag;

}

Hier muss man natürlich wissen, welche Variable wo als CSS-Klassenname steht, denn jetzt kommt der Trick…. ;-)

Ich vergebe bei mir im Controller (wenn ihr eine andere Struktur nutzt, dann da, wo die Klasse Property aufgerufen wird) ganz einfach den einzelnen Variablen aus der Klasse Property verschiedene Werte, die den Klassennamen im Stylesheet entsprechen. Anschließend erst übergebe ich die geamte Klasse an die Funktion in der Calender.php, d.h. die Variablen, die wie oben schon beschrieben im Kalender eingesetzt werden sind nun alle mit dem Klassennamen des Stylesheets belegt, der für die jeweilige Stelle benutzt werden soll um das Styling darzustellen. Wenn wir nun das Ganze ausgeben in der View, dann erhalten wir (Quelltext im Browser mal ansehen) eine einfache HTML Tabelle, die an den entsprechenden Stellen Klassen des Stylesheets aufruft, als wäre hier gar kein PHP vorhanden. ;-)

Na? Alles Verstanden? :-D

Ich hoffe, ich konnte das soweit einleuchtend erklären. Einige werden sich sicherlich Fragen, wieso so ein Aufwand, für einen kleinen Kalender???!!! Auf die Frage gehe ich natürlich gerne ein:

- Wenn man eine komplexe Webapplikation aufbauen möchte, die an einigen Stellen einen solchen Kalender braucht bzw. in verschiedenen Modulen und diese dann jeweils unterschiedlich aussehen sollen, weil vielleicht das ganze Modul einen grundlegend anderen Style aufweist, dann braucht man nicht 50 verschiedene Kalender zu entwerfen via JavaScript, sondern aht über den Modulen seine Klassen Calender und Property, die man an den gegebenen Stellen einfach einfügt und mit seinen benötigten Styles belegt. Gut oder?

Also einmal ein wenig Arbeit investieren, dafür gerade bei komplexeren Anwendungen im weitern Verlauf eine menge Arbeit sparen. ;-)

Vielen Danke, für das Lesen dieser Erklärung zum Bau einer Kalender-Klasse! Zum Schluss bitte ich noch um einen kurzen Kommentar. Falls noch Fragen sind oder ihr Probleme habt, soll heißen ihr bekommt den Kalender nicht zum Laufen oder blick bei meiner Erklärung noch nicht ganz durch, dann nutzt einfach die Kommentar-Funktion und schreibt mir, ich helfe gerne weiter.

Bis dahin!

Daniel.




Geschrieben am 29.05.2010 von Daniel Klein in PHP. 0 Kommentare.