Kalenderproblem colspan

pekudel

Grünschnabel
Hallo!

Ich bin gerade dabei für ein Hotel ein Projekt zu realisieren. Es geht um eine Buchungsplattform. Gerade eben bin ich beim Kalender angekommen. Es gibt für jedes Zimmer eine Zeile, die Spalten sind für die einzelnen Tage da. (siehe Screenshot).

Der Kalender funktioniert soweit problemlos. Es gibt an gewissen Tagen Themenabende und die werden farblich unterlegt, und natürlich die Wochenenden.

Nun zu meinem Problem. An den Tagen, an denen ein Zimmer belegt ist, sieht man einen blauen Balken. Ich würde das aber nun gerne so lösen, dass die zusammenhängenden Tage mit einem colspan verbunden sind. Die Tage entnehme ich aus der DB und werden als Array ausgegeben:

Code:
[0] => 2014-01-20
[1] => 2014-01-21
[2] => 2014-02-01
[3] => 2014-02-04
[4] => 2014-02-05
[5] => 2014-02-06
[6] => 2014-02-07
[7] => 2014-02-08

Am obigen Beispiel soll zwischen den zusammenhängenden Tagen einfach ein colspan eingetragen werden. Leider komme ich hier gerade nicht weiter :(

Einzelne Zeilen werden folgend aufgelistet:

PHP:
		for($i=1;$i<(date("t")+1);$i++) {
			$thisDay = date("Y-m-d",mktime(0,0,0,date("n"),$i,date("Y")));
			
			if(in_array($thisDay,$Weekends)) {
				$addWClass = " calAAweekend";
			} else {
				$addWClass = "";
			}
			
			if(in_array($thisDay,$Events)) {
				$addEClass = " calAAevent";
			} else {
				$addEClass = "";
			}
			
                        // Eintragung ob Zimmer reserviert oder nicht!
			 if(in_array($thisDay,$daysRoomNotFree)==true) {
				$t['LINE'] .= "<td class='{$addWClass} {$addEClass}'><div class='calAA'>&nbsp;</div></td>";		
			} else {
				$t['LINE'] .= "<td class=' {$addWClass} {$addEClass}'>&nbsp;</td>";
			}
			
			
		}
 

Anhänge

  • Bildschirmfoto 2014-02-17 um 12.00.54.png
    Bildschirmfoto 2014-02-17 um 12.00.54.png
    17,3 KB · Aufrufe: 19
Ich hätte eine Idee ob die so praktikabel ist oder nich k.a.
Das Datum in einen Timestamp umwandeln, dann prüfen ob vorher + - 86400 sekunden eine Übereinstimmung, besteht dann colspan ansonsten nein.
Also so als Grundidee.

oder du legst direkt noch in der Datenbank ein von - bis an. und vergleichst die Daten dann.

mfg Spikaner
 
Zuletzt bearbeitet:
So etwas ähnliches habe ich mir auch schon gedacht, aber ich hoffte eine etwas bessere Lösung zu finden... ich denke mir, dass wird eine hohe Leistung erfordern bei > 80 Zimmern, wenn ich da einmal den Kalender aufrufe hmm :(
 
Naja so schlimm glaub ich wäre es auch nicht
Code:
IF von - bis gleiches Datum -> kein colspan 
ansonsten
colspan von - bis
aber mal gucken was die Profis sagen oder den Kopf schütteln ;)

mfg Spikaner
 
Sind die einzelnen Tage jeweils 1 Buchung oder sind die zusammenhängenden Tage jeweils 1 Buchung?

Wenn das 2. dein Problem entsprechen sollte, würde ich die Tabelle etwas anders aufbauen, das Pro Buchung drin steht Eingebucht und Ausgebucht.
Aus Bequemlichkeit, besonders was das Berechnen betrifft würde ich mit Timestamps arbeiten.

Dann könntest mit der Differenz die Tage ermitteln. Diese Tage sind dann der Colspan z.B.

PHP:
// Ermittelung des Buchungszeitrames und Umrechnung in Tage
$tage = round( ( $ausbuchung - $einbuchung ) / 86400 )
if($tage > 1) {
 $colspan="colspan='".$tage."'";
} else {
$colspan="";
}

Das müsste dann nur noch an dem Tag des Beginn der Buchung eingetragen werden und fertig.
 
Hallo,

statt mit einer FOR-Schleife würde ich den Monat mit einer WHILE-Schleife durchlaufen. Dann kannst du mit einer weiteren Schleife die Folgetage zählen, die im Events-Array enthalten sind.
Etwa so:
PHP:
function currDate($number)
{
	$result = date("Y").'-'.date("m").'-';
	$result .= str_pad($number, 2, "0", STR_PAD_LEFT);
	return $result;
}

$i = 1;
while($i <= idate('t'))
{
	/* Hier Tabellenzelle öffnen: */
	echo currDate($i);

	/* Folgetage zählen, die im Events-Array enthalten sind: */
	$j = 0;
	while(in_array(currDate($i + $j), $Events)) $j++;

	/* Falls $j > 0: CSS-Klassenattribut setzen */
	if($j) echo ' CSS-Klassenattribut!';
	/* Falls $j > 1: colspan-Attribut setzen und Laufvariable $i aktualisieren: */
	if($j > 1)
	{
		echo ' colSpan = ', $j;
		$i += $j;
	}
	else $i++;

	/* Hier Inhalt der Tabellenzelle einfügen und Tabellenzelle schließen: */
	echo '<br>';
}
Mit dem Events-Array aus dem ersten Beitrag ergibt sich dann folgende Ausgabe:
Code:
2014-02-01 CSS-Klassenattribut!
2014-02-02
2014-02-03
2014-02-04 CSS-Klassenattribut! colSpan = 5
2014-02-09
2014-02-10
2014-02-11
2014-02-12
2014-02-13
2014-02-14
2014-02-15
2014-02-16
2014-02-17
2014-02-18
2014-02-19
2014-02-20
2014-02-21
2014-02-22
2014-02-23
2014-02-24
2014-02-25
2014-02-26
2014-02-27
2014-02-28
 
Zuletzt bearbeitet:
Zurück