Ankündigung

Einklappen
Keine Ankündigung bisher.

CC Filter um mehrere Attribute abzufragen?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • CC Filter um mehrere Attribute abzufragen?

    Gegeben ist ein CC Katalog mit u.a. 3 Feldern, Feld A, Feld B und Feld C. Diese 3 Felder werden mit Tags aus einer gemeinsamen (Tag-)Quelle gespeist.

    Nun soll ein Filter entstehen, der EIN Listenfeld anbietet, welches die vorkommenden Tags aus diesen 3 Attributen (Feld A, Feld B und Feld C) anbietet.

    Öm...? Welchen Filtertyp, bzw. Anordnung müsste ich denn für sowas verwenden?

    Das nahezu gleiche gibt es noch in einer ähnlichen Anforderung. Ebenfalls 3 Felder, die alle ISBN Nummern enthalten können. Nun soll es EINEN Textfilter geben, der die Zahlen in diesen drei Attributen finden soll.

    Wie müsste ich so etwas anordnen?

    Danke euch!

  • #2
    Im Textfilter kann man mehrere Attribute auswählen, die durchsucht werden sollen.

    Was genau ist ein Listenfeld? Ein Select? Du kannst ja quasi jedes beliebige Formularfeld selbst erstellen, das dir die Url füllt.

    Du machst 3 Tags-Filter, die du im Frontend ausblendest und baust dir ein eigenes Select-Feld, das dir die Zielwerte nach deinen Wünschen in die Url presst. Die "blinden" Tags-Filter reagieren auf die Url.
    http://www.premium-contao-themes.com

    Kommentar


    • #3
      Danke für die schnelle Antwort. Textfilter habe ich mir eben angeschaut. Der ist dann kein Problem. Und danke für den Hinweis mit der URL. Wenn man das nicht so oft macht ... Ich vergesse das dann immer wieder, dass die Filteranwendung ja die URL mit entsprechenden Parametern füllt.
      Dann ist alles klar soweit!

      Kommentar


      • #4
        Hmm, leider habe ich doch noch eine Frage ... Wie kann ich denn erreichen, dass die Abfrage auf die 3 Felder als ODER Frage angesehen wird? Hatte ich komischerweise irgendwie noch nie ... Danke!

        Kommentar


        • #5
          Zitat von Brubbel Beitrag anzeigen
          Hmm, leider habe ich doch noch eine Frage ... Wie kann ich denn erreichen, dass die Abfrage auf die 3 Felder als ODER Frage angesehen wird? Hatte ich komischerweise irgendwie noch nie ... Danke!
          CC hat einen eigenen Filter-Typ dafür "Abfragekombinierer". Den schaltest du zwischen deine Tags-Filter und setzt auf OR.
          http://www.premium-contao-themes.com

          Kommentar


          • #6
            Oke, danke, den habe ich gefunden und ausprobiert. Im Ergebnis erhalte ich nun viele Einträge doppelt, bzw. dreifach. Wohl daher, weil einige Begriffe sowohl in Feld A als auch Feld B oder Feld C vorkommen. Wie kann ich die Ausgabe wieder so eindampfen, dass nur eindeutige Datensätze ausgeworfen werden?

            Kommentar


            • #7
              Zitat von Brubbel Beitrag anzeigen
              Oke, danke, den habe ich gefunden und ausprobiert. Im Ergebnis erhalte ich nun viele Einträge doppelt, bzw. dreifach. Wohl daher, weil einige Begriffe sowohl in Feld A als auch Feld B oder Feld C vorkommen. Wie kann ich die Ausgabe wieder so eindampfen, dass nur eindeutige Datensätze ausgeworfen werden?
              Ohne Abfragekombinierer werden die Filter mit AND verbunden. Dann sind es quasi auf-stackende Bedingungen.
              http://www.premium-contao-themes.com

              Kommentar


              • #8
                Den letzten Satz verstehe ich nicht. Das führt doch dann zum Ausgangsproblem oder?. Im Grunde ist das so:

                Datensatz 1 hat in
                Feld A Apfel
                Feld B Mango
                Feld C Apfel

                Datensatz 2 hat
                Feld A Apfel
                Feld B Pflaume
                Feld C Holunder

                Datensatz 3 hat
                Feld A Birne
                Feld B Mango
                Feld C Zirbe

                Wenn ich jetzt (Ohne Abfragekombinierer) eine Suche mit folgenden Parametern losschicke, erhalte ich 0 Datensätze
                HTML-Code:
                ....?language=de&feld_a=Apfel&feld_b=Apfel&feld_c=Apfel
                Wenn ich den Abfragekombinierer mit OR dazwischen packe. erhalte ich 3 Datensätze (den 1. 2x und den 2. 1x). Ich könnte damit leben, wenn die Ergebnisausgabe erkennt, dass der Datensatz 1 doppelt ausgegeben wird. Ich habe im Listenmodul nichts gefunden, was darauf hindeutet.

                Mache ich noch was falsch oder ist das normal und ich muss im Template die Datensätze vor der Ausgabe selbst noch mal reduzieren?


                Kommentar


                • #9
                  Den letzten Satz verstehe ich nicht. Das führt doch dann zum Ausgangsproblem oder?
                  Ja so ist es - Erstmal auf Ausgang, wenn das eine nicht richtig ist - ist grundsätzlich nicht verkehrt.
                  ---
                  Datensatz 1 muss doppelt gefunden werden. Das ist korrekt. Apfel kommt in beiden vor. Ich verstehe nicht genau was dein gewünschtes Ergebnis wäre.
                  http://www.premium-contao-themes.com

                  Kommentar


                  • #10
                    Ja, ich erwarte (und bin hocherfreut), dass Datensatz 1 doppelt gefunden wird . Mir geht es um die Ausgabe der Treffer. Ich habe in der Listenansicht den einen Artikel ja nun doppelt. Was unerwünscht ist. Ich hätte "erwartet"/"erhofft", dass sich die Ausgabe automatisch wie bei SQL DISTINCT verhält.

                    Muss ich das noch irgendwie sagen oder "ist das so" und ich muss schauen wie ich die Redundanz im (Lister-)Template selbst rausfiltere?

                    Kommentar


                    • #11
                      Die Listen-Ansicht wird anhand der IDs gebildet. Doppelte Ids erzeugen keine doppelten Einträge.

                      DISTINCT ist noch anders! Ids sind nie DISTINCT sondern das exakte Gegenteil. UNIQUE quasi.

                      DESTINCT gibt Überschneidungen / Dopplungen aus.

                      Eigene SQL Bedingung:

                      id=1 OR id=1 OR id=1

                      Gibt nur einen Eintrag aus.
                      Zuletzt geändert von Tim; 25.11.2022, 09:01.
                      http://www.premium-contao-themes.com

                      Kommentar


                      • #12
                        Zitat von Tim Beitrag anzeigen
                        Die Listen-Ansicht wird anhand der IDs gebildet. Doppelte Ids erzeugen keine doppelten Einträge.
                        Danke erstmal. Ich muss mir das nachher noch mal anschauen ob das unterschiedliche IDs sind oder wieso die doppelt kommen.

                        Kommentar


                        • #13
                          Zitat von Brubbel Beitrag anzeigen

                          Danke erstmal. Ich muss mir das nachher noch mal anschauen ob das unterschiedliche IDs sind oder wieso die doppelt kommen.
                          Lass dir am besten die IDs mal direkt ausgeben je Eintrag. Das ist ein Wert wie jeder andere. Falls Einträge inhaltlich und optisch fast gleich sind, kann das sehr schnell verwirrend werden.

                          Du kannst in den Systemeinstellungen > CC auch den Debug-Modus aktivieren. Dann wird jede SQL Bedingung in den Systemlog geschrieben. Auch das hilft immens beim Aufbau von speziellen Filter-Aufgaben
                          http://www.premium-contao-themes.com

                          Kommentar


                          • #14
                            Also, ich habe mir die ausgegebenen IDs jetzt mal genauer angeschaut und die doppelten kommen von der anderen Sprachversion. Es sieht aus, als würde bei der Konstruktion die Sprachfilterung nicht mehr funktionieren?
                            Im Filter- und Listermodul ist der Filter für die aktive Sprache gesetzt. Aber es scheint nicht zu funktionieren. Wenn ich mir das SQL Query anschauen, was bei der Erzeugung der Listeneinträge verwendet wird, dann hätte ich da jetzt auch einen Join mit der Language Tabelle erwartet?
                            HTML-Code:
                            [2022-11-25T10:37:13.568223+01:00] contao.INFO: SELECT cc_productcatalog.* FROM cc_productcatalog WHERE cc_productcatalog.id  IN(396,395,339,432,433,337,431,336,430,333,429,332,428,331,427,327,426,326,425,323,424,322,319,423,318,422,315,421,312,420,295,294,293,292,259,258,257,256,255,254,222,481,219,217,67,29,472)  OR cc_productcatalog.id  IN(219,217,111,63,62)  OR cc_productcatalog.id  IN(1,2,3,29,31,34,36,39,43,46,47,49,50,51,60,62,65,67,69,70,71,72,73,74,81,84,85,94,95,96,101,106,108,110,114,116,119,121,123,125,127,129,131,133,135,137,139,146,161,163,165,168,170,188,190,192,194,203,197,199,201,205,207,209,211,213,215,217,220,222,225,227,228,231,233,236,239,241,244,247,250,252,254,256,259,261,262,263,272,292,295,296,299,301,305,306,309,312,315,318,319,322,323,326,327,331,332,333,336,337,339,342,345,347,348,351,352,355,356,363,361,366,367,370,372,374,376,379,381,382,385,386,391,392,396,397,404,407,176,178,180,277,280,282,284,287,288,291,17,18,19,20,22,25,149,151,153,155,157,159,172,89,92,184,186)  AND cc_productcatalog.publish='1'    ORDER BY cc_productcatalog.cert_date DESC LIMIT 0,50 []

                            Kommentar


                            • #15
                              Nope das ist richtig. Deine Liste wird jetzt halt lose. Die ersten IDs sind die Spracheinträge, jetzt wird mit OR die Ids der Tags-Filter angebackt.

                              Das musst geklammert werden. Logik: SPRACH-IDS AND ( tags1 OR tags2 OR tags3 )

                              Dafür gibts die Filter "Teilbereich Start/Stop". Du musst die Tags Filter damit umwrappen.
                              http://www.premium-contao-themes.com

                              Kommentar

                              Lädt...
                              X