Tach alle zusammen :smile:
hab da mal wieder ein Problem, ich möchte einen miniDateibrowser schreiben.
Folgendes Szenario:
DB-Tabelle: in der ich folgende Infos abelege
ID | projectid | dir_name | dir_desc | sub_dir
Soweit so gut, wenn ich jetzt zB ein Verzeichnis anlege sieht es ja so aus
ID | projectid | dir_name | dir_desc | sub_dir
1 | 23 | home | testbeschreibung | 0
wenn ich dazu jetzt also ein Unterverzeichnis anlege sieht es so aus
ID | projectid | dir_name | dir_desc | sub_dir
1 | 23 | home-unterverzeichnis | testbeschreibung | 1
In sub_dir steht jetzt die ID vom Hauptverzeichnis, und das Unterverzeichnis wird auch angezeigt.
Nur wie bekomm ich das jetzt hin, dass man dann auch noch mehr Unterverzeichnisse unterhalb von home-unterverzeichnis machen kann. Also eine unendliche Verschachtelung ?!?!?
Da steh ich völlig auf dem Schlauch :gruebel:
Merci für die Hilfe pyr0
Zitat von: pyr0 in 10 September 2010, 15:58:03
ID | projectid | dir_name | dir_desc | sub_dir
1 | 23 | home | testbeschreibung | 0
1 | 23 | home-unterverzeichnis | testbeschreibung | 1
So! Da ist ein Fehler. Die ID sollte nur einmalig vergeben werden. Und dann geht auch alles. Daher:
ID | projectid | dir_name | dir_desc | sub_dir
1 | 23 | home | testbeschreibung | 0
2 | 23 | home-unterverzeichnis | testbeschreibung | 1
3 | 23 | home-unterverzeichnis2 | testbeschreibung | 2
4 | 23 | home-unterverzeichnis3 | testbeschreibung | 3
5 | 23 | home-unterverzeichnis4 | testbeschreibung | 4
Diese Struktur wäre es dann:
/home / home-unterverzeichnis / home-unterverzeichnis2 / home-unterverzeichnis3 / home-unterverzeichnis4
Ja okay mein Fehler, stimmt die ID vergeb ich mittels auto_increment
Aber damit bekomme noch lange keine Unendlich Tiefe Verschachtelung hin, denn wie soll das gehen wenn unterhalb von
/ home-unterverzeichnis4 noch folgendes ist zB
/home / home-unterverzeichnis4 / noch-ein-unterverzeichnis /noch-ein-unterverzeichnis
Wie bekomm ich das hin? :gruebel:
ID | projectid | dir_name | dir_desc | sub_dir
1 | 23 | home | testbeschreibung | 0
2 | 23 | home-unterverzeichnis | testbeschreibung | 1
3 | 23 | home-unterverzeichnis2 | testbeschreibung | 2
4 | 23 | home-unterverzeichnis3 | testbeschreibung | 3
5 | 23 | home-unterverzeichnis4 | testbeschreibung | 4
Dein Wert SUB_DIR gibt doch an, worin du dein Verzeichnis findest. Wir tragen einfach mal das hier ein: /home / home-unterverzeichnis4 / noch-ein-unterverzeichnis /noch-ein-unterverzeichnis
ID | projectid | dir_name | dir_desc | sub_dir
1 | 23 | home | testbeschreibung | 0
2 | 23 | home-unterverzeichnis | testbeschreibung | 1
3 | 23 | home-unterunterverzeichnis | testbeschreibung | 2
4 | 23 | home-unterunterunterverzeichnis | testbeschreibung | 3
5 | 23 | home-unterunterunterunterverzeichnis | testbeschreibung | 4
6 | 23 | home-unterverzeichnis4 | testbeschreibung | 1
7 | 23 | noch-ein-unterverzeichnis | testbeschreibung | 6
8 | 23 | noch-ein-unterverzeichnis | testbeschreibung | 7
So sieht das hier oben aus:
(0) /
(0) / (1) Home /
(0) / (1) Home / (2) home-unterverzeichnis /
(0) / (1) Home / (2) home-unterverzeichnis / (3) home-unterunterverzeichnis /
(0) / (1) Home / (2) home-unterverzeichnis / (3) home-unterunterverzeichnis / (4) home-unterunterunterverzeichnis /
(0) / (1) Home / (2) home-unterverzeichnis / (3) home-unterunterverzeichnis / (4) home-unterunterunterverzeichnis / (5) home-unterunterunterunterverzeichnis /
(0) / (1) Home / (6) home-unterverzeichnis4 /
(0) / (1) Home / (6) home-unterverzeichnis4 / (7) noch-ein-unterverzeichnis /
(0) / (1) Home / (6) home-unterverzeichnis4 / (7) noch-ein-unterverzeichnis / (8) noch-ein-unterverzeichnis /
Okay das versteh ich :mad2:
Nur wie mache ich jetzt die DB Abfrage dazu ?
Im Moment versuch ich es so:
in $ID steht die Projekt ID drin
<?php
$ID=$project_id;
$result = sql_query("SELECT ID,dirname FROM " . $prefix . "_miniGW_fm_dirs where project_id='$ID' AND sub_dir='0'");
while(list($sub_dir,$dirname) = sql_fetch_row($result))
{
echo "<b>$dirname</b> :<br />";
# hole jetzt SubDirs
$result1 = sql_query("SELECT ID,dirname FROM " . $prefix . "_miniGW_fm_dirs_subdir where project_id='$ID' AND sub_dir='$sub_dir'");
while(list($subdir,$subdirname) = sql_fetch_row($result1))
{
echo " $subdirname ";
}
}
?>
damit bekomm ich aber nicht hin :mad2:
das muss anders gemacht werden, du rufst ja nur das erste verzeichnis ab... dazu muss ich kurz denken... *g*
du benötigst noch sublvl, um die Stufe der Hierachie anzugeben.
Und dann diesen Code. Du siehst das Ergebnis hier: http://dev.animenmore.de/pmx11/modules.php?name=miniGW
Daten in der DB:
ID projectid dir_name dir_desc sub_dir sub_lvl
1 27 Home Mein Home-Verzeichnis 0 0
2 27 HomeDIR1 Mein erstes Verzeichnis 1 1
3 27 NextDir1 Das 1. Unterverzeichnis 2 2
4 27 HomeDir2 Das zweite Untermenü 1 1
5 27 NextDir2 Das 2. Unterverzeichnis 4 2
6 27 NextDir3 Das 3. Unterverzeichnis 4 2
7 27 NextDirDir1 Das 1. Unterunterverzeichnis 6 3
$result = sql_query("SELECT ID,dirname,sublvl,subdir FROM " . $prefix . "_miniGW_fm_dirs where ID NOT IN (SELECT subdir FROM " . $prefix . "_miniGW_fm_dirs WHERE project_id = '$ID' group by subdir)");
while(list($sub_dir,$dirname,$sublvl,$home_dir) = sql_fetch_row($result))
{
$pfad = "";
$sub_dir_check = $home_dir;
for ($i=$sublvl;$i>0;$i--){
//echo $sub_dir."<br />";
$result2 = sql_query("SELECT ID,dirname, subdir FROM " . $prefix . "_miniGW_fm_dirs where ID = $sub_dir_check limit 0,1");
while(list($subdir2,$subdirname2,$home_dir) = sql_fetch_row($result2)){
$pfad = "($subdir2)" . $subdirname2 . " - " . $pfad;
$sub_dir_check = $home_dir;
}
}
echo "<b>$pfad: ($sub_dir) $dirname</b><br />";
}
Erstmal ein DICKES DANKE,
hab es zwar noch nicht getestet aber werd ich morgen machen.
Kannst Du mir das auch mal erklären quasi den logischen Weg den das Script macht. Ich steig da nicht ganz durch.
Merci
Erstmal holt der erste SQL alle Einträge, die nicht als Unterordner existieren. So bekommst du überall die letzten Ordner. Im jeweils letzten Ordner wird durch sublvl verraten, wie viele Ordner bis zum Home existieren. Darauf ist die FOR-NEXT-Schleife aufgebaut. Die baut die Ordnerstruktur rückwärts bis zum Home auf, indem immer die Oberordner abgefragt und dessen Oberordner-ID abgerufen werden.
So läuft der Weg eigentlich rückwärts. Anfangs sind alle Endordner bekannt, die nicht als Oberordner für andere Ordner dienen und dann geht die Schleife den Weg bis HOME zurück ^^.
Und wie mache ich das wenn ich jetzt neue Verzeichnisse anlegen will?
Man da steig ich echt nicht durch ist wohl schon zu spät.
:puzzled: Gruss pyr0
Also nochmal Danke an anmShinichi, deine Posts haben mir doch einiges erklärt :smile:
Aber das werd ich die Tage mal ausprobieren wie ich da dann auch die passenden Daten in die DB bekomme und vorallem an die richtige Stelle :gruebel:
Hab es aber am Ende dann doch anders gelöst.