Zum Inhalt springen

Hilfe zu Datenpflegemasken im Backend gesucht

Erstellt am 15. September 2011 · 2 Antworten · letzte Antwort am 15. September 2011

Tags: TCA, Frage

nick_riviera ·

hallo,

seit März sitze ich mit Unterbrechungen an meinem ersten TYPO3-Projekt, auch das im Mai besuchte Mittwald Seminar zur Extension-Programmierung hat mich nicht wirklich weitergebracht #angry# .

Mein momentanes Hauptproblem ist die Datenpflege im Backend. Nachdem ich mir bei komplexeren Admin-Anforderungen keine andere Hilfe mehr gewusst habe, als Backend-Module mit eigenen Masken zu programmieren, hänge ich jetzt an einem ganz simplen Problem. Im Frontend gibt es einen internen Bereich, wo angemeldete User ihre Daten pflegen können sollen. Damit jeder User nur die ihm zugeordneten Daten angezeigt bekommt, müssen die Frontend-User beim Anlegen mit einer Institution verknüpft werden.

Frei programmiert würde ich jetzt hergehen, und die Tabelle fe_users mit einem int-Feld erweitern, das die uid der zugehörigen Institution enthält. Als nächstes würde ich eine select-Box in die Pflegemaske einbauen, die die Namen der Institutionen anzeigt, und die UID's als value besitzt - eine ganz einfache 1:n-Verknüpfung also.

Versuche ich jetzt, im Kickstarter ein solches Feld anzulegen, bekomme ich nur die Auswahlmöglichkeit "Database Relation". Wähle ich das aus und betätige "Update", erscheint nur die Eingabemöglichkeit für eine n:m-Relation, entweder mit einer kommaseparierten Liste oder über eine Verknüpfungstabelle. Für die Angabe der Fremdtabelle kann ich nur "Custom-Table" auswählen und anschließend den Tabellennamen manuell eintragen. Über welche Felder die Verknüpfung erfolgen soll, und welches Feld aus der Fremdtabelle für die Anzeige in der select-Box benutzt werden soll, kann nirgendwo festgelegt werden. Erwartungsgemäß erscheint nach dem Anlegen und Installieren auch nur eine leere Select-Box im Menü.

Ich besitze mittlerweile etwa einen Meter aktuelle TYPO3-Fachliteratur, und habe jahrelange Erfahrung mit php-Programmierung und mit Datenbanken. In jedem Buch lassen sich die Autoren seitenlang aus über so wichtige Dinge wie die Auswahl des Extension-Keys. Wenn es dann aber darum geht, für das Anlegen der Tabellenfelder im Kickstarter jeweils ein Beispiel zu bringen, oder zu beschreiben, wie man die angelegten Daten in der ext-tables.php manuell anpassen muss, gibt es im besten Fall die Bemerkung, dass dies den Rahmen des Buches sprengt.

Damit es erstmal weitergeht, habe ich mir so beholfen, dass die Frontend-User über die TYPO3-Standardmasken gepflegt werden, die Zuordnung zur Institution jedoch in einem separaten Backend-Modul erfolgt. Meine Bitte geht daher eher in die Richtung, mir mal eine Fachbuchempfehlung oder einen Weblink zu geben, in dem das Erstellen von Backend-Pflegemasken a) überhaupt behandelt wird und b) so ausführlich, dass man danach damit arbeiten kann. Ich kann und will mir nicht vorstellen, dass die Backend Pflegemasken von TYPO3 schon bei so trivialen Anforderungen wie einer 1:n-Verknüpfung nicht mehr mitspielen.

danke und Gruß Frank

maxhb ·

Hi!
Du hast ja zwei verschiedene Möglichkeite, Deiner Relationen abzubilden:
- fe_user per N:1 Relation an die Institutionen binden (dazu per Kickstarter die Tabelle fe-user um ein INT-Feld erweitern, weniger empfehlenswert)
- Institutionen per m:n Relation an die fe-user hängen, was über eine Relations-Tabelle realisiert wird. Die Verknüpfung erfolgt dabei automatisch über die Keys der verknüpften Tabellen. Die MN-Tabelle sieht dann etwa so aus: INT uid_local, INT uid_foreign. Die Tabelle würde dann wohl in etwa tx_deineextension_institutionen_m_n heissen.

Die Verknüfpung kannst Du dann per SQL auflösen.

Hoffe, das hilft ein wenig weiter.

CUi
maxhb

nick_riviera ·

hallo,

danke für Deine nette Antwort.

Das mit der n:m-Tabelle habe ich natürlich auch schon probiert. Es ist ja prinzipiell kein Problem, auch eine 1:n-Verknüpfung über so eine Tabelle abzubilden, zumal man im Kickstarter die maximale Anzahl an Verknüpfungen angeben kann. Setzt man den Wert auf 1, erscheint in der Pflegemaske auch bei vorhandener Verknüpfungstabelle nur ein einfaches Auswahlfeld, woran man erkennen kann, dass Typo3 die Eingaben irgendwie erkennt.

Das Problem ist aber, dass die Selectbox leer ist - für mich sieht es so aus, als ob die Verknüpfung zwar angelegt ist, die Tabelle aber nicht gefunden wird. Ausserdem ist es mir völlig schleierhaft, wie Typo3 wissen will, aus welchem Tabellenfeld die Klartexte entnommen werden sollen, die in der Select-Box stehen.

Worum es mir aber eigentlich geht, ist nicht unbedingt die Lösung dieses konkreten Problems, da programmiere ich mir notfalls nochmal eine eigene Eingabemaske. Es geht mir vielmehr darum, den ganzen Mechanismus grundsätzlich zu verstehen. Die Backend-Pflegemasken sind in der Realität in den seltensten Fällen so einfach, dass man nur die Feldinhalte einer Tabelle zu pflegen hat. Die meisten Masken zeigen a) Daten aus mehreren Tabellen an, und b) sind die Aktionen nicht einfach auf Neueingabe, Ändern und Löschen zu reduzieren. Wenn ich z.B. eine Institution lösche, müssen auch die zugehörigen Kurse, Standorte, Mitarbeiter etc. gelöscht werden, und Verknüpfungen zu Stichworten etc. aufgelöst werden. Wie ich das mit den Backend-Funktionen von Typo3 realisieren soll, ist mir ein Rätsel. In den Fachbüchern steht unisono drin, dass man durch manuelles Anpassen fast alles machen kann, sogar eigene Feldtypen zu programmieren. Das "Wie" sprengt dann aber wieder den Rahmen der Bücher.

Gerne wäre ich auch bereit, nochmal Geld für Bücher und Medien in die Hand zu nehmen, oder einen Kurs zu besuchen. Daher hatte ich die Frage gestellt, ob mir jemand hierzu eine Empfehlung aussprechen kann.

Gruß Frank