PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verzeichnis auslesen


juergen
18.09.2009, 10:28:49
Hallo Forum,

wieder habe ich ein Problem bei dem ich nicht so recht weiter komme.
Ich lese ein Verzeichnis aus und bekomme den Inhalt so aufgelistet.

$ye = "2009";
$path = "css/".$ye;
echo "<style type=\"text/css\">";
$handle=opendir ($path);

while ($file = readdir ($handle)) {
if ($file != "." && $file != "..") {

echo "td#".$file." {background-color: ".$rot.";}";
}
}

closedir($handle);
echo "</style>";

In dem auszulesenden Verzeichnis kommen z.B. diese Reihen vor:
Jan01
Jan02
Jan03
Jan04
Feb12
Mar05
Mar06
Mar07
Mar08
Mar09
Mar10
April29
April30
Mai01
Mai02
Mai03

Alle diese Tage werden in einer Tabellenzelle dann rot markiert.
Meine Frage:
Jetzt möchte ich jeweils den ersten Tag (in dem Fall Jan01 und Mar05 und April29) einer Reihe bestimmen können um Ihm zusätzlich zur Hintergrundfarbe noch eine Hintergrundgrafik (anfang.gif) und den letzten Tag (in dem Fall Jan04 und Mar10 und Mai03) (ende.gif) per CSS zuzu ordnen.

Der Tag Feb12 ist eine Sonderstellung da er sozu sagen einzeln ist und soll ebenfalls eine Grafik bekommen (zwitter.gif).

Dann ist noch die Reihe April29 - Mai03 da sollte der April29 die Grafik anfang.gif und der Mai03 die Grafik ende.gif haben.

Da brauche ich mehr als nur einen Hinweiß!
Vielen Dank schon mal für Eure Hilfe.

Heinrich
19.09.2009, 01:37:15
Nur so'ne spontane Idee - du könntest das Array aufteilen (array_slice oder so was) nach den einzelnen Monaten. Dann kannst du in diesen Arrays den ersten und letzten Wert identifizieren und mit einer Eigenschaft versehen. Dürfte ein ziemliches Gefummel werden.

DokuLeseHemmung
19.09.2009, 09:06:35
Dürfte ein ziemliches Gefummel werden.
Sehe ich auch so.
Ist eine selten schusselige Art, seine Dateien zu benennen...

2009_12_31.dat
Und dann ein wenig Glob(), explode() und usort()

juergen
24.09.2009, 09:59:41
Hallo DokuLeseHemmung,

an dem Script (Dateinamen der Textdateien) kann ich nichts ändern da diese noch im weiteren Verlauf benötigt werden. Aber ich könnte z.B. noch was in die Datei hinein schreiben!
Wenn ich sie erzeugen und abspeichern kann, kann ich auch noch ein Zeichen, Datum oder Timestamp hinein schreiben.

Also was sagt Ihr! Lösen wir das Problem oder reden wir nur darüber was andere falsch machen? Das Leben ist nicht perfekt und auch nicht unsere bzw. meine Scripte.

Ich denke es gibt keine schlechten Scripte sondern nur einfache Lösungen oder komplizierte! Wenn man versucht Lösungen zu finden kommt man dem Ideal immer näher und die Scripte werden so immer besser.

leider reicht mein Wissen nicht aus um dieses Problem allein zu lösen. Deshalb frage ich hier im Forum und bitte um Hilfe. Gemeinsam sollten wir es aber schaffen. Immer hin habt Ihr mehr drauf als ich! Also los laßt uns anfangen!

mgr
24.09.2009, 16:58:09
Hi juergen


Gemeinsam sollten wir es aber schaffen. Immer hin habt Ihr mehr drauf als ich! Also los laßt uns anfangen!


ja dann würd ich sagen dass du doch mal mit einem Lösungsansatz beginnst, ich werde dir dann gerne helfen wenn du irgendwo nicht weiter kommst.

Mein Senf zur Frage:

$ye = "2009";
$path = "css/".$ye;
echo "<style type=\"text/css\">";
$handle=opendir ($path);

$files = array();

while ($file = readdir ($handle)) {
if ($file != "." && $file != "..") {
$m = substr($file, 0, -2);
$d = substr($file, -2);

if(!isset($files[$m])) {
$files[$m] = array();
}
$files[$m][] = $d;
}
}
closedir($handle);

foreach($files as $monat => $tage) {
//wenn nur 1 tag im monat vorhanden ist
if(count($tage) == 1) {
echo "td#".$monat . $tage[0]." {background-image: zwitter.gif;}";

//allerlei ausnahmefälle
}else if($monat == "Apr") {
echo "td#".$monat . $tage[0]." {background-image: anfang.gif;}";
}else if($monat == "Mai") {
echo "td#".$monat . $tage[-1]." {background-image: anfang.gif;}";

//der standardfall
}else {
echo "td#".$monat . $tage[0]." {background-image: anfang.gif;}";
echo "td#".$monat . $tage[-1]." {background-image: ende.gif;}";
}
}
echo "</style>";


das ganze ist ungetestet und aus dem Ärmel geschüttelt, aber so könnte das ungefähr funktionieren....

juergen
24.09.2009, 18:33:10
Hallo mgr,

danke für Deinen Beitrag.


while ($file = readdir ($handle)) {
if ($file != "." && $file != "..") {
// Mus in jedem Fall rein sonst werden die belegten Tage nicht fabig angezeigt
echo "td#".$file." {background-color: ".$mabg.";}";

$m = substr($file, 0, -2);
$d = substr($file, -2);


Das funktioniert wenn nur ein einziger Tag im Monat angeklickt ist. Jeder weitere alleinige Tag wird nicht angezeigt! Nur der erste!

if(count($tage) == 1) {
echo "td#".$monat . $tage[0]." {background-image: zwitter.gif;}";

Bei einer Belegung von 05.04 - 09.04 wird der erste Tag richtig angezeigt aber nicht der Letzte.

//allerlei ausnahmefälle
}else if($monat == "Apr") {
echo "td#".$monat . $tage[0]." {background-image: anfang.gif;}";
}else if($monat == "Apr") {
echo "td#".$monat . $tage[-1]." {background-image: ende.gif;}";