Zum Inhalt springen

Dynamische Struktur bei Frontend Plugin für den Backend Redakteur

Erstellt am 2. Januar 2006 · 5 Antworten · letzte Antwort am 25. November 2006

Tags: FlexForms, Frage

olly ·

Hallo zusammen,

um direkt einzusteigen versuche ich die Problemstellung kurz abstrahiert darzustellen:

Es soll eine Frontend Plugin zum Verwalten von Straßen erstellt werden. In einer Straße befindet sich eine beliebige Anzahl an Häusern (singuläres Objekt: "Haus"). In einem Haus gibt es wiederum eine beliebige Anzahl an Bewohnern/Mietern (singuläres Objekt "Bewohner").
Jedes dieser Objekte (Straße, Haus, Bewohner) hat verschiedene, jedoch auf der jeweiligen Objekt-Instanz fest strukturiere, Attribute, wie z.B.:

Straße := { Name; geographische Angabe; Länge in Metern; Sackgasse }
Haus := { Hausnummer; Baujahr; Farbe; Höhe in Metern }
Bewohner := { Familienname; Alter }

Somit ergibt sich aus der Objekt-Struktur [Straße] -> [Haus] -> [Bewohner] ein kleines Beispiel:

* "Hauptstraße"
  + "Hausnr. 1"
    - "Herr Müller"
    - "Frau Meyer"
    - "Herr Muster"
  + "Hausnr. 3"
    - "Frau Wohnen"
    - "Herr Stadtmann"
  + "Hausnr. 5"
* "Westring"
  + "Hausnr. 12"
    - "Herr Schnell"
    - "Frau Kurz"
  + "Hausnr. 13"
    - "Herr Schmidt"

Die Datenstruktur und die Speicherung in einer geeigneten Datenbank stellt kein Problem dar. Was mir allerdings Kopfschmerzen bereitet ist eine befriedigende Lösung/Idee mit welchen Mitteln man eine Verwaltung für einen Redakteur im Backend umsetzen kann.
Ich liebäugle mit FlexForms bzw. DynaFlex, habe hier allerdings noch keine Erfahrungen sammeln können.

Für jeden Hinweis und Tipp bin ich dankbar! Vielleicht hat jemand schon was Ähnliches umgesetzt bzw. hat dies vor?

Merci im Voraus!

MfG, Olly

steffenk ·

dynamische Flexforms sind Dein Ansatzpunkt.
Du erreichst das, in dem Du nicht eine XML-Datei sondern eine PHP-Datei als Basis nimmst - das Feld ist aber noch nicht besonders erschlossen, so das Du Dich auf ein wenig Pionierarbeit einlassen kannst.
Anders ist es, wenn Du die Eingaben selber in einem BE-Modul steuerst, da kannst Du auf entsprechende Eingaben reagieren.

Übrigens ist hier Ajax eine sehr userfreundliche Methode.

olly ·

Danke für den Hinweis. Ich habe für die Problemstellung bereits eine ältere Lösung in Perl im Zusammenspiel mit JavaScript. Bei Bedarf werden dynamische Eingabefelder per DHTML erzeugt und dann per POST an Perl zum Verarbeiten übergeben. Dies verleitet in Richtung Ajax.

Mit DynaFlex werde ich wohl etwas rumspielen müssen. Gibt es hier evtl. einige Beispiele, damit ich nicht komplett bei Null anfangen muss?
Meine Ergebnisse und eine kleine Dokumentation werde ich dann nach erfolgreicher Fertigstellung hier mal zur Schau und Diskussion stellen.

woida ·

Hi Olly, im aktuellen Typo3 Magazin ist ein Beispiel zu DynaFlex drin.
Mich hats zumindest motiivert, das ganze mal auzuprobieren.

olly ·

Hallo zusammen,

ich habe den Ansatz über DynaFlex ausprobiert und mich an den Hinweisen aus dem T3N Magazin orientiert. Die Implementierung ist eigentlich recht simpel, allerdings ergeben sich durch die Verwendung einige Probleme:

1) Schwierige Manipulationen
Das Anlegen der Struktur stellt kein Problem dar. Allerdings ist das Löschen von dynamisch erzeugten Einträgen eher kritisch, da hier eine eigene PHP-Methode entwickelt werden muss, welches die zu löschenden Daten tatsächlich aus der XML-Struktur entfernt und diese Modifikation in der Datenbank überschreibt.

