Author Topic: Wie rekursive DB-Abfrage mit vLIB Temlpate ausgeben?  (Read 1207 times)

0 Members and 1 Guest are viewing this topic.

manchester

  • Guest
Wie rekursive DB-Abfrage mit vLIB Temlpate ausgeben?
on: Thu, 06. October 2005 - 11:01:46
Hallo Leute,
ich habe ein Problem.
Ich möchte eine den Inhalt einer Tabelle rekursiv ausgeben. Etwa so:

[1]Opa (parent=0)
---[4]Vater (parent=1)
------[7]Enkel(parent=4)
------[6]Enkel (parent=4)
---[3]Vater (parent=1)
------[5]Enkel (parent=3)
---[2]Mutter (parent=1)

Opa hat zwei Söhne und eine Tochter. Der eine Sohn hat zwei Kinder, der andere eins und die Tochter ist kinderlos. Ganz logisch.
(Tatsächlich geht es um eine Kategorie-Struktur)

In PHP ist das auch kein Probem. Aber wie um Gottes Willen gebe ich das mit vLIB Template aus?
Nur das Array rekursiv aufzubauen ist etwas schwierig, da z.B. jeder Eintrag abhängig von der Tiefe eine andere Formatierung erhalten soll.

Oder bin ich nur zu doof? Bitte helf mir

Gruß
--manchester

Offline ClausVB

  • Administrator
  • Hero Member
  • *****
  • Posts: 566
    • Homepage: clausvb.de
Wie rekursive DB-Abfrage mit vLIB Temlpate ausgeben?
Reply #1 on: Thu, 06. October 2005 - 15:30:31
Quote
Opa hat zwei Söhne und eine Tochter. Der eine Sohn hat zwei Kinder, der andere eins und die Tochter ist kinderlos. Ganz logisch. (Tatsächlich geht es um eine Kategorie-Struktur)
Ich brauche die Struktur des normalen Arrays von PHP. Ohne diese Beispiel-Struktur kann ich Dir keinen LOOP-Array bauen.

Wenn Du in PHP diesen Array nicht realisiert bekommst, wird es auch keinen Weg geben, ihn für vLIB in einen LOOP-Array zu verwandeln.

Aufbau und Struktur eines LOOP-Arrays erklärt genau, die Unterschiede zwischen "normalen" Array-Strukturen und dem Aufbau eines LOOP-Arrays.

Gruß
Claus

cmager

  • Guest
Wie rekursive DB-Abfrage mit vLIB Temlpate ausgeben?
Reply #2 on: Tue, 20. December 2005 - 10:05:33
Hallo,

ich habe hier zwar keine antwort, stelle aber eine weiterführende frage: die im topic genannte struktur zu erzeugen, ist ja nicht wieter schwer. wie sieht das ganze allerdings aus, wenn diese baumstruktur variable "tiefen" hat?

zb.:

-- nav1
---- nav1-1
---- nav1-2
------- nav1-2-1
-- nav2
---- nav2-1
-- nav3
---- nav3-1
------nav3-1-1
--------nav3-1-1-1

ich hoffe, es ist verständlich, was ich meine. bin für jede hilfe dankbar

Offline ClausVB

  • Administrator
  • Hero Member
  • *****
  • Posts: 566
    • Homepage: clausvb.de
Wie rekursive DB-Abfrage mit vLIB Temlpate ausgeben?
Reply #3 on: Tue, 20. December 2005 - 14:41:29
Quote
-- nav1
---- nav1-1
---- nav1-2
------- nav1-2-1
-- nav2
---- nav2-1
-- nav3
---- nav3-1
------nav3-1-1
--------nav3-1-1-1
Das macht man am besten mit Rekursion. Siehe diesen Thread mit rekursiver Auslesung von Verzeichnissen. Da werden sie geholfen.

Hinweis: reine PHP-Fragen sind in diesem Forum Off-Topic.

Gruß
Claus

cmager

  • Guest
Wie rekursive DB-Abfrage mit vLIB Temlpate ausgeben?
Reply #4 on: Tue, 20. December 2005 - 15:08:10
Quote
Das macht man am besten mit Rekursion. Siehe diesen Thread mit rekursiver Auslesung von Verzeichnissen. Da werden sie geholfen.

Hinweis: reine PHP-Fragen sind in diesem Forum Off-Topic.

Hallo Claus,

ok hab mich wohl etwas unklar ausgedrückt. was rekursion usw ist, weis ich natürlich. meine frage war rein auf vlibTemplate bezogen. das array zu bilden, das ich dann via tmpl->setLoop(foo, array) dem template bekannt mache, ist kein problem. was mich eher interessiert ist, wie dann der zugehörige TMPL_LOOP selbst aussieht. Bei immer der selben tiefe des "baumes" ist es ja selbsterklärend, aber wenn das array verschieden tief verschachtelt ist, wüsste ich so spontan nicht, wie das geht.

mfg
Last Edit: Tue, 20. December 2005 - 15:58:55 by ClausVB

Offline ClausVB

  • Administrator
  • Hero Member
  • *****
  • Posts: 566
    • Homepage: clausvb.de
Wie rekursive DB-Abfrage mit vLIB Temlpate ausgeben?
Reply #5 on: Tue, 20. December 2005 - 16:09:11
Quote
(...), ist kein problem. was mich eher interessiert ist, wie dann der zugehörige TMPL_LOOP selbst aussieht. Bei immer der selben tiefe des "baumes" ist es ja selbsterklärend, aber wenn das array verschieden tief verschachtelt ist, wüsste ich so spontan nicht, wie das geht.
Das folgende PHP-Skript plus Template kann von 1:N alle Spalten und Zeilen ausgeben. Ob es jetzt 3 Zeilen und 7 Spalten sind oder 200 und 50 Spalten ist dem Skript egal.

Wie für alle vLIB-Dinge gilt: Die Logik muss in PHP abbildbar sein und die TMPL_LOOP müssen eine feste Struktur haben.

Wenn Du mit Rekursion arbeitest, müsste es theoretisch möglich sein mit require_once (modular programmieren) einen LOOP aufzubauen, der immer nur 1 Dimension der Verschachtelung ausgibt. Ist diese Dimension ausgegeben, geht die Rekursion wieder einen Anker höher.

Ob das auch praktisch klappt, weiß ich allerdings nicht, weil vLIB-Template nicht dafür vorgesehen ist, dynamische Templates zusammenzubauen.

Mehr zu solchen Problemen ("Nested Sets") gibt es im Netz und bei mrunix.de.

Gruß
Claus