Ordnerstruktur ausgeben - PHP

  • Moinsen zusammen,
    ich habe bisher selber versucht die Ordnerstruktur des Servers (die im Navigator sichtbare) in meinem PHP-Client aufzubauen. Es ist aber höchst unpraktisch und ich habe es bisher auch nicht vollständig lösen können.
    Meine Frage ist, ob es eine Funktion von der David-API gibt, die einem diese Aufgabe abnimmt? Es würde vor allem Zeit sparen, denn meine Lösung ist leider sehr umständlich (meiner Meinung nach).
    Oder hat jemand andere Ansätze, womit er es hinbekommen hat? Bin für alle Ratschläge offen.


    Viele Grüße, Lamarn

  • Hallo,


    die API bietet da nichts, das geht nur "manuell".
    Was genau soll das denn werden bzw. wozu ein PHP Client? Der Webaccess ist an sich doch sehr gut.


    Gruß Jens

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

  • Moin,
    ich schreibe das Programm gerade in einem Praktikum. Das heißt mein Chef hat von Kunden den Auftrag erhalten, einen PHP-Client für David zu schreiben, welcher dann in deren Intranet laufen soll. Ich weiß nicht, was sie sich dabei gedacht haben, da ich den Webaccess erst um einiges später zu Sehen bekommen habe. Deshalb dachte ich mir, dass es soetwas noch nicht gibt. Naja, die K. haben sich wohl etwas dabei gedacht.


    Mfg, Lev

  • Moin Jens,
    ich habe bisher die Ordnerstruktur damit realisiert, dass ich eine Liste erstellt habe. In jedem <li> ist zusätzlich zum Namen des Ordners eine leere <ul> mit einer Klasse names "output_".[Nummer, durchnummeriert nach Ordner dieser einen Ebene] .
    Per jQuery habe ich festgelegt, dass ich bei Klick auf ein bestimmtes <li> in dieser Ebene auch in das darunterliegende <ul> mit entsprechender Klasse geladen wird. Das funktioniert soweit. Ich habe mir bereits dabei gedacht, dass es nicht unbedingt funktionieren wird, da ja alle <ul> mit der entsprechenden Klasse angesprochen werden und somit Inhalt mehrfach an Stellen auftaucht, an denen er nicht sein sollte, aber ich habe mir auch als Gegenargument gedacht, dass jQuery einem die Möglichkeit anbietet nur auf einer Ebene zu bleiben.


    Die Frage lautet nun: Wie kann ich meinen Fehler ausmerzen, oder wie kann man das besser lösen? Ich bin in dem Fall sehr offen. Vielleicht kann jemand die dahinter liegende Logik darstellen? Ich habe Probleme damit, weil es kein statisches Menü ist, und ich somit auch nicht viel handfestes habe, mit dem ich die Übersicht aufbauen kann. Zum Beispiel ist es nicht möglich zu sagen, dass eine Ebene nur 100 Ordner darstellen kann, oder es nur 50 Ebenen tief hinunter geht.


    ps. Ich hoffe hier kann dabei geholfen werden, aber wenn ich diese Frage eher in einem jQuery-Forum stellen soll, dann werde ich es wohl tuen müssen.


    Mfg, Lev

  • Hallo Lev,


    bei jQuery arbeitet man überwiegend mit ID-Selektoren und die sollten eindeutig im DOM sein. Klassenselektoren dürfen mehrfach verwendet werden.
    So hättest Du das Problem nicht.


    Gruß Jens

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

  • Moin Jens,
    ja, so hatte ich das am Anfang auch :D. Das Problem dabei ist, dass ich ja auch bei den Unterebenen die Ordner durchnummerieren muss. Dann kann ich leider keine IDs verwenden, da sie somit doppelt und dreifach vorhanden wären. Auf diese Weise geht es ja leider nicht. Deshalb habe ich Klassen gewählt. Hast du eine Idee wie ich es trotzdem hinbekommen könnte mit IDs? Das wäre natürlich die Lösung, aber ich wüsste nicht wie das zu Erreichen wäre.


    Viele Grüße, Lev

  • Hi Lev,


    wie wäre es, wenn Du der Eben auch einen numerischen Wert zuweist, so kannst Du das ganz eindeutig machen.
    Eben 1 und Ordner 0 wäre also 10, oder A0 oder auch ein anderes Kürzel.
    Dabei musst Du natürlich nicht nur die Ebenen beachten, sondern auch noch die entsprechenden Ordner im Root.


    Oder Du setzt die ID aus den Ordnernamen zusammen, also für den jeweils ersten Ordner für drei ebenen wäre das 000 oder für den zweiten Ordner unterhalb des ersten im Root 01, etc.
    Also immer alle Ordnernamen verketten. So müsste es eigentlich eindeutig werden.


    Gruß Jens

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

  • Moin Jens,
    ja, das mit der Nummerierung ist wirklich ein eine gute Lösung. Ehrlich gesagt, weiß ich gar nicht mehr, warum ich da nicht weitergekommen bin. Ich hatte da wohl eine etwas größere Denkblockade.


    Jetzt war ich gerade dabei die Idee in die Tat umzusetzen und merke: Logischer Denkfehler (zumindest bei mir, keine Ahnung, ob du das bedacht hast). Wenn ich mich in der ersten Ebene befinde, ist noch alles gut. Per Klick habe ich die ID: level_001&folder_[...]. Nun bin ich also im Unterordner und habe alles geladen. Ab dort geht es aber schwer weiter, denn um das entsprechende David-Archiv auszulesen, muss ich alle vorherigen IDs behalten. Aus denen müsste ich den folder_ Wert auslesen und kann mir dann daraus den rekonstruieren in welchem Ordner ich mich eigentlich befinde. Hm.. kann man natürlich realisieren, aber ich finde es etwas umständlich. Diese Idee hat übrigens auch einen Bug*.


    Deshalb habe ich mir gedacht die Ebenen auszulassen (da sie mir im Prinzip gar nicht helfen.) Die Idee war also die Namen der Archive bzw. Nummerierung zu verwenden und eine Schlange daraus zu bauen. Nach einhundert Unterebenen ( //ich muss ja auch auf die Extremfälle vorbereitet sein) bildet sich aber eine riesige Schlange und macht den Quellcode unansehnlich. Es ist vorallem eine extra Funktion nötig, um die Archive auszulesen und es würde wahrscheinlich extrem lange dauern, da die API nun nicht gerade schnell ist (Musste ich leider daran feststellen, dass die rekursive Funktion, die die Ordnerstruktur auslesen sollte, fast anderthalb Minuten brauchte). Auch diese Idee enthält den Bug*.


    Die nächste Idee war also direkt die ID zu nehmen, die David mir sagt. Das werde ich jetzt auch tun, da es simpel ist und der Bug nicht auftritt.


    :* Wenn jemand die Webseite benutzt und während dieser Zeitspanne eine andere Person einen Ordner im Root erstellt, ist die Nummerierung nach dem erstellten Ordner nicht richtig und ich will nicht wissen, was dann alles falsch angezeigt werden kann. Dann hilft nur noch ein Reload der Seite und solch eine schl*mpige Programmierung (Das soll niemand persönlich nehmen!) möchte ich mir nicht angewöhnen.


    Mfg, Lev


    ps. Ich melde mich, wenn alles gut gelaufen ist. Natürlich auch, wenn ich Hilfe brauche :D.

  • Hi Lev,


    Deine "neue" Idee steht in meinem letzten Beitrag im zweiten Absatz. ;)
    Bei dieser Variante dürfte es den Bug nicht geben, da der neu erstellte Ordner ja eine neue Nummer bekommt und alle anderen sich nicht verändern.


    Ein Reload der Seite musst Du aber sowieso machen, da Du sonst nicht mitbekommst, dass dort ein neuer Ordner ist. Das geht gar nicht anders.


    Was die Zeitspanne angeht: Warum lädst Du den gesamten Baum auf einmal? Lade doch einfach bei Bedarf oder vielleicht jeweils eine Ebene im voraus.
    Vielleicht kannst Du ja auch mit einer Art Cache arbeiten und den per Ajax im Hintergrund aktualisieren.


    Gruß Jens

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

  • Moin Jens,

    Zitat

    Deine "neue" Idee steht in meinem letzten Beitrag im zweiten Absatz. ;)

    Ich habe die Idee nicht so vermarktet :D . Ich wollte nur mitteilen, wie weit ich gerade bin. Und deinen zweiten Absatz hatte nicht wirklich verstanden, weshalb ich selber auf die Idee kommen musste :D.


    Zitat

    Ein Reload der Seite musst Du aber sowieso machen, da Du sonst nicht
    mitbekommst, dass dort ein neuer Ordner ist. Das geht gar nicht anders.

    Das ist mir durchaus bewusst ^^. Dafür gibt es keine Probleme, wenn denn solch ein Fall eintritt. Ich baue aber wahrscheinlich nen Knopf ein, damit der Nutzer nur diesen DIV neuladen muss und nicht die ganze Seite.

    Zitat

    Was die Zeitspanne angeht: Warum lädst Du den gesamten Baum auf einmal?
    Lade doch einfach bei Bedarf oder vielleicht jeweils eine Ebene im
    voraus.

    Ich wollte die Ordnerstruktur vorher mit einer rekursiven Funktion lösen. Das war aber einige Zeit bevor ich hier im Forum nachgefragt hatte. Leider hat es zu lange gedauert. Lange Geschichte... Später habe ich mich entschieden hier nachzufragen, wie ich es per Nachladen hinbekomme. Und zur Zeit bin auch nur daran am Arbeiten. Ich habe es in meinem Beitrag nur erwähnt.


    Mfg, Lev

  • Hi Lev,


    was meinst Du damit, dass Du einen Kopf mit einbaust? Ich hoffe Du machst da keinen Frame draus? 8|
    Einfach mit Ajax nach / neu laden. Geht z.B. sehr komfortabel mit jQuery.Load.



    Gruß Jens

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

  • Moin Jens,
    nein, natürlich mache ich keinen Frame draus. Ich meinte einfach, dass ich einen Knopf/Button einbaue, mit dem der Nutzer die Ordnerstruktur neuladen kann, wenn er von einem Kollegen hört, dass ein neuer Ordner erstellt wurde.


    Übrigens sage ich dir doch die ganze Zeit schon, dass ich das mit Ajax bzw. jQuery realisiere? ?( Natürlich werde ich das somit auch beibehalten.


    Mfg, Lev

  • Hi Lev,


    sorry wenn ich Deine Projektstruktur nicht die ganze Zeit im Kopf habe, wenn hier alle paar Tage / Wochen mal ein Beitrag kommt. ;)


    Und so wie Du es oben beschrieben hast, war es nicht eindeutig.


    Gruß Jens

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

  • Moin Jens,
    kein Problem. :D


    Kann ja passieren, dass es ab und zu etwas länger dauert. Die letzten zwei Wochen, waren bei mir Ferien, weshalb ich es nicht weiter programmieren konnte.


    Mfg, Lev

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!