MetaModel-Frontendfilter + Anzuwendende Filtereinstellungen + Veröffentlichungsstatus
Hi,
ich bin schon weit gekommen mit MM - echt super das Ganze! Nun habe ich mal wieder eine "Auffälligkeit". Ich habe ein FE Filter mit zwei Selects auf einem MM, prinzipiell funktioniert das. Allerdings scheint der FE filter nicht alle Filtereinstellungen zu beachten. So habe ich einen "Veröffentlichungsstatus" und ein "eigenes SQL" (start/stop Datum) eingefügt (alles einfach untereinander, ohne übergreifendes UND). Meine Listenansicht, die den Filter verwendet zeigt die richtigen Einträge korrekt an, das Select des FE Filters aber alle Einträge inkl. den nicht gewollten - wie nicht veröffentlichte oder alte Einträge.
Sollte des FE Filter das beachten (bug?) oder habe ich was falschgemacht (Problem vor dem Bildschirm)?
ps. Contao 3.2.9 + composer + metamodel bundle_all dev-master
Liste der Anhänge anzeigen (Anzahl: 3)
Ja gerne:
Filtereinstellungen
Anhang 13417
Das eigene SQL ist folgendes (start und stop Datum für einen Eintrag)
Code:
SELECT id FROM {{table}} WHERE ({{table}}.start IS NULL OR {{table}}.start='' OR {{table}}.start<UNIX_TIMESTAMP()) AND ({{table}}.stop IS NULL OR {{table}}.stop='' OR {{table}}.stop>UNIX_TIMESTAMP())
Und die Moduleinstellungen vom Modul, was auf die Seite kommt.
Anhang 13424
Ergibt dann (leider) folgendes: Im Select tauchen alle auf, die angezeigte ungefilterte Liste ist aber richtig.
Anhang 13418
Liste der Anhänge anzeigen (Anzahl: 1)
Ich denke, hoffe, die Antwort gefunden zu haben. Kann es sein, dass ich in den Einzelauswahl-Filtersettings den Haken bei "Nur verbleibende Tags" setzen muss? Dann erscheinen nur die wünschten, die durch das ganze Filterset gefunden werden sollen.
Anhang 13425
Was ich aber nicht verstehe, ist die Bedeutung der Einstellung "Nur zugeordnete Tags"?!
MetaModel FE-Filter: Begrenzung der zur Auswahl stehenden Items mit ODER-Verknüpfung
Hallo,
leider muss ich diesen alten Thread noch einmal aufgreifen, da ich auf ein sehr ähnliches Problem gestoßen bin.
Ausgangssituation:
Contao 4.4.43, MetaModels 2.1.1 (mit MM-Frontend-Editing 2.1.0; hier irrelevant)
Tabelle mm_projectname mit den Spalten project (Text) und user (Text) hat drei Einträge (erster und dritter Tabelleneintrag sind dem User "Demo" zugeordnet, der zweite Eintrag einem anderen User).
Dem jeweils im FE eingeloggten User sollen nur seine eigenen Projekte angezeigt werden, von denen er sich eines zur Bearbeitung aussuchen kann.
Dazu wurden auf der Seite ein FE-Filter und eine MM-Liste eingebunden. Im FE-Filter ist ein Filtersatz aktiviert, der aus einer SQL-Abfrage besteht (SELECT id FROM mm_projectname WHERE user = '{{user::username}}') UND-verknüpft mit einer einfachen Abfrage auf das Attribut project mit der Option "Nur verbleibende Tags". Die MM-Liste enthält nur den einfachen Filter auf das Attribut project.
Ergebnis:
Im FE-Filter steht überhaupt kein Eintrag zur Auswahl (obwohl sowohl der erste als auch der dritte Tabelleneintrag dem Demo-User zugeordnet ist). Die MM-Liste bleibt leer.
Erwartet hätte ich, dass der FE-Filter den ersten und dritten Eintrag zur Auswahl anbietet, da diese beiden dem Demo-User zugeordnet sind.
Im Rahmen der Fehlersuche kann ich ausschließen, dass es an der Konstruktion mit dem Inserttag liegt oder mit dem Login-Status des Demo-Users zu tun hat. Denn auch die versuchsweise stark vereinfachte SQL-Abfrage "SELECT id FROM mm_projectname WHERE id IN (1,3)" führt zum identischen Ergebnis.
Versuchsweise habe ich auch die SQL-Abfrage durch die Filterregel "Vordefinierter Satz von Items" mit den items "1,3" ersetzt. Das Problem bleibt auch hier bestehen.
Ändert man jedoch die Verknüpfung der beiden Filterregeln (SQL und Einfach-Abfrage auf Attribut project) im FE-Filter von UND auf ODER, funktioniert das Konstrukt wie geplant: Der FE-Filter stellt nur die zutreffenden Einträge zur Auswahl und die MM-Liste zeigt nur den jeweils im FE-Filter selektierten Eintrag an.
Logisch ist das aber irgendwie nicht, oder? Übersehe ich da etwas oder ist das ein Bug?
Mich erinnert das etwas an einen ODER-Filter zur Generierung eines Ausschlusskriteriums, wie in der MetaModels Documentation 2.1.0 beschrieben (https://buildmedia.readthedocs.org/m...els-german.pdf S. 92). Allerdings ergibt sich im vorliegenden Fall kein Unterschied, ob die Option "Nach erstem Treffer beenden" ausgewählt ist oder nicht. Ich möchte gerne verstehen, was hier passiert, um bei der weiteren Verwendung der Filter nicht auf ewiges Probieren angewiesen zu sein. Hat jemand eine Erklärung?
VG,
Maz
ODER-Verknüpfung vs. UND-Verknüpfung
Danke zonky für die schnelle Rückmeldung und die Hinweise (sind schon umgesetzt).
Deine letzte Antwort (SQL-Vorfilter) kann ich aber nicht einordnen, es sollte ja nichts sortiert werden...
Um nicht zu verwirren, belasse ich es für das Beispiel hier bei den in meinem vorherigen Posting beschriebenen Attributen.
Dass alles so funktioniert, hatte ich ja gesehen. Die Frage ist jedoch, warum brauche ich hier eine ODER-Verknüpfung, wenn ich doch logisch auf zwei Bedingungen abfrage, die gleichzeitig erfüllt sein müssen:
1) Die SQL-Abfrage "SELECT id FROM mm_projectname WHERE user = '{{user::username}}'" bzw. testweise vereinfacht zu "SELECT id FROM mm_projectname WHERE id IN (1,3)" sollte eine Liste mit IDs ausgeben, in diesem Fall die IDs 1 und 3, weil diese dem eingeloggten User in der Tabelle zugeordnet sind bzw. so vorgegeben sind.
2) Die Einfach-Abfrage auf das Attribut project sollte nach meinem Verständnis alle drei IDs der Tabelle ausgeben, da ja keine Begrenzung auf einen Parameter vorgegeben wird. Vermutlich dient die Filterregel lediglich der Erstellung bzw. Anzeige des Formularwidgets im Frontend (Vgl. https://metamodels.readthedocs.io/de...exclusion.html), hat also keine eingrenzende Funktion.
Sollte man dann nicht erwarten, dass eine UND-Verknüpfung beider Bedingungen auf die IDs 1 und 3 einschränkt, während eine ODER-Verknüpfung die IDs 1,2,3 ausgibt?
Die Beschränkung der im FE-Filter zur Auswahl stehenden Items auf diejenigen mit den IDs 1 und 3 erreiche ich aber nur durch die ODER-Verknüpfung. UND-Verknüpfung (bzw. aufeinanderfolgende Filter ohne Verknüfung) liefern ein leeres Ergebnis. Das sieht für mich nach einem Widerspruch aus.
Liegt es daran, dass die UND- bzw. ODER-Verknüpfungen der Filterregeln nicht exakt der Verwendung in SQL entsprechen (erste Filterregel liefert IDs, zweite Filterregel fragt ja eigentlich keine ID sondern den Eintrag in der Spalte project ab)?
VG, Maz
Liste der Anhänge anzeigen (Anzahl: 1)
Das ist ja interessant:
Bin streng nach Deiner Anweisung verfahren und habe die erwarteten Ergebnisse erhalten. Der einzige Unterschied zu meiner Vorgehensweise: Ich hatte die SQL-Abfrage mit einer "einfachen Abfrage" kombiniert, Du mit einer "Einfach-Auswahl". D.h. es führen genau zwei Wege zum Ziel, wobei die Methode mit der "einfachen Abfrage" eine ODER-Verknüpfung braucht, die "Einfach-Auswahl" eine UND-Verknüpfung bzw. keine explizite Verknüpfung. Das soll mal einer verstehen...
Hier noch mal zusammengefasst:
Anhang 22724
Nochmals danke für die Unterstützung!
VG, Maz
Liste der Anhänge anzeigen (Anzahl: 2)
Zitat:
Zitat von
zonky
zwischen "einfachen Abfrage" und "Einfach-Auswahl" sollte es keinen Unterschied geben, da die Übergabe der IDs von einer Filterregel zur nächsten immer gleich ist
Tja, offenbar gibt es doch einen Unterschied in Kombination mit einer SQL-Abfrage. Siehe Screenshots: Anhang 22726
VG, Maz