2) Keine Möglichkeit zum einfachen Sortieren
DynaFlex stellt zwar eine Manipulationsmethode "move" (neben "add" und "remove") zur Verfügung. Allerdings müssen die entsprechenden Buttons zum Sortieren und die Logik des Sortiervorganges selbst implementiert werden. Hierzu ist eine weitere eigene PHP-Methode notwendig, die zwar auf die DynaFlex-Funktion "move" zurückgreift, aber letztendlich die XML-Struktur wieder anfasst und definiert.

3) Fehlen von Containern
Der derzeitige DynaFlex-Ansatz unterstützt noch keine Container (AFAIK, kann mich aber auch irren und diese Funktion verbirgt sich hinter etwas, wo ich sie nicht vermutet hätte). Container (oder Entity, vergleich bar mit Verzeichnissen eines Betriebssystems, zum sammeln von Daten), z.B. "Container 1" beinhaltet "Titel 1, Text 1, Bild 1", könnten dazu hergenommen werden, um Daten gesammelt zu löschen oder zu verschieben. Hier musste ich jedes einzelne Datenfeld anfassen und löschen (ebenfalls via eigener PHP-Funktion).

4) Browserschwierigkeiten
Da für nahezu jedes Feld, ob standard oder FlexForm, eine zugehörige JavaScript-Funktion hinterlegt wird, hatte mein System beim Umgang von z.B. zehn Häusern mit jeweils acht Bewohnern erhebliche Probleme ("Häuser" und "Bewohner" stammen aus der Beschreibung des Problems, ganz am Anfang dieses Threads). Die JS-Engine des Browsers meldete Laufzeit- und Überlast-Fehler.

Mein persönliches Fazit:
DynaFlex ist ein sehr guter Ansatz. Die Idee und der bisherige Aufwand dies zu erstellen ist hervorragend und geht in die richtige Richtung. Allerdings sind hier noch einige mehrere Erweiterungen vorzunehmen.

Zum Thema dynamische Datenstrukturen im TYPO3-Backend, und dies aus allgemeiner Sicht, nicht auf die Extension DynaFlex fixiert, gilt zu sagen, dass der Einsatz von dynamischen client-seitigen Funktionen benötigt wird. AJAX ("dyn." JavaScript) bietet hier gute Ansatzpunkte, allerdings wird die Integration in die TYPO3-Backend-Struktur einiges an Pionierarbeit (wie schon von steffenK erwähnt) und Zeitaufwand erfordern.

Ich habe die am Anfang des Threads genannte Problemstellung nun in eine einfachere TYPO3-Struktur überführt:

Objekte des Typs "Straße" werden als SysOrdner abgelegt - darunter gibt es genau einen Datensatz "Straßendaten" (Name, Länge in Metern, etc.), sowie ebenfalls in diesem SysOrdner mehrere Datensätze vom Typ "Haus".
Im "Haus"-Datensatz wurden per DynaFlex und eigenen PHP-Funktionen, die sich um das dynamische Erweitern und Löschen kümmern, die "Bewohner" aufgenommen.
Für den Backend-Redakteur wäre es wohl schöner, alles auf einen Blick zu haben, und Wechsel der Eingabemasken zu vermeiden, aber aus Gründen der Performance geht es derzeit mit den vorhandenen Mitteln nicht anders.

Falls sich ebenfalls jemand mit dieser Thematik beschäftig hat oder Anregunden hat, würde ich mich auf eine rege Diskussion und einen Austausch freuen.

Vielen Dank!

MfG, Olly

olly ·
steffenk schrieb

dynamische Flexforms sind Dein Ansatzpunkt.
Du erreichst das, in dem Du nicht eine XML-Datei sondern eine PHP-Datei als Basis nimmst - das Feld ist aber noch nicht besonders erschlossen, so das Du Dich auf ein wenig Pionierarbeit einlassen kannst.
Anders ist es, wenn Du die Eingaben selber in einem BE-Modul steuerst, da kannst Du auf entsprechende Eingaben reagieren.

Übrigens ist hier Ajax eine sehr userfreundliche Methode.

Ich habe diesen Artikel gerade wiedergefunden/-gesucht, welcher der Ausgangspunkt für "Inline-Relational-Record-Editing" war (siehe http://news.typo3.org/news/article/typo3-4-1-beta-1/).

Danke Steffen für die Motivation, es hat etwas gedauert 😉

olly