Ergebnis 1 bis 9 von 9

Thema: MM 2.3 - Fragen zu Eltern-Kind-Tabellen und der Frontend-Ausgabe

  1. #1
    Contao-Fan Avatar von Webstylerin
    Registriert seit
    24.08.2009.
    Ort
    Schlüsselfeld, Bayern
    Beiträge
    406
    Partner-ID
    6232
    Contao-Projekt unterstützen

    Support Contao

    Standard MM 2.3 - Fragen zu Eltern-Kind-Tabellen und der Frontend-Ausgabe

    Hallo,

    ich hänge mal wieder fest und wäre sehr dankbar über einen Link zum passenden Handbuch-Eintrag zu bekommen oder eine sonstige kurze Hilfestellung zu bekommen, wo ich ansetzen kann/weitermachen muss. Ich finde einfach nichts, dass ich als Lösung identifizieren könnte.

    Folgendes ist vorhanden:

    - Eine Tabelle "Maschinenmarkt": Hier kommen verschiedenste Informationen zusammen und diese DB ist das Kernstück des MM.
    - Eine Tabelle "Hersteller": Eine Eltern-Tabelle, die via Select-Attribut in den Maschinenmarkt integriert ist.
    - Eine Tabelle "Modelle": Eine Kind-Tabelle von Hersteller und ebenfalls über ein Select-Attribut in den Maschinenmarkt integriert ist. Hier habe ich eine Filter-Regel, die dafür sorgt, dass nach Auswahl des Herstellers in der Eingabemaske im Backend nur noch die passenden Modelle angezeigt werden.

    Jetzt bin ich mit dem Aufbau soweit zufrieden, dass es an die Frontendansicht geht. In den Rendereinstellungen für die FE-Ausgaben des Maschinenmarktes sind Hersteller und Modell aufgeführt. Weiterhin habe ich Filtereinstellungen zusammengestellt, hier sind ebenfalls Hersteller und Modell als Einzelauswahl enthalten. Allerdings bleiben im Filter und in der Listenansicht die Werte für "Modell" leer, "Hersteller" ist da. Ich denke, das liegt auch hier an der Eltern-Kind-Beziehung der beiden Tabellen. Aber wie muss ich die Kind-Tabelle einfügen, dass die Werte ausgegeben werden?

    VG
    Nicole

  2. #2
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.925
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Webstylerin Beitrag anzeigen
    Hallo,

    ich hänge mal wieder fest und wäre sehr dankbar über einen Link zum passenden Handbuch-Eintrag zu bekommen oder eine sonstige kurze Hilfestellung zu bekommen, wo ich ansetzen kann/weitermachen muss. Ich finde einfach nichts, dass ich als Lösung identifizieren könnte.

    Folgendes ist vorhanden:

    - Eine Tabelle "Maschinenmarkt": Hier kommen verschiedenste Informationen zusammen und diese DB ist das Kernstück des MM.
    - Eine Tabelle "Hersteller": Eine Eltern-Tabelle Relation, die via Select-Attribut in den Maschinenmarkt integriert ist.
    - Eine Tabelle "Modelle": Eine Kind-Tabelle Relation von zu Hersteller und ebenfalls über ein Select-Attribut in den Maschinenmarkt integriert ist. Hier habe ich eine Filter-Regel, die dafür sorgt, dass nach Auswahl des Herstellers in der Eingabemaske im Backend nur noch die passenden Modelle angezeigt werden.

    Jetzt bin ich mit dem Aufbau soweit zufrieden, dass es an die Frontendansicht geht. In den Rendereinstellungen für die FE-Ausgaben des Maschinenmarktes sind Hersteller und Modell aufgeführt. Weiterhin habe ich Filtereinstellungen zusammengestellt, hier sind ebenfalls Hersteller und Modell als Einzelauswahl enthalten. Allerdings bleiben im Filter und in der Listenansicht die Werte für "Modell" leer, "Hersteller" ist da. Ich denke, das liegt auch hier an der Eltern-Kind-Beziehung der beiden Tabellen. Aber wie muss ich die Kind-Tabelle einfügen, dass die Werte ausgegeben werden?

    VG
    Nicole
    Vorab: das Wort "Kindtabelle" hat bei MM eine besondere Bedeutung und bezeichnet Tabellen, die mit ihrer Elterntabelle über die pid verbunden ist - analog bei Contao z. B. Newsarchiv (P) und News (C)

    Was Du bei Maschinenmarkt - Hersteller - Modelle hast, sind ganz normale Relationen - in dem Fall als 1:n-Relation(en) ... das "Kindtabelle" bitte weg lassen!

    Schalte bitte mal die verlinkte Filterregel aus - ist dann im FE was zu sehen? Wenn ja. liegt es sicher an https://metamodels.readthedocs.io/de...ade-auf-mm-2-2

    bei Attribut Select und Tags eingestellte Filter gelten nun auch für die FE-Ausgabe; sind diese nur für eine Filterung der Eingabemaske zuständig, muss ggf. das Query angepasst werden
    Dann muss das Query erweitert werden, dass es nur im BE zündet https://metamodels.readthedocs.io/de...nd-und-backend

    Für den Fall soll es noch eine Checkbox/Select geben um einzustellen, wo die Filterregel werkeln darf.... bin aber aktuell mit MM 2.4 eingespannt

  3. #3

  4. #4
    Contao-Fan Avatar von Webstylerin
    Registriert seit
    24.08.2009.
    Ort
    Schlüsselfeld, Bayern
    Beiträge
    406
    Partner-ID
    6232
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    Vorab: das Wort "Kindtabelle" hat bei MM eine besondere Bedeutung und bezeichnet Tabellen, die mit ihrer Elterntabelle über die pid verbunden ist - analog bei Contao z. B. Newsarchiv (P) und News (C)

    Was Du bei Maschinenmarkt - Hersteller - Modelle hast, sind ganz normale Relationen - in dem Fall als 1:n-Relation(en) ... das "Kindtabelle" bitte weg lassen!
    Entschuldige, wenn ich die Wörter falsch verwende, aber tatsächlich stehen die Begriffe Kind-Tabelle und Elterntabelle im Backend:

    Anhang 26894

    Zitat Zitat von zonky Beitrag anzeigen
    Schalte bitte mal die verlinkte Filterregel aus - ist dann im FE was zu sehen? Wenn ja. liegt es sicher an https://metamodels.readthedocs.io/de...ade-auf-mm-2-2
    Im Frontend ist was zu sehen. Der Filter "Hersteller" ist mit Inhalt zu sehen, der Filter "Modelle" ist leer. In der Liste darunter werden beide Test-Einträge angezeigt, der "Hersteller" wird angegeben, das "Modell" nicht.

    Es ist auch kein Update von 2.2 auf 2.3 sondern wird mit 2.3 frisch aufgesetzt.

    Zitat Zitat von zonky Beitrag anzeigen
    Dann muss das Query erweitert werden, dass es nur im BE zündet https://metamodels.readthedocs.io/de...nd-und-backend

    Für den Fall soll es noch eine Checkbox/Select geben um einzustellen, wo die Filterregel werkeln darf.... bin aber aktuell mit MM 2.4 eingespannt
    Die Frontend-Filter sind in der Maschinenmarkt-Tabelle angelegt und über ein Frontend-Modul in die Seite eingebunden. Die Filter-Regel, die die Eingabe des Modells in die Maschinenmarkt-DB vom gewählten Hersteller abhängig anzeigt, ist in der Modell-DB hinterlegt. Dieser ist beim Modell-Attribut der Maschinenmarkt-Tabelle verlinkt.

    Anhang 26895
    Anhang 26896

    Zitat Zitat von zonky Beitrag anzeigen
    getestet?
    Es tut mir leid, dass ich nicht immer sofort antworten kann. Getestet habe ich tatsächlich nicht wirklich etwas, da mir unklar ist was. Es ist das erste mal dass ich mit Eltern-Kind… dieser Art der DB-Relationen arbeite. Die Lösung ist sicher recht einfach, aber ich finde sie einfach nicht.

  5. #5
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.925
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Webstylerin Beitrag anzeigen
    Entschuldige, wenn ich die Wörter falsch verwende, aber tatsächlich stehen die Begriffe Kind-Tabelle und Elterntabelle im Backend:

    Anhang 26894
    Was Du schreibst und was im Screenshot zu sehen ist, ist (für mich) verwirrend. Ja es gibt die Variante "Kindtabelle" - dann hat man in der Elterntabelle in der BE-Liste rechts ein weiteres Icon um zu der Kindtabelle für das eine Item zu gelangen. Wie geschrieben, ist das die Relation per pid wie das Contao üblicher Weise macht. Das kommt nach meiner Erfahrung nur in weniger als 5% der Fälle vor.

    Zu 95% werden "echte" Relationen über die Attribute Mehrfachauswahl [Tags] und Einzelauswahl [Select] erstellt - dann ist die Auswahl in der Eingabemaske des Items zu finden. Zu ein und derselben Tabelle aber zu 0% beides nie gleichzeitig! Ich vermute, das ist bei Dir der Fall...


    Zitat Zitat von Webstylerin Beitrag anzeigen
    Es ist auch kein Update von 2.2 auf 2.3 sondern wird mit 2.3 frisch aufgesetzt.
    Das ist in dem Fall egal - da hat sich seit 2.2 nichts geändert.

    Zitat Zitat von Webstylerin Beitrag anzeigen

    Die Frontend-Filter sind in der Maschinenmarkt-Tabelle angelegt und über ein Frontend-Modul in die Seite eingebunden. Die Filter-Regel, die die Eingabe des Modells in die Maschinenmarkt-DB vom gewählten Hersteller abhängig anzeigt, ist in der Modell-DB hinterlegt. Dieser ist beim Modell-Attribut der Maschinenmarkt-Tabelle verlinkt.
    Soweit alles o.k. - seit MM 2.2 ist es so, dass der Filter, der im BE die Sache regelt, auch im FE greift. Wenn aber im BE in der Filterregel auf POST/GET-Parameter zugegriffen wird, die es im FE nicht gibt, liefert die Filterregel NULL zurück. Ein Beispiel wie man das im SQL abfängt, hatte ich verlinkt.


    Beispiel zum Hintergund der Änderung: Model Orchester ist mit Model Musiker per Tags verbunden. Für die Auswahl im BE gibt es eine Regel z. B. "nur Musiker mit gültigem Zertifikat xy". Ab MM 2.2 muss man sich nun im FE nicht mehr im Template darum kümmern, dass nur die Musiker mit gültigem Zertifikat ausgegeben werden. In Item X könnte ja noch bestehende Relationen zu Musikern, bestehen, deren Zertifikat abgelaufen ist. Das wird in dem Item X ja erst aktualisiert, wenn es mit Speichern aktualisiert wird.

  6. #6
    Contao-Fan Avatar von Webstylerin
    Registriert seit
    24.08.2009.
    Ort
    Schlüsselfeld, Bayern
    Beiträge
    406
    Partner-ID
    6232
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    Soweit alles o.k. - seit MM 2.2 ist es so, dass der Filter, der im BE die Sache regelt, auch im FE greift. Wenn aber im BE in der Filterregel auf POST/GET-Parameter zugegriffen wird, die es im FE nicht gibt, liefert die Filterregel NULL zurück. Ein Beispiel wie man das im SQL abfängt, hatte ich verlinkt.
    Jetzt hats glaub ich Klick gemacht!

    Also, mein Problem war schlicht weg der BE-Filter, der das Eintragen der einzelnen Maschinen erleichtern sollte in dem er, nach Auswahl eines Herstellers während der Eingabe, den Post-Parameter für den Hersteller genommen hat und somit nur die passenden Modelle angezeigt hat.

    Dadurch, dass der gleiche Filter auch 1zu1 im Frontend übernommen wurde, dort aber natürlich kein Parameter zu finden war, war das Ergebnis einfach leer. Indem man beim Filter abfragt, ob "contao" in der URL ist, kann man einfach überprüfen, ob man sich im Back- oder im Frontend befindet.

    Das ist nun mein aktualisierter SQL-Filter:

    PHP-Code:
    SELECT modell.id FROM mm_markt_modell AS modell
    WHERE 
    IF (
        
    SUBSTRING_INDEX(SUBSTRING_INDEX('{{env::request}}''/', -1), '?'1) = 'contao',
        IF (
            {{
    param::post?name=manufacturer}} != 'NULL',
            
    modell.pid = (
                
    SELECT herst.id FROM mm_markt_hersteller AS herst 
                WHERE herst
    .alias = {{param::post?name=manufacturer}} 
                
    LIMIT 1
            
    ),
            
    modell.pid = (
                
    SELECT markt.manufacturer
                FROM mm_markt_maschine 
    AS markt
                WHERE markt
    .id SUBSTRING_INDEX({{param::get?name=id}},'::',-1)
                
    LIMIT 1
            
    )
        ),
        
    1=1

    Im Frontend sehe ich nun was!!! Dann mach ich hier mal weiter. Vielen herzlichen Dank!

  7. #7
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.925
    User beschenken
    Wunschliste

    Standard

    ja, das meinte ich ... und check nochmal Deinen DB-Aufbau

    Meine Empfehlung ist immer, das aufzumalen... geht per Papier und Stift oder sowas wie https://www.yworks.com/yed-live/

    Dann kann man das teilen und drüber sprechen

  8. #8
    Contao-Nutzer
    Registriert seit
    15.03.2024.
    Beiträge
    1

    Standard Filter nur für Eingabe, nicht für BE-Liste?

    Ich habe ein ähnliches Szenario und die Filterung für die Eingabe funktioniert auch ohne Probleme. Wenn ich nun aber ein Attribut, für welches es so einen Backend-Filter gibt in einer Backend-Liste anzeigen lassen will, wird in der Spalte nur ein "-" ausgegeben. Gibt es einen Trick, wie ich den Filter nur für das Eingabe-Formular, nicht aber für die BE-Liste einstellen kann?

  9. #9
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.925
    User beschenken
    Wunschliste

    Standard

    mit "SUBSTRING_INDEX" wird ja die URL nach "Eigenheiten" untersucht und damit eine entsprechende Fallunterscheidung gemacht - wenn Du dir die URLs für

    * BE Liste
    * BE Eingabemaske
    * FE Liste

    ansiehst, sollten da Unterscheidungsmerkmale auszumachen sein

    Zu beachten für MM 2.3: https://community.contao.org/de/show...l=1#post586493 ff.

Aktive Benutzer

Aktive Benutzer

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

Berechtigungen

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