Backend Filter abhängig von POST-Parameter
Hallo,
ich habe ein hirarchisches Metamodel mit Kategorien.
Hauptkategorien: Haupt1, Haupt2, Haupt3 (Mehrfachauswahl möglich)
Haupt1 und Haupt3 haben Unterkategorien.
MM Produkte hat eine Auswahl der Hauptkategorien (gefiltert nach pid).
Wenn eine ausgewählte Hauptkategorie Unterkategorien hat, soll in der Eingabemaske das Auswahlfeld mit den passenden Unterkategrorien angezeigt werden.
Bislang hatte ich nur eine Hauptkategorie mit Unterkategorien und ich habe es mit einem Filter über die pid der Kategorie gelöst.
Code:
SELECT * FROM mm_productcategory WHERE pid=1
Jetzt haben aber auch andere Hauptkategrorien Unterkategorien, die abhängig des per auto_submit gesendeten POST-Parameters angezeigt werden sollen.
Wie kann ich auf dieses Array im Filter zugreifen bzw. es aussplitten?
Code:
{{param::post?name=productcat[]}}
habe testweise
Code:
SELECT * FROM mm_productcategory
WHERE pid IN (
SELECT item_id FROM tl_metamodel_translatedtext
WHERE att_id = 92 AND value LIKE {{param::post?name=productcat[1]}})
experimentiert, aber so scheint es nicht zu gehen.
Liste der Anhänge anzeigen (Anzahl: 1)
Okay, hab es gerade getestet mit einem Minimal-Setup. Bei mir funktioniert es wunderbar.
Was ich nicht habe sind übersetzte Attribute.
Mein Filter sieht so aus:
PHP-Code:
SELECT id FROM {{table}} WHERE alias LIKE {{param::post?name=auswahl}}
"auswahl" ist in diesem Fall der Spaltenname des ersten Auswahl-Attributs:
Anhang 16644
Das ist jetzt natürlich nur ein Beispiel, aber das zeigt, dass die Werte korrekt aus POST gezogen werden.
Bei dir also FORM_SUBMIT durch den Spaltennamen des ersten Auswahl-Attributs (Hauptkategorie) ersetzen.
Bringt dich das so vielleicht schon weiter?
Liste der Anhänge anzeigen (Anzahl: 3)
Ja, der Filter liefert ein leeres Ergebnis, wenn das Feld im Post nicht gesetzt ist. Da muss man noch einen Fallback einbauen.
Im FE kommt der Filter auch zum Einsatz? Kannst du mal einen Screenshot von deinen Frontendfilter-Modulen posten? Und den SQL-Filter, wie du ihn jetzt erstellt hast?
Im FE würd ich es so machen (Auswahl = Hauptkategorie, Auswahl2 = Unterkategorie):
Anhang 16647
Anhang 16648
Anhang 16649
Liste der Anhänge anzeigen (Anzahl: 1)
Okay, ich hab's nicht lassen können.
Vorab: du meintest, du hast ein hierachisches Model für die Selects, das heißt mit Varianten, richtig?
Meine Lösung beruht darauf, evtl musst du dementsprechend anpassen.
Setup: ein Filter, mit OR und zwei Einstellungen:
Anhang 16650
WICHTIG:
Beim OR den Haken bei Nach erstem Treffer beenden setzen.
Der obere Filter sieht dann so ähnlich aus, wie bisher (angepasst auf die Varianten):
PHP-Code:
SELECT id FROM {{table}} WHERE varbase = 0 AND vargroup IN (
SELECT vargroup FROM {{table}} WHERE alias IN ({{file::test.php}})
)
Der zweite sieht (untere) sieht so aus:
PHP-Code:
SELECT id FROM {{table}} WHERE varbase = 0 AND vargroup IN (
SELECT vargroup FROM {{table}} WHERE id IN (
SELECT value_id FROM tl_metamodel_tag_relation WHERE `att_id` = 13 AND `item_id`= SUBSTRING_INDEX({{param::get?name=id}},'::',-1)
)
)
Die att_id musst du auf dein gewünschtes Attribut anpassen!
Keine Ahnung, ob das die beste Lösung ist, aber funktioniert bei mir. Und schön, mal zu sehen, was man mit den Filtern alles machen kann.
ABER:
Wie gesagt, für den Frontend-Filter sollte es einfacher gehen, so, wie im vorigen Post.
Ach und ein Problem gibt es noch von der Benutzerfreundlichkeit (falls das überhaupt eines ist). Und zwar, wenn du ein bestehendes Item bearbeitest.
Sagen wir, das Item hat Kategorie A, Unterkategorie A1.
Dann stellst du um auf Kategorie B.
Jetzt siehst du aber nicht mehr, dass die Unterkategorie A1 in der Mehrfachauswahl zugeordnet ist (weil er ja nur die Unterkategorien von Kategorie B zeigt).
Für die Auswahl im Frontend macht das aber nichts, solange die Unterkategorien nur angezeigt werden, wenn die Hauptkategorie gewählt ist. (Dann wird das Item mit Hauptkategorie B und Unterkategorien A1 und B1 beim Filter "Hauptkategorie A, Unterkategorie A1" nicht angezeigt, weil die Hauptkategorie ja nicht stimmt.
Du könntest den Filter aber auch noch so erweitern, dass die gewählten Unterkategorien immer dazukommen. Wie, kannst du dir ja jetzt vielleicht zusammenreimen ;)