Folgender Kalender wurde in PHP geschrieben und wird über eine einfache Funktion erzeugt:
mkKalender( [Jahreszahl(int)],[Monat(int)];
Die Parameter sind optional. Lässt man diese weg wird der Kalender für das komplette aktuelle Jahr erstellt.
Wie immer währe Feedback großartig, und ein Hinweiß von wem der Kalender kommt als kleine Fußnote währe auch wünschenswert.
Seid bitte so fair und gebt weiter woher ihr eure Codes bezieht.
function mkKalender($Jahr = "no", $Monat = "no"){
if($Jahr == "no"){
$Jahr = date("Y", time());
}
if($Monat=="no"){
echo "<table summary=\"Kalender\" class=\"kalender\">\n <tr>\n";
echo " <th colspan=\"7\">".$Jahr."</th>\n </tr>\n";
for($i = 1; $i <= 12; $i++){
echo " <tr>\n <td colspan=\"7\" class=\"monat\">".$Bezeichnungen["Monat"][$i]."</td>\n";
echo " </tr>\n";
echo " <tr>\n";
for($k = 1; $k<=7; $k++){
echo " <td class=\"wochentage\">".$Bezeichnungen["Wochentag"][$k]."</td>\n";
}
echo " </tr>\n";
$Zeilenpos = Wochentag(1, $i, $Jahr);
for($k=1; $k<$Zeilenpos; $k++){
if($k == 1){
echo " <tr>\n";
}
echo " <td class=\"prev_month\"> </td>\n";
}
$Tage = Monatstage($i, $Jahr);
for($j = 1; $j <= $Tage; $j++){
if($Zeilenpos == 1){
echo " <tr>\n";
}
echo " <td>".$j."</td>\n";
$Zeilenpos++;
if($Zeilenpos>7){
echo " </tr>\n";
$Zeilenpos=1;
}
}
if($Zeilenpos != 1){
for($k=$Zeilenpos; $k<=7; $k++){
echo " <td class=\"next_month\"> </td>\n";
}
echo " </tr>\n";
}
}
echo "</table>";
}else{
$i = $Monat;
echo "<table summary=\"Kalender\" class=\"kalender\">\n <tr>\n";
echo " <th colspan=\"7\">".$Bezeichnungen["Monat"][$i]." - ".$Jahr."</th>\n";
echo " </tr>\n";
echo " <tr>\n";
for($k = 1; $k<=7; $k++){
echo " <td class=\"wochentage\">".$Bezeichnungen["Wochentag"][$k]."</td>\n";
}
echo " </tr>\n";
$Zeilenpos = Wochentag(1, $i, $Jahr);
for($k=1; $k<$Zeilenpos; $k++){
if($k == 1){
echo " <tr>\n";
}
echo " <td class=\"prev_month\"> </td>\n";
}
$Tage = Monatstage($i, $Jahr);
for($j = 1; $j <= $Tage; $j++){
if($Zeilenpos == 1){
echo " <tr>\n";
}
echo " <td>".$j."</td>\n";
$Zeilenpos++;
if($Zeilenpos>7){
echo " </tr>\n";
$Zeilenpos=1;
}
}
if($Zeilenpos != 1){
for($k=$Zeilenpos; $k<=7; $k++){
echo " <td class=\"next_month\"> </td>\n";
}
echo " </tr>\n";
}
echo "</table>";
}
}
function Wochentag($Tag, $Monat, $Jahr, $Typ="zahl"){
if($Typ=="zahl"){
$date = date("w", mktime(0, 0, 0, $Monat, $Tag, $Jahr));
if($date==0){
$date=7;
}
}else if($Typ == "text_kurz"){
$date = date("D", mktime(0, 0, 0, $Monat, $Tag, $Jahr));
}else if($Typ == "text_lang"){
$date = date("l", mktime(0, 0, 0, $Monat, $Tag, $Jahr));
}
return $date;
}
function Monatstage($Monat, $Jahr){
$schaltjahr = date("t", mktime(0, 0, 0, $Monat, 1, $Jahr));
return $schaltjahr;
}
Die Bezeichnungen werden in einem Array gespeichert welches in der Funktion zur Verfügung stehen muss.
Wie ihr das dort anlegen lasst überlasse ich euch ;-)
$Bezeichnungen = array(); $Bezeichnungen["Monat"] = array(); $Bezeichnungen["Monat"][1] = "Januar"; $Bezeichnungen["Monat"][2] = "Febuar"; $Bezeichnungen["Monat"][3] = "März"; $Bezeichnungen["Monat"][4] = "April"; $Bezeichnungen["Monat"][5] = "Mai"; $Bezeichnungen["Monat"][6] = "Juni"; $Bezeichnungen["Monat"][7] = "Juli"; $Bezeichnungen["Monat"][8] = "August"; $Bezeichnungen["Monat"][9] = "September"; $Bezeichnungen["Monat"][10] = "Oktober"; $Bezeichnungen["Monat"][11] = "November"; $Bezeichnungen["Monat"][12] = "Dezember"; $Bezeichnungen["Wochentag"] = array(); $Bezeichnungen["Wochentag"][1] = "Monatag"; $Bezeichnungen["Wochentag"][2] = "Dienstag"; $Bezeichnungen["Wochentag"][3] = "Mittwoch"; $Bezeichnungen["Wochentag"][4] = "Donnerstag"; $Bezeichnungen["Wochentag"][5] = "Freitag"; $Bezeichnungen["Wochentag"][6] = "Samstag"; $Bezeichnungen["Wochentag"][7] = "Sonntag";
Formatiert wird das ganze bei mir über CSS. Wie genau seht ihr hier:
table.kalender th{
text-align: center;
}
table.kalender td{
border:solid 1px;
font-weight:bold
}
table.kalender td.monat{
background-color:#999999;
color:#DDDDDD;
text-align: center;
}
table.kalender td.wochentage{
background-color:#BBBBBB;
text-align: center;
width: 110px;
}
table.kalender td.prev_month{
background-color:#CCCCCC;
}
table.kalender td.next_month{
background-color:#CCCCCC;
}