Ergebnis 1 bis 17 von 17

Thema: N zu N darstellen

  1. #1
    Contao-Nutzer Avatar von gintoxin
    Registriert seit
    01.09.2009.
    Beiträge
    19

    Standard N zu N darstellen

    Hallo.....

    Ich arbeite gerade an einem eigenen Modul. Nun ist hierfür die Verwaltung einer N zu N Datenbank nötig. Gibt es ein Mode um diese Datensätze zu administrieren?

    Oder ein gutes Plug oder irgendwas? :-)

    Grüsse und danke

  2. #2
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Contao kennt n:n nicht

    Was willst Du denn genau machen?
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  3. #3
    Contao-Fan Avatar von deerwood
    Registriert seit
    24.11.2009.
    Ort
    Hamburg
    Beiträge
    344

    Standard

    Moin,

    Zitat Zitat von Toflar Beitrag anzeigen
    Contao kennt n:n nicht
    Sorry, Toflar, aber das ist so nicht richtig. TL/Contao kennt sehr wohl N:M Beziehungen und nutzt diese bereits im Core. Siehe als Beispiel die Beziehung zwischen 'tl_user' und 'tl_user_group' (rosa in der Mitte des Diagramms, bzw. den Thread "ER Modell der Typoligth DB"): jede "User Group" hat keine bis viele "User", jeder "User" kann in keiner bis vielen "User Groups" sein.

    Richtig ist aber, dass TL/Contao N:M Beziehungen nicht "klassisch"/wie üblich mit einer Hilfstabelle abbildet, sondern stattdessen in einem BLOB-Feld einer der beiden beteiligten Tabellen ein serialisiertes Array mit den Schlüsseln/IDs der anderen Tabelle speichert. Bei "User" N:M "User Group" wird dazu das Feld "tl_user.groups" genutzt.

    Logisch verwaltet TL/Contao N:M also durchaus, jedoch kann man nicht "klassisch" per SQL einen JOIN formulieren, sondern muss die Verknüpfungen per PHP realisieren (siehe aber auch Leos Hinweis im obigen Thread).

    Zitat Zitat von Toflar Beitrag anzeigen
    Was willst Du denn genau machen?
    Ja, das müsste man wissen, um z.B. zu entscheiden, auf welcher Seite der Relation das BLOB-Feld/serialisierte Array gehalten wird.

    Ich erinnere auch daran, dass in den meisten Fällen eine N:M Beziehung in der Datenbank (sinnvoll) degeneriert zu einer 1:N Beziehung im Userinterface.

    • In einer Liste von Benutzern wird die Zugehörigkeit zu Benutzergruppen als Liste von Gruppen beim jeweiligen Benutzer angezeigt (z.B. Komma separiert). Bearbeitet man einen Benutzer, dann gibt es für die Zuordnung zu Benutzergruppen typisch ein mehrzeiliges Select-Feld bzw. eine Checkbox-Gruppe. 1 Benutzer -> 0 bis viele Gruppen.
    • In einer Liste von Benutzerngruppen werden die zugeordneten Benutzer als Liste angezeigt (z.B. Komma separiert). Bearbeitet man eine Gruppe, dann gibt es für die Zuordnung zu Benutzern typisch ein mehrzeiliges Select-Feld bzw. eine Checkbox-Gruppe. 1 Gruppe -> 0 bis viele Benutzer.

    Eine noch gerade brauchbare Alternative der Darstellung, die N:M direkt visualisiert, wäre eine Matrix von "X"/Checkboxen ... sofern eine der beiden Tabellen nur wenige Datensätze hat (für die Spalten, damit die Darstellung in der Breite akzeptabel ist). Oder übersehe ich hier gerade irgend ein tolles Userinterface?

    Falls nicht: ich sehe N:M Beziehungen als absolut notwendiges Hilfsmittel für die DB an (auch incl. zusätzlicher Attribute an der N:M Beziehung, bei TL in Form von weiteren Elementen im serialisierten Array machbar) ... aber im Userinterface bzw. für den normalen Bediener wird das gar nicht erkennbar.

    LG, Georg

  4. #4
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ich möchte hier nur kurz erwähnen: Falls es nötig ist, lassen sich N:N Beziehungen auch mit Zwischentabellen in TYPOlight realisieren - es ist einfach manueller Entwicklungsaufwand (load_callback, save_callback) nötig.
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  5. #5
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von deerwood Beitrag anzeigen
    Richtig ist aber, dass TL/Contao N:M Beziehungen nicht "klassisch"/wie üblich mit einer Hilfstabelle abbildet, sondern stattdessen in einem BLOB-Feld einer der beiden beteiligten Tabellen ein serialisiertes Array mit den Schlüsseln/IDs der anderen Tabelle speichert. Bei "User" N:M "User Group" wird dazu das Feld "tl_user.groups" genutzt.
    Das meinte ich damit
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  6. #6
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ich habe gerade ein Modul associategroups ins Repository gestellt, mit dem eine Verknüpfungstabelle für Gruppen angelegt wird.
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  7. #7
    Contao-Fan Avatar von deerwood
    Registriert seit
    24.11.2009.
    Ort
    Hamburg
    Beiträge
    344

    Standard

    Moin,

    Zitat Zitat von andreas.schempp Beitrag anzeigen
    Ich habe gerade ein Modul [associategroups] ins Repository gestellt, mit dem eine Verknüpfungstabelle für Gruppen angelegt wird.
    Ah, toll, danke. Getestet habe ich noch nicht, aber aus dem Code lese ich heraus, dass diese Erweiterung die beiden N:M Zwischentabellen tl_member_to_group (Frontend) und tl_user_to_group (Backend) zusätzlich zum 'normalen' TL/Contao Mechanismus befüllt. Der Core und existierende Erweiterungen sind also völlig unabhängig davon, aber neue Erweiterungen können davon Gebrauch machen und sehr effizient mit purem SQL JOIN die Beziehungen abfragen. Sehr nützlich/effizient, falls man z.B. sehr viele Frontend-Mitglieder hat und, ausgehend von einer Gruppe, bestimmte Mitglieder herausfiltern will.

    Und ein schönes Lehrstück, wie man "klassische" N:M Beziehungen in TL/Contao haben kann.

    LG, Georg

  8. #8
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Genau so ist es. Es ist natürlich wie immer aus einem Auftrag entstanden, ich bin gerade an einer Mitgliederliste die per Gruppe gefiltert werden kann

    Das einzige Problem welches ich sehe (und noch nicht lösen konnte) ist, wenn jemand direkt in die Datenbank schreibt... Aber der Core macht das nicht, und jede andere Erweiterung müsste halt Rücksicht nehmen.
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  9. #9
    Contao-Nutzer
    Registriert seit
    17.03.2010.
    Beiträge
    38

    Standard

    Zitat Zitat von andreas.schempp Beitrag anzeigen
    Ich möchte hier nur kurz erwähnen: Falls es nötig ist, lassen sich N:N Beziehungen auch mit Zwischentabellen in TYPOlight realisieren - es ist einfach manueller Entwicklungsaufwand (load_callback, save_callback) nötig.
    Ich versuche gerade dies umzusetzen. Habe aber da noch Schwierigkeiten.
    Leider versucht Contao nach dem Absenden des Formulars die Daten in die Tabelle zuspeichern. Da aber das Feld dort natürlich nicht vorhanden ist, wird eine Exception aufgeworfen.

    Wie also kann ich verhindern, dass das Feld nicht abgespeichert wird?

  10. #10
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von serienjunky Beitrag anzeigen
    Ich versuche gerade dies umzusetzen. Habe aber da noch Schwierigkeiten.
    Leider versucht Contao nach dem Absenden des Formulars die Daten in die Tabelle zuspeichern. Da aber das Feld dort natürlich nicht vorhanden ist, wird eine Exception aufgeworfen.

    Wie also kann ich verhindern, dass das Feld nicht abgespeichert wird?
    Indem du im save_callback einen leeren String zurück gibst, und im eval ein "doNotSaveEmpty" setzt (siehe Entwickler-Doku).
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  11. #11
    Contao-Nutzer
    Registriert seit
    17.03.2010.
    Beiträge
    38

    Standard

    Vielen Dank. Wäre ich glaub nie drauf gekommen

  12. #12
    Contao-Nutzer
    Registriert seit
    31.12.2009.
    Beiträge
    9

    Standard

    @andreas.schempp:
    Danke für das Modul! Hab einiges dadurch gelernt

  13. #13
    Contao Core-Team
    Association Vorstand
    Avatar von andreas.schempp
    Registriert seit
    15.06.2009.
    Ort
    Lyss
    Beiträge
    5.613
    Partner-ID
    8667
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hier nochmals eine DB-Übersicht, falls es interessiert: http://www.contao.org/blog-leser/ite...ntao-core.html

    Die "fehlerhaften" N:M Beziehungen sind mit roter Feldtyp-Beschreibung markiert.
    terminal42 gmbh
    Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
    Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle

  14. #14
    Contao-Nutzer
    Registriert seit
    25.02.2010.
    Beiträge
    89

    Standard

    Sorry das ich den Thread noch einmal ausgraben muss, hab mir auch einmal das Modul installiert. Jedoch zeigt mir das Installtool nicht die gewünschten DB Erweiterungen an, die das Modul mitführt.
    Ich hab zudem noch eine Frage zu N:M Darstellungen in Contao:
    Die Ansicht im BE wird quasi zur Zeit immer aufgeblasen? Also habe ich zum Beispiel 100 Gruppen, dann werden mir diese 100 Gruppen in der Benutzermaske komplett mit einer checkboxliste angezeigt?
    Wenn ja, gibt es Möglichkeiten dies anders darzustellen?

  15. #15
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Klar gibt es die Du nimmst dann eben halt nicht das Checkbox-Widget sondern irgendwas geeigneteres
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

  16. #16
    Contao-Nutzer
    Registriert seit
    25.02.2010.
    Beiträge
    89

    Standard

    was wäre denn bei einerm n:m verknüpfung mit mehreren 100 Einträgen geeigneter als checkbox? Schön wäre es eine Art Filetree Widget zu haben, was sich anhand einiger DB Einträge Aufbauen lässt, oder ein Widget über den ich Filter und Suchmöglichkeiten habe, welche sich dann in einer Paginationliste mit checkboxeinträgen wiederspiegelt, und nur eine MAX ANzahl an Einträgen anzeigt, wie es im BE selbst der Fall ist. Da habe ich ja auch oben die Möglichkeit Filter einzublenden und nach Einträgen zu Suchen. Maximal werden dann default 500 Einträge angezeigt.

  17. #17
    Contao-Urgestein Avatar von Toflar
    Registriert seit
    15.06.2009.
    Beiträge
    4.467
    Partner-ID
    8667
    User beschenken
    Wunschliste

    Standard

    Sowas gibt es alles, bist ja nicht der erste, der über solche Probleme stolpert
    Im ER gibt's etliche Widgets und ansonsten bleibt immer noch die Möglichkeit, selber was geeignetes zu schreiben
    Contao Core-Entwickler @terminal42 gmbh
    Wir sind Contao Premium-Partner!
    Für Individuallösungen kannst du uns gerne kontaktieren.
    PS: Heute schon getrakked?

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Insert-Tag in Inhaltselement darstellen
    Von p7ha im Forum Allgemeine Inhaltselemente
    Antworten: 8
    Letzter Beitrag: 13.11.2013, 16:56
  2. Daten aus XML Quelle darstellen
    Von thomastremmel im Forum Allgemeine Inhaltselemente
    Antworten: 1
    Letzter Beitrag: 18.07.2010, 13:13
  3. event_teaser.tpl als Tabelle darstellen
    Von mandrael im Forum Modifizierte Templates
    Antworten: 12
    Letzter Beitrag: 14.04.2010, 23:35
  4. Referenzen darstellen
    Von rocco im Forum Allgemeine Inhaltselemente
    Antworten: 17
    Letzter Beitrag: 13.11.2009, 06:27

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •