Ich hatte immer wieder Problemchen mit dem Kalendermodul. Die Version 2.5.2 war zu langsam (habe mehr oder weniger das ganze Jahr komplett voller Termine). Darum habe bei Version 2.6 eine entsprechende Anpassung bei der Datenbankabfrage die ich hier im Forum gefunden hatte (kann mich leider niht mehr daran erinnen wemm der Dank gebührt) vorgenommen. Leider hatte diese Version dann Probleme mit der Darstellung von zyklischen Terminen und auch mit zusätzlichen Termine. Habe auch daran rumgebastelt.
Hier nun das Ergebnis, vielleicht braucht es der eine oder andere.
: habe ziemlich rumgebastelt und wenig getestet. Könnte auch sein, dass die Programmierung jetzt ein Mischmasch aus V2.5.2 und V2.6 ist und dass sich noch Fehler darin verbergen. Bei mir funktioniert der Kalender nun mit den Vorteilen: schnell, zyklische Termine und zusätzliche Termine. Vielleicht kann ja mal ein Experte drüber gehen und Schönheitskorrekturen vornehmen, den so richtig steige ich bei dem Kalendermodul noch nicht durch.
Output sKalender V2.6 modifiziert (Schnelligkeit, zyklische Termine und zusätzliche Termine werden dargestellt):
Code: Alles auswählen
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : Termin sKalender universal
* Version : 2.6
* Author : schlaucher
* Created : 02-08-2006
* Modified : 06-10-2008
************************************************/
cInclude('frontend', 'includes/functions.terminliste.php');
#$time_start = microtime(true);
if ($_REQUEST['MOD_sK_newdate']) // Datum wurde über den sKalender neu gesetzt
{
$MOD_sK_newdate_array = explode("-",$_REQUEST['MOD_sK_newdate']); // yyyy-m-t oder mm tt
$MOD_sK_checkdate_von = date("Y-m-d", mktime (0,0,0, $MOD_sK_newdate_array[1], 1, $MOD_sK_newdate_array[0]));
$MOD_sK_tag_max = date( "t", mktime(0,0,0, $MOD_sK_newdate_array[1], 1, $MOD_sK_newdate_array[0]));
$MOD_sK_checkdate_bis = date("Y-m-d", mktime (0,0,0, $MOD_sK_newdate_array[1], $MOD_sK_tag_max, $MOD_sK_newdate_array[0]));
}
else // aktuelles Datum verwenden
{
$MOD_sK_heute = getdate();
$MOD_sK_checkdate_von = date("Y-m-d", mktime (0,0,0, $MOD_sK_heute["mon"], 1, $MOD_sK_heute["year"]));
$MOD_sK_tag_max = date( "t", mktime(0,0,0, $MOD_sK_heute["mon"], 1, $MOD_sK_heute["year"]));
$MOD_sK_checkdate_bis = date("Y-m-d", mktime (0,0,0, $MOD_sK_heute["mon"], $MOD_sK_tag_max, $MOD_sK_heute["year"]));
}
//echo 'Anzeige von: '.$MOD_sK_checkdate_von.' bis '.$MOD_sK_checkdate_bis.'<br>';
$MOD_sK_zaehler = 0;
$MOD_sK_zaehler2 = 0;
$MOD_sK_tage= array(mi18n("So"),mi18n("Mo"),mi18n("Di"),mi18n("Mi"),mi18n("Do"),mi18n("Fr"),mi18n("Sa"));
// Variablen aus Input Bereich
if ("CMS_VALUE[4]" == '') // Link zu den Terminen aktiv
$MOD_sK_linkyn = false;
else
$MOD_sK_linkyn = true;
if ("CMS_VALUE[7]" == 'datum') // Anzeigemodus Datum oder Status// Überprüfung ob zusätzliche Kategorien gewählt wurden
$MOD_sK_anzeigemodus = true;
else
$MOD_sK_anzeigemodus = false;
if ("CMS_VALUE[9]" == '') // Dropdown-Feld aktiv
$MOD_sK_ddownyn = false;
else
$MOD_sK_ddownyn = true;
$MOD_sK_idcat = "CMS_VALUE[1]";
$MOD_sK_idcatart = "CMS_VALUE[3]";
$MOD_sK_add_tree = "CMS_VALUE[5]"; // zusätzliche Kategorien anzeigen
$MOD_sK_add_tree_ids = "CMS_VALUE[6]"; // ids der zusätzlichen Kategorien
$MOD_sk_ddown = "CMS_VALUE[8]"; // Angezeigte Jahre im Dropdown Feld
if ($MOD_sK_add_tree == "" || ($MOD_sK_add_tree_ids == "" && $MOD_sK_add_tree == "auswahl"))
$MOD_sK_add_tree = 'keine';
if (eregi(',', $MOD_sk_ddown))
$MOD_sk_arry_down = explode(",", $MOD_sk_ddown);
else
$MOD_sk_arry_down[0] = $MOD_sk_ddown;
// zusätzliche Kategorien ermitteln
$MOD_sK_sel_tree = "'".$MOD_sK_idcat."'";
switch ($MOD_sK_add_tree)
{
case "unterhalb":
$MOD_sK_tree_level = -1;
$MOD_sK_sql_tree = "SELECT CAT.idcat AS idcat, CATTREE.level AS level ";
$MOD_sK_sql_tree .= "FROM ".$cfg["tab"]["cat"]." AS CAT,";
$MOD_sK_sql_tree .= " ".$cfg["tab"]["cat_tree"]." AS CATTREE ";
$MOD_sK_sql_tree .= "WHERE CAT.idcat = CATTREE.idcat ";
$MOD_sK_sql_tree .= "ORDER BY CATTREE.idtree";
$db->query($MOD_sK_sql_tree);
while($db->next_record())
{
if ($db->f("idcat") == $MOD_sK_idcat)
$MOD_sK_tree_level = $db->f("level");
else if ($MOD_sK_tree_level > -1 && $db->f("level") > $MOD_sK_tree_level)
$MOD_sK_sel_tree .= ",'".$db->f("idcat")."'";
else if ($db->f("level") <= $MOD_sK_tree_level)
break;
}
break;
case "auswahl":
$MOD_sK_add_tree_array = explode(",",$MOD_sK_add_tree_ids);
foreach ($MOD_sK_add_tree_array as $MOD_sK_add_tree_value)
{
if (is_numeric($MOD_sK_add_tree_value))
$MOD_sK_sel_tree .= ",'".$MOD_sK_add_tree_value."'";
}
break;
default:
}
// Alle Artikel der Kategorie einlesen, die nicht Startartikel sind
$MOD_sK_sql = "
SELECT DISTINCT
ARTLANG.idart AS idart,
ARTLANG.idartlang AS idartlang,
CONTENT_datum1.value AS datum1,
CONTENT_zeit1.value AS zeit1,
CONTENT_datum2.value AS datum2,
CONTENT_zeit2.value AS zeit2,
CONTENT_ort.value AS ort,
CONTENT_titel.value AS titel,
IF(CONTENT_html.value = '', 'yes', 'no') AS html_empty,
CONTENT_teaseryn.value AS teaseryn,
CONTENT_link.value AS link,
CONTENT_linkframe.value AS linkframe,
CONTENT_linkdesc.value AS linkdesc,
CONTENT_zyklus.value AS zyklus,
CONTENT_wtagezyklus.value AS wtagezyklus,
CONTENT_wtagemon.value AS wtagemon,
CONTENT_image.value AS image,
CONTENT_imagedesc.value AS imagedesc,
CONTENT_kategoriea.value AS kategoriea,
CONTENT_xtag.value AS xtag,
CONTENT_aliste.value AS aliste,
CONTENT_hightlight.value AS hightlight,
CONTENT_kategorieb.value AS kategorieb,
CONTENT_zutermine.value AS zutermine,
CONTENT_status.value AS status
FROM
con_cat AS CAT
INNER JOIN con_cat_art AS CATART ON (CATART.idcat = CAT.idcat AND CAT.idclient = '$client' AND CAT.idcat IN ($MOD_sK_sel_tree))
INNER JOIN con_art_lang AS ARTLANG ON (CATART.idart = ARTLANG.idart AND ARTLANG.idlang = '$lang' AND ARTLANG.online = '1')
INNER JOIN con_cat_lang AS CATLANG ON (CATART.idcat = CATLANG.idcat)
INNER JOIN con_content AS CONTENT_datum1 ON (ARTLANG.idartlang = CONTENT_datum1.idartlang AND CONTENT_datum1.typeid = 0 AND CONTENT_datum1.idtype = 3)
LEFT JOIN con_content AS CONTENT_zeit1 ON (ARTLANG.idartlang = CONTENT_zeit1.idartlang AND CONTENT_zeit1.typeid = 1 AND CONTENT_zeit1.idtype = 3)
LEFT JOIN con_content AS CONTENT_datum2 ON (ARTLANG.idartlang = CONTENT_datum2.idartlang AND CONTENT_datum2.typeid = 2 AND CONTENT_datum2.idtype = 3)
LEFT JOIN con_content AS CONTENT_zeit2 ON (ARTLANG.idartlang = CONTENT_zeit2.idartlang AND CONTENT_zeit2.typeid = 3 AND CONTENT_zeit2.idtype = 3)
LEFT JOIN con_content AS CONTENT_ort ON (ARTLANG.idartlang = CONTENT_ort.idartlang AND CONTENT_ort.typeid = 4 AND CONTENT_ort.idtype = 3)
LEFT JOIN con_content AS CONTENT_titel ON (ARTLANG.idartlang = CONTENT_titel.idartlang AND CONTENT_titel.typeid = 6 AND CONTENT_titel.idtype = 3)
LEFT JOIN con_content AS CONTENT_html ON (ARTLANG.idartlang = CONTENT_html.idartlang AND CONTENT_html.typeid = 8)
LEFT JOIN con_content AS CONTENT_teaseryn ON (ARTLANG.idartlang = CONTENT_teaseryn.idartlang AND CONTENT_teaseryn.typeid = 7 AND CONTENT_teaseryn.idtype = 3)
LEFT JOIN con_content AS CONTENT_link ON (ARTLANG.idartlang = CONTENT_link.idartlang AND CONTENT_link.typeid = 9 AND CONTENT_link.idtype = 6)
LEFT JOIN con_content AS CONTENT_linkframe ON (ARTLANG.idartlang = CONTENT_linkframe.idartlang AND CONTENT_linkframe.typeid = 9 AND CONTENT_linkframe.idtype = 7)
LEFT JOIN con_content AS CONTENT_linkdesc ON (ARTLANG.idartlang = CONTENT_linkdesc.idartlang AND CONTENT_linkdesc.typeid = 9 AND CONTENT_linkdesc.idtype = 8)
LEFT JOIN con_content AS CONTENT_zyklus ON (ARTLANG.idartlang = CONTENT_zyklus.idartlang AND CONTENT_zyklus.typeid = 10 AND CONTENT_zyklus.idtype = 3)
LEFT JOIN con_content AS CONTENT_wtagezyklus ON (ARTLANG.idartlang = CONTENT_wtagezyklus.idartlang AND CONTENT_wtagezyklus.typeid = 11 AND CONTENT_wtagezyklus.idtype = 3)
LEFT JOIN con_content AS CONTENT_wtagemon ON (ARTLANG.idartlang = CONTENT_wtagemon.idartlang AND CONTENT_wtagemon.typeid = 12 AND CONTENT_wtagemon.idtype = 3)
LEFT JOIN con_content AS CONTENT_image ON (ARTLANG.idartlang = CONTENT_image.idartlang AND CONTENT_image.typeid = 14 AND CONTENT_image.idtype = 4)
LEFT JOIN con_content AS CONTENT_imagedesc ON (ARTLANG.idartlang = CONTENT_imagedesc.idartlang AND CONTENT_imagedesc.typeid = 14 AND CONTENT_imagedesc.idtype = 5)
LEFT JOIN con_content AS CONTENT_kategoriea ON (ARTLANG.idartlang = CONTENT_kategoriea.idartlang AND CONTENT_kategoriea.typeid = 13 AND CONTENT_kategoriea.idtype = 3)
LEFT JOIN con_content AS CONTENT_xtag ON (ARTLANG.idartlang = CONTENT_xtag.idartlang AND CONTENT_xtag.typeid = 16 AND CONTENT_xtag.idtype = 3)
LEFT JOIN con_content AS CONTENT_aliste ON (ARTLANG.idartlang = CONTENT_aliste.idartlang AND CONTENT_aliste.typeid = 17 AND CONTENT_aliste.idtype = 3)
LEFT JOIN con_content AS CONTENT_hightlight ON (ARTLANG.idartlang = CONTENT_hightlight.idartlang AND CONTENT_hightlight.typeid = 20 AND CONTENT_hightlight.idtype = 3)
LEFT JOIN con_content AS CONTENT_kategorieb ON (ARTLANG.idartlang = CONTENT_kategorieb.idartlang AND CONTENT_kategorieb.typeid = 21 AND CONTENT_kategorieb.idtype = 3)
LEFT JOIN con_content AS CONTENT_zutermine ON (ARTLANG.idartlang = CONTENT_zutermine.idartlang AND CONTENT_zutermine.typeid = 22 AND CONTENT_zutermine.idtype = 3)
LEFT JOIN con_content AS CONTENT_status ON (ARTLANG.idartlang = CONTENT_status.idartlang AND CONTENT_status.typeid = 23 AND CONTENT_status.idtype = 3)
";
if ($cfg["is_start_compatible"] == true)
$MOD_sK_sql .= "WHERE CATART.is_start = '0';";
else
$MOD_sK_sql .= "WHERE ARTLANG.idartlang != CATLANG.startidartlang;";
$db->query($MOD_sK_sql);
// weiter, wenn Artikel gefunden wurden
if ($db->num_rows() > 0)
{
$MOD_sK_termine = array(array()); // Array erzeugen, in dem die Termine abgelegt werden;
while ($MOD_sK_datensaetze < $db->num_rows()) // alle Datensätze durchlaufen
{
$db->next_record();
if (isStartArticle($db->f("idartlang"),$MOD_sK_durchlaufdcat,$lang)==FALSE)
{
$MOD_sK_termine["datum1"][$MOD_sK_zaehler] = (strlen($db->f("datum1")) < 10 ) ? '1970-01-01' : $db->f("datum1");
$MOD_sK_termine["idart"][$MOD_sK_zaehler] = $db->f("idart");
$MOD_sK_termine["zyklus"][$MOD_sK_zaehler] = ($db->f("zyklus") === NULL) ? 'no' : $db->f("zyklus");
$MOD_sK_termine["datum2"][$MOD_sK_zaehler] = $db->f("datum2");
$MOD_sK_termine["status"][$MOD_sK_zaehler] = $db->f("status");
$MOD_sK_termine["xtag"][$MOD_sK_zaehler] = $db->f("xtag");
$MOD_sK_termine["aliste"][$MOD_sK_zaehler] = $db->f("aliste");
$MOD_sK_termine["zutermine"][$MOD_sK_zaehler] = $db->f("zutermine");
$MOD_sK_termine["wtagezyklus"][$MOD_sK_zaehler] = $db->f("wtagezyklus");
$MOD_sK_termine["wtagemon"][$MOD_sK_zaehler] = $db->f("wtagemon");
}
$MOD_sK_zaehler++;
$MOD_sK_datensaetze++;
}
// Ermittlung der zyklischen Termine und Löschen von Datensätzen, die nicht angezeigt werden müssen aus 2.5.2
$MOD_sK_zaehler2 = $MOD_sK_zaehler+1; // zweiten Zähler anlegen
for ($MOD_sK_durchlauf=0; $MOD_sK_durchlauf<=$MOD_sK_zaehler; $MOD_sK_durchlauf++)
{
if (($MOD_sK_termine["zyklus"][$MOD_sK_durchlauf] != 'no' || $MOD_TL_termine["zutermine"][$MOD_sK_durchlauf] != '') && $MOD_sK_termine["idart"][$MOD_sK_durchlauf] != '' ) // Zyklischer Termin
{
//echo 'Zyklus: '.$MOD_sK_durchlauf.' | '.$MOD_sK_termine["datum1"][$MOD_sK_durchlauf].' | '.$MOD_sK_termine["titel"][$MOD_sK_durchlauf].'<br>';
$MOD_sK_zdate_array = makedatearray($MOD_sK_termine["datum1"][$MOD_sK_durchlauf],$MOD_sK_termine["datum2"][$MOD_sK_durchlauf],
$MOD_sK_termine["zyklus"][$MOD_sK_durchlauf],$MOD_sK_termine["xtag"][$MOD_sK_durchlauf],
$MOD_sK_termine["aliste"][$MOD_sK_durchlauf],$MOD_sK_checkdate_von,$MOD_sK_checkdate_bis,
$MOD_sK_termine["wtagezyklus"][$MOD_sK_durchlauf],$MOD_sK_termine["wtagemon"][$MOD_sK_durchlauf],$MOD_TL_termine["zutermine"][$MOD_sK_durchlauf]);
if(count($MOD_sK_zdate_array) >= 1)
{
if($MOD_sK_termine["datum1"][$MOD_sK_durchlauf] != $MOD_sK_zdate_array[0])
{
$MOD_sK_termine["datum1"][$MOD_sK_zaehler2] = $MOD_sK_zdate_array[0];
$MOD_sK_termine["datum2"][$MOD_sK_zaehler2] = '';
$MOD_sK_termine["idart"][$MOD_sK_zaehler2] = $MOD_sK_termine["idart"][$MOD_sK_durchlauf];
$MOD_sK_termine["status"][$MOD_sK_zaehler2] = $MOD_sK_termine["status"][$MOD_sK_durchlauf];
$MOD_sK_zaehler2++;
}
for ($MOD_sK_durchlauf2=1; $MOD_sK_durchlauf2<count($MOD_sK_zdate_array); $MOD_sK_durchlauf2++)
{
$MOD_sK_termine["datum1"][$MOD_sK_zaehler2] = $MOD_sK_zdate_array[$MOD_sK_durchlauf2];
$MOD_sK_termine["datum2"][$MOD_sK_zaehler2] = '';
$MOD_sK_termine["idart"][$MOD_sK_zaehler2] = $MOD_sK_termine["idart"][$MOD_sK_durchlauf];
$MOD_sK_termine["status"][$MOD_sK_zaehler2] = $MOD_sK_termine["status"][$MOD_sK_durchlauf];
$MOD_sK_zaehler2++;
}
}
if ($MOD_sK_termine["zyklus"][$MOD_sK_durchlauf] != 'no')
$MOD_sK_termine["datum2"][$MOD_sK_durchlauf] = '';
}
}
// Prüfung ob Termin im aktuellen Anzeigezeitrahmen ist
for ($MOD_sK_durchlauf=0; $MOD_sK_durchlauf<=$MOD_sK_zaehler2; $MOD_sK_durchlauf++)
{
if (!(($MOD_sK_termine["datum1"][$MOD_sK_durchlauf] >= $MOD_sK_checkdate_von && $MOD_sK_termine["datum1"][$MOD_sK_durchlauf] <= $MOD_sK_checkdate_bis) ||
($MOD_sK_termine["datum2"][$MOD_sK_durchlauf] >= $MOD_sK_checkdate_von && $MOD_sK_termine["datum2"][$MOD_sK_durchlauf] <= $MOD_sK_checkdate_bis ) ||
($MOD_sK_termine["datum1"][$MOD_sK_durchlauf] < $MOD_sK_checkdate_von && $MOD_sK_termine["datum2"][$MOD_sK_durchlauf] > $MOD_sK_checkdate_bis)))
{
unset ($MOD_sK_termine["datum1"][$MOD_sK_durchlauf]);
unset ($MOD_sK_termine["datum2"][$MOD_sK_durchlauf]);
unset ($MOD_sK_termine["idart"][$MOD_sK_durchlauf]);
unset ($MOD_sK_termine["status"][$MOD_sK_durchlauf]);
}
}
}
else
{
// Bugfix, da sonst Fehlermeldung beim prüfen der belegten Termine
$MOD_sK_termine["datum1"][0] = '1970-01-01';
$MOD_sK_termine["datum2"][0] = '1970-01-01';
$MOD_sK_termine["idart"][0] = '0';
$MOD_sK_termine["status"][0] = '0';
}
if( !empty($MOD_sK_termine["datum1"]) )
{
array_multisort ( $MOD_sK_termine["datum1"], SORT_ASC, SORT_STRING,
$MOD_sK_termine["datum2"], SORT_ASC, SORT_STRING,
$MOD_sK_termine["idart"],
$MOD_sK_termine["status"]);
}
$sKalender = new sKalender();
$sKalender->setDate( $MOD_sK_newdate_array[2], $MOD_sK_newdate_array[1], $MOD_sK_newdate_array[0] );
$sKalender->printCalender();
class sKalender
{
var $MOD_sK_akt_datum;
var $MOD_sK_admin;
function sKalender()
{
// Verhindert mögliche Endlosloops Ausführungszeit max 1 Sek.
//set_time_limit( 1 );
// wird der Funktion eine Parameter übergeben, wird diese dem Key "MOD_sK_admin" zugeordent
if( func_num_args() == 1 )
$this->MOD_sK_admin = func_get_arg( 0 );
else
$this->MOD_sK_admin = false;
// aktuelles Datum in Array MOD_sK_akt_datum schreiben
$this->MOD_sK_akt_datum = getdate();
}
function setDate( $MOD_sK_tag, $MOD_sK_monat, $MOD_sK_jahr )
{
// prüft, ob alle Werte übergeben wurden und schreibt diese dann ins Array
if( $MOD_sK_tag != "" && $MOD_sK_monat != "" && $MOD_sK_jahr != "" )
{
$this->MOD_sK_akt_datum["mday"] = $MOD_sK_tag*1; // führende Nullen entfernen
$this->MOD_sK_akt_datum["mon"] = $MOD_sK_monat*1; // führende Nullen entfernen
$this->MOD_sK_akt_datum["year"] = $MOD_sK_jahr;
return true;
}
else
return false;
}
function getDateByMonth( $MOD_sk_neuer_monat )
{
$MOD_sK_neues_datum = mktime (0,0,0, ($this->MOD_sK_akt_datum["mon"] + $MOD_sk_neuer_monat), $this->MOD_sK_akt_datum["mday"], $this->MOD_sK_akt_datum["year"] );
return $MOD_sK_neues_datum;
}
function printCalender()
{
// Globale Variablen definieren
global $MOD_sK_linkyn;
global $idcatart;
global $MOD_sK_idcatart;
global $MOD_sk_arry_down;
global $MOD_sK_ddownyn;
if( $this->MOD_sK_akt_datum == "" )
return false;
else
$MOD_sK_datum = $this->MOD_sK_akt_datum;
$MOD_sK_wochenbeginn = 2; // Die Woche beginnt mit Montag, PHP beginnt mit Sonntag = 1
$MOD_sK_admin = "&MOD_sK_admin=" . $this->MOD_sK_admin;
$MOD_sK_monatsnamen = array("",mi18n("Januar"),mi18n("Februar"),mi18n("März"),mi18n("April"),mi18n("Mai"),mi18n("Juni"),mi18n("Juli"),mi18n("August"),mi18n("September"),mi18n("Oktober"),mi18n("November"),mi18n("Dezember"));
echo '<div id="mod_sK">
<table>
<tr>';
// Einen Monat zurück
$MOD_sK_neues_datum = $this->getDateByMonth( -1 );
$MOD_sK_newdate = date("Y", $MOD_sK_neues_datum ).'-'.date("n", $MOD_sK_neues_datum ).'-1';
echo '<td class="navl"><a href="front_content.php?idcatart='.$idcatart.'&MOD_sK_newdate='.$MOD_sK_newdate.'" title="'.mi18n("vorheriger Monat").'"><<</a></td>';
// aktueller Monat
$MOD_sK_neues_datum = $this->getDateByMonth( 0 );
$MOD_sK_newdate = date("Y", $MOD_sK_neues_datum ).'-'.date("n", $MOD_sK_neues_datum ).'-1';
// Dropdownfeld aufbauen
$MOD_sk_arry_years = count($MOD_sk_arry_down); // Anzahl der Jahre
$MOD_sk_dropdown = '<select name="MOD_sK_newdate" onchange="parent.frames.top.location.href = this.value">';
$MOD_sk_dropdown .= '<option value="'.$MOD_sK_newdate.'">'.$MOD_sK_monatsnamen[ $MOD_sK_datum["mon"] ].' '.$MOD_sK_datum["year"].'</option>';
for( $MOD_sK_dyears = 0; $MOD_sK_dyears < $MOD_sk_arry_years; $MOD_sK_dyears++ )
{
for( $MOD_sK_dmonth = 1; $MOD_sK_dmonth <= 12; $MOD_sK_dmonth++ )
{
$MOD_sk_dropdown .= '<option value="front_content.php?client='.$client.'&parent='.$parent.'&subid='.$subid.'&idcatart='.$idcatart.'&MOD_sK_newdate='.$MOD_sk_arry_down[$MOD_sK_dyears].'-'.$MOD_sK_dmonth.'-1">'.$MOD_sK_monatsnamen[$MOD_sK_dmonth].' '.$MOD_sk_arry_down[$MOD_sK_dyears].'</option>';
}
}
$MOD_sk_dropdown .= '</select>';
if(!$MOD_sK_ddownyn)
echo '<td class="navm"><a href="front_content.php?idcatart='.$MOD_sK_idcatart.'&MOD_sK_newdate='.$MOD_sK_newdate.'&MOD_sK_show=m" title="'.mi18n("Monatsübersicht anzeigen.").'">'.$MOD_sK_monatsnamen[ $MOD_sK_datum["mon"] ].' '.$MOD_sK_datum["year"].'</a></td>';
else
echo '<td class="navm">'.$MOD_sk_dropdown.'</td>';
// Einen Monat vor
$MOD_sK_neues_datum = $this->getDateByMonth( +1 );
$MOD_sK_newdate = date("Y", $MOD_sK_neues_datum ).'-'.date("n", $MOD_sK_neues_datum ).'-1';
echo '<td class="navr"><a href="front_content.php?idcatart='.$idcatart.'&MOD_sK_newdate='.$MOD_sK_newdate.'" title="'.mi18n("nächster Monat").'">>></a></td>';
echo '
</tr>
</table>
<table>';
// Ermittle die maximalen Tage für den aktuellen Monat
$MOD_sK_tag_max = date( "t", mktime( 0, 0, 0, $MOD_sK_datum["mon"], 1, $MOD_sK_datum["year"] ) );
for( $MOD_sK_tag_aktuell = 1; $MOD_sK_tag_aktuell <= $MOD_sK_tag_max; $MOD_sK_tag_aktuell++ )
{
$MOD_sK_tag_nummer = date("w", mktime(0, 0, 0, $MOD_sK_datum["mon"], $MOD_sK_tag_aktuell, $MOD_sK_datum["year"])) + 1;
if ($MOD_sK_tag_aktuell == 1)
{
echo '
<tr>
<td class="wtag">'.mi18n("Mo").'</td>
<td class="wtag">'.mi18n("Di").'</td>
<td class="wtag">'.mi18n("Mi").'</td>
<td class="wtag">'.mi18n("Do").'</td>
<td class="wtag">'.mi18n("Fr").'</td>
<td class="wtag">'.mi18n("Sa").'</td>
<td class="wtag">'.mi18n("So").'</td>
</tr>';
// Leere Felder am Anfang / Ende
echo '<tr>';
for( $MOD_sK_check_tag = $MOD_sK_wochenbeginn; $MOD_sK_tag_nummer != $MOD_sK_check_tag; $MOD_sK_check_tag++ )
{
echo '<td> </td>';
if( $MOD_sK_tag_nummer == 1 && $MOD_sK_check_tag == 7 ) // Workaround !!!
{
echo( $this->getCell( $MOD_sK_tag_aktuell ) );
break;
}
if( $MOD_sK_check_tag > 15 ) // Workaround !!!
break;
}
if ($MOD_sK_tag_nummer == $MOD_sK_check_tag)
echo( $this->getCell( $MOD_sK_tag_aktuell ) );
}
else if ($MOD_sK_tag_nummer == $MOD_sK_wochenbeginn)
{
echo '
</tr>
<tr>';
echo( $this->getCell( $MOD_sK_tag_aktuell ) );
}
else
echo( $this->getCell( $MOD_sK_tag_aktuell ) );
}
$MOD_sK_tag_aktuell = $MOD_sK_tag_aktuell - 6;
$MOD_sK_tag_nummer = date("w", mktime(0, 0, 0, $MOD_sK_datum["mon"], $MOD_sK_tag_aktuell, $MOD_sK_datum["year"]));
while( $MOD_sK_tag_nummer != $MOD_sK_wochenbeginn )
{
echo ' <td> </td>';
$MOD_sK_tag_aktuell++;
$MOD_sK_tag_nummer = date("w", mktime(0, 0, 0, $MOD_sK_datum["mon"], $MOD_sK_tag_aktuell, $MOD_sK_datum["year"]));
}
echo '
</tr>
</table>
</div>';
return true;
}
function checkDayFor1( $MOD_sK_datum_check )
{
global $MOD_sK_termine;
$MOD_sk_status_ok = false;
$MOD_sK_array_keys = (array_keys ($MOD_sK_termine["datum1"], $MOD_sK_datum_check));
foreach($MOD_sK_array_keys as $MOD_sK_array_key => $MOD_sK_array_key_value)
{
if ($MOD_sK_termine["datum2"][$MOD_sK_array_key_value] == '')
$MOD_sk_status_ok = true;
}
return $MOD_sk_status_ok;
}
function checkDayFor2( $MOD_sK_datum_check )
{
global $MOD_sK_termine;
$MOD_sK_anzahl = count($MOD_sK_termine["datum1"]);
$MOD_sk_check_ok = false;
for ($MOD_sK_durchlauf = 0; $MOD_sK_durchlauf <= $MOD_sK_anzahl-1; $MOD_sK_durchlauf++)
{
if ( $MOD_sK_datum_check >= $MOD_sK_termine["datum1"][$MOD_sK_durchlauf] && $MOD_sK_datum_check <= $MOD_sK_termine["datum2"][$MOD_sK_durchlauf] )
$MOD_sk_check_ok = true;
}
return $MOD_sk_check_ok;
}
function checkDayFor3( $MOD_sK_datum_check )
{
global $MOD_sK_termine;
$MOD_sK_anzahl = count($MOD_sK_termine["zutermine"]);
$MOD_sk_check_ok = false;
for ($MOD_sK_durchlauf = 0; $MOD_sK_durchlauf <= $MOD_sK_anzahl-1; $MOD_sK_durchlauf++)
{
$pos=strpos($MOD_sK_termine["zutermine"][$MOD_sK_durchlauf], $MOD_sK_datum_check);
if ($pos !== false ) {
$MOD_sk_check_ok = true;
}
}
return $MOD_sk_check_ok;
}
function checkStatus1( $MOD_sK_datum_check ) // Tag mit reservierten Terminen
{
global $MOD_sK_termine;
$MOD_sk_status_ok = false;
$MOD_sK_array_keys = (array_keys ($MOD_sK_termine["datum1"], $MOD_sK_datum_check));
foreach($MOD_sK_array_keys as $MOD_sK_array_key => $MOD_sK_array_key_value)
{
if ($MOD_sK_termine["status"][$MOD_sK_array_key_value] == '1')
$MOD_sk_status_ok = true;
}
return $MOD_sk_status_ok;
}
function checkStatus2( $MOD_sK_datum_check ) // Tag mit gebuchten Terminen
{
global $MOD_sK_termine;
$MOD_sk_status_ok = false;
$MOD_sK_array_keys = (array_keys ($MOD_sK_termine["datum1"], $MOD_sK_datum_check));
foreach($MOD_sK_array_keys as $MOD_sK_array_key => $MOD_sK_array_key_value)
{
if ($MOD_sK_termine["status"][$MOD_sK_array_key_value] == '2')
$MOD_sk_status_ok = true;
}
return $MOD_sk_status_ok;
}
function getCell( $MOD_sK_tag )
{
global $MOD_sK_linkyn;
global $MOD_sK_anzeigemodus;
$MOD_sK_datum_aktuell= date("Y-m-d", mktime(0, 0, 0, date("m", $this->getDateByMonth( 0 ) ), $MOD_sK_tag, date("Y", $this->getDateByMonth( 0 ) ) ) );
$MOD_sK_datum_title= date("d.m.Y", mktime(0, 0, 0, date("m", $this->getDateByMonth( 0 ) ), $MOD_sK_tag, date("Y", $this->getDateByMonth( 0 ) ) ) );
$MOD_sK_wochentag = date("w", mktime(0, 0, 0, date("m", $this->getDateByMonth( 0 ) ), $MOD_sK_tag, date("Y", $this->getDateByMonth( 0 ) ) ) );
$MOD_sK_termin_ok = false;
if ($MOD_sK_anzeigemodus)
{
if( $MOD_sK_wochentag == 6 || $MOD_sK_wochentag == 0 ) // Wochenende
$MOD_sK_style = "wochenende";
else // Normal
$MOD_sK_style = "wochentag";
if( date("Y-m-d") == $MOD_sK_datum_aktuell) // Heute
$MOD_sK_style = "heute";
if( $this->checkDayFor1($MOD_sK_datum_aktuell ) ) // Tag mit direkten Terminen
{
$MOD_sK_termin_ok = true;
if( $MOD_sK_wochentag == 6 || $MOD_sK_wochentag == 0 ) // Wochenende
$MOD_sK_style = "belegtwe";
else
$MOD_sK_style = "belegt";
}
else
{
if( $this->checkDayFor2($MOD_sK_datum_aktuell ) ) // Tag mit indirekten Terminen
{
$MOD_sK_termin_ok = true;
if( $MOD_sK_wochentag == 6 || $MOD_sK_wochentag == 0 ) // Wochenende
$MOD_sK_style = "tangiertwe";
else
$MOD_sK_style = "tangiert";
}
}
if( $this->checkDayFor3($MOD_sK_datum_aktuell ) ) // Tag mit zusätzlichen Terminen
{
$MOD_sK_termin_ok = true;
if( $MOD_sK_wochentag == 6 || $MOD_sK_wochentag == 0 ) // Wochenende
$MOD_sK_style = "tangiertwe";
else
$MOD_sK_style = "tangiert";
}
}
else
{
$MOD_sK_style = "wochentag"; //
if( $this->checkStatus1( $MOD_sK_datum_aktuell ) ) // Tag mit reservierten Terminen
{
$MOD_sK_termin_ok = true;
$MOD_sK_style = "tangiert";
}
if( $this->checkStatus2( $MOD_sK_datum_aktuell ) ) // Tag mit gebuchten Terminen
{
$MOD_sK_termin_ok = true;
$MOD_sK_style = "belegt";
}
}
global $MOD_sK_idcatart;
if ($MOD_sK_termin_ok)
{
if($MOD_sK_linkyn)
$MOD_sK_val = '<td class="'.$MOD_sK_style.'"><a class="tag" href="front_content.php?idcatart='.$MOD_sK_idcatart.'&MOD_sK_newdate='.$MOD_sK_datum_aktuell.'&MOD_sK_show=t" title="'.mi18n("Termine für den").' '.$MOD_sK_datum_title.' '.mi18n("anzeigen").'.">'.$MOD_sK_tag.'</a></td>';
else
{
if ($MOD_sK_anzeigemodus)
$MOD_sK_val = '<td class="'.$MOD_sK_style.'"><a class="tag" title="'.mi18n("Für den").' '.$MOD_sK_datum_title.' '.mi18n("existieren Termine").'.">'.$MOD_sK_tag.'</a></td>';
else
$MOD_sK_val = '<td class="'.$MOD_sK_style.'"><a class="tag" title="'.mi18n("gebucht").'">'.$MOD_sK_tag.'</a></td>';
}
}
else
{
if ($MOD_sK_anzeigemodus)
$MOD_sK_val = '<td class="'.$MOD_sK_style.'"><a class="tag" title="'.mi18n("Für den").' '.$MOD_sK_datum_title.' '.mi18n("existieren keine Termine.").'">'.$MOD_sK_tag.'</a></td>';
else
$MOD_sK_val = '<td class="'.$MOD_sK_style.'"><a class="tag" title="'.mi18n("frei").'">'.$MOD_sK_tag.'</a></td>';
}
return $MOD_sK_val;
}
}
#$time_end = microtime(true);
#$time = $time_end - $time_start;
#echo "<p style='font-size:8px'>Zeit:$time</p> ";
?>