Ankündigung

Einklappen
Keine Ankündigung bisher.

Sortierung Liste nach Suche mit zwei oder mehr Sortierparametern

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

  • Sortierung Liste nach Suche mit zwei oder mehr Sortierparametern

    Ich möchte die Ergebnisliste nach einer Suche nach mehreren Parametern sortieren.
    Wie stelle ich das geschickt an?


  • #2
    An welchem Punkt stehst du gerade?
    http://www.premium-contao-themes.com

    Kommentar


    • #3
      Ich habe eine Volltextsuche und nach dem Absenden wird eine Liste mit Suchergebnissen angezeigt. Diese Liste soll aber nach 2 oder mehr Kriterien sortiert werden.
      1. Highlights
      2. Name
      3. mal sehen....


      Kommentar


      • #4
        Zitat von eblick Beitrag anzeigen
        Ich habe eine Volltextsuche und nach dem Absenden wird eine Liste mit Suchergebnissen angezeigt. Diese Liste soll aber nach 2 oder mehr Kriterien sortiert werden.
        1. Highlights
        2. Name
        3. mal sehen....

        Soriterungsfilter hast du bereits ergänzt?

        http://www.premium-contao-themes.com

        Kommentar


        • #5
          Ja, aber im Frontend soll der Benutzer nicht selbst sortieren können sondern die Liste soll nach diesen Kriterien immer sortiert werden.
          Wenn ich auf Listen von anderen Seiten verlinke, geht es ja über Parameter in der URL. Bei der Suche finde ich aber eine solche Möglichkeit nicht, da die URL wohl in der Konfiguration erzeugt wird und ich sehe keine Möglichkeit, die Parameter anzuhängen.

          Kommentar


          • #6
            Ah ok. Da gibt's mehrere Wege.
            Du kannst den Url Parameter mitschleifen oder quasi auch geheim setzen. Das geheime Setzen ist vielleicht die eleganteste Variante, weil sie ohne Url auskommt.

            Hier ein Beispiel für eine Sortierung über zwei Felder "alias,select_db": Beide hier Absteigend [asc].
            Code:
            ?orderby_101=alias%5Basc%5D&orderby_133=select_db%5Basc%5D
            ordnerby_ID-DES-SORTIERUNGSFILTERS. In meinem Fall = 101 und 133.

            initconfig.php


            // falls Suchfilter aktiv, trigger Sortierungsfilter
            Code:
              if( \Contao\Input::get('meineSuche') != '' )
              {  
            \Contao\Input::setGet('orderby_101','alias%5Basc%5D');
             \Contao\Input::setGet('orderby_133','elect_db%5Basc%5D');
            }
             
            Zuletzt geändert von Tim; 18.05.2020, 07:04.
            http://www.premium-contao-themes.com

            Kommentar


            • eblick
              eblick kommentierte
              Kommentar bearbeiten
              ist 'meineSuche' der Alias der Seite?

          • #7
            Probiere ich aus! Danke!

            Kommentar


            • #8
              Schlage ich hiermit offiziell als Feature für's Backend vor

              Kommentar


              • #9
                Zitat von eblick Beitrag anzeigen
                Schlage ich hiermit offiziell als Feature für's Backend vor
                Braucht es nicht. Falls alle Filter in einem Modul sind, arbeiten sie alle additiv. Sobald sie über die Url angesprochen werden, greifen Sie. Wie man die Url befeuert, ist freigestellt. Das würde auch mit einer externen Verlinkung gehen.

                Das ist hier nur ein schöner Weg Filter vorzubelegen in Reaktion zur Benutzer-Auswahl und ist unabhängig der aktuellen Url.

                Ich wüsste gar nicht wie ich das im Backend verständlich bereitstellen könnte. Es gibt auch das Filter-Inserttag, das schiebt den aktuellen Filter-Parameter weiter. Damit kann man auch wunderbar Links aus aktiven Filtern bauen.

                Schau mal hier: https://forum.premium-contao-themes....log-inserttags PHP-Code:
                {{customcatalog_filterurl::TABLENAME-OR-ID}}

                Zuletzt geändert von Tim; 15.05.2020, 08:43.
                http://www.premium-contao-themes.com

                Kommentar


                • #10
                  Sorry aber irgendwie passt das so nicht.
                  Ich habe oben die Version über die initconfig versucht:

                  Code:
                  <?php
                  
                  
                    if( \Contao\Input::get('produktsuche') != ' ' )
                    {  
                  \Contao\Input::set('orderby_163','prio%5Basc%5D');
                   \Contao\Input::set('orderby_162','highlight%5Bdesc%5D');
                   \Contao\Input::set('orderby_164','name%5Basc%5D');
                  
                  
                   }
                  Das scheint aber mal keine Auswirkung zu haben.
                  Ist das mit dem "set" so richtig?



                  Das hier ist meine URL, wenn ich die Sortierung auf der Suchseite manuell anzeige und auswähle:

                  Code:
                  ?produktsuche=&orderby_163=prio%5Basc%5D&orderby_162=highlight%5Bdesc%5D&orderby_164=name%5Basc%5D
                  Ich will ja die Sortierungsoptionen gar nicht anzeigen lassen. Die Liste soll immer in dieser Reihenfolge sortiert werden ohne, dass der Besucher dies ändert.

                  Heißt, ich suche nach "Tisch" und die Liste wird in der gewünschten Sortierung ausgegeben.

                  Die initconfig scheint aber gar keine Auswirkungen zu haben.

                  Kommentar


                  • #11
                    Sorry. es muss setGet heissen.

                    Code:
                    if( \Contao\Input::get('produktsuche') != ' ' )
                    {
                    \Contao\Input::setGet('orderby_163','prio%5Basc%5D ');
                    \Contao\Input::setGet('orderby_162','highlight%5Bd esc%5D');
                    \Contao\Input::setGet('orderby_164','name%5Basc%5D ');
                    }
                    http://www.premium-contao-themes.com

                    Kommentar


                    • #12
                      Also das passt so nicht.
                      Wenn der User neu auf die Seite kommt, dann gibt es keinen Parameter 'produktsuche'.

                      Wenn die Suche gestartet wird, dann gibt es einen Parameter 'produktsuche' dieser ist aber nicht leer sondern enthält den Suchbegriff.

                      In beiden Fällen wird nicht sortiert.

                      Warum kann nicht einfach eine Vorbelegung über das Backend erfolgen? Im Zweifel über das SQL-Sortieren Feld im Listenmodul?
                      Hier kann aktuell ja auch nur ein einzelner Suchparameter definiert werden (z.B. prio ASC) . Das sollte aber doch auch auf mehrere Parameter erweiterbar sein, oder?
                      also: prio ASC & highlight ASC usw.

                      Was für mich auch noch ein gangbarer Weg wäre, wenn bei der Filterung die URL-Erzeugung erweitert werden könnte, also z.B. der Teil

                      Code:
                      '&orderby_165=highlight%5Bdesc%5D&orderby_157=prio%5Basc%5D&orderby_158=name%5Basc%5D'
                      über das Template ergänzt werden kann.

                      Braucht es nicht. Falls alle Filter in einem Modul sind, arbeiten sie alle additiv. Sobald sie über die Url angesprochen werden, greifen Sie. Wie man die Url befeuert, ist freigestellt. Das würde auch mit einer externen Verlinkung gehen.

                      Das ist hier nur ein schöner Weg Filter vorzubelegen in Reaktion zur Benutzer-Auswahl und ist unabhängig der aktuellen Url.
                      Ich halte das Thema Filter-Vorbelegung (und zwar mehrstufig) generell für eine sehr wichtige Funktion in CCs. Der manuelle und individuelle Anpassungsbedarf ist aktuell meines Erachtens zu umständlich.
                      Auch in diesem konkreten Fall: Eine Liste mit diversen Filtern (Kategorie, Produktfamilie o.ä.) kann zwar initial über die Parameter in der URL vorsortiert werden (mit externem Weiterleitungslink & Parameter) Doch beim ersten Filtern werden diese Filterparameter gelöscht und die Liste neu sortiert.

                      Wenn ich einen Sortierungsfilter ergänze, habe ich keine Möglichkeit die Reihenfolge (Absteigend/Aufsteigend) zu beeinflussen.
                      Das ist z.B. beim Attribut "Highlight" schon mal falsch -> Checkbox -> Highlight=1 kommt nach Hightlight=0/NULL
                      Highlights möchte ich aber immer oben haben....
                      Außerdem werden dann immer diese Sortierfilter mit angezeigt (außer ich blende sie über invisible aus, widerstrebt mir aber bei Gedanken an sauberen Code...)

                      Ich wüsste gar nicht wie ich das im Backend verständlich bereitstellen könnte. Es gibt auch das Filter-Inserttag, das schiebt den aktuellen Filter-Parameter weiter. Damit kann man auch wunderbar Links aus aktiven Filtern bauen.
                      Vielleicht bin ich hier nur doof dieses Inserttag zu kapieren ??

                      Dieser oben beschrieben Anwendungsfall ist häufig anzutreffen, wenn es sich um längere Listen handelt. Hier ist immer die Frage, wie initial sortiert werden soll und zwar ohne Eingriff des Users. Der User soll in vielen Fällen überhaupt nicht aktiv sortieren müssen.


                      Kommentar


                      • #13
                        Das Feld Individuelle Sortierung erlaubt freie Eingabe. Ist aber fix.
                        ---
                        Eine Filtervorbelegung benötigt, wie auch in diesem Beispiel, Abhängigkeiten, die einer menschlichen Logik folgen. Ich müsste daher PHP im Backend erlauben quasi IF Abfragen. -> das wird aus Sicherheitsgründen nicht möglich sein.


                        Eine Vorbelegung ohne dass ein andere Filter aktiv sein soll ist einfach ohne die if Abfrage auf produktsuche oder falls produktsuche leer is
                        PHP-Code:
                          // immer aktiv, ohne abhängigkeit
                        \Contao\Input::setGet('orderby_163','prio%5Basc%5D ');
                        \
                        Contao\Input::setGet('orderby_162','highlight%5Bd esc%5D');
                        \
                        Contao\Input::setGet('orderby_164','name%5Basc%5D ');  

                        // aktiv, in abhängigkeit zu produktsuche if( \Contao\Input::get('produktsuche') != ' ' ) {
                        \Contao\Input::setGet('orderby_163','prio%5Basc%5D ');
                        \
                        Contao\Input::setGet('orderby_162','highlight%5Bd esc%5D');
                        \
                        Contao\Input::setGet('orderby_164','name%5Basc%5D ');

                        Seiten-Urls können direkt aus dem Backend vorbelegt werden.
                        Externe Seite nutzen, Adresse entweder direkt eingeben oder mit Inserttag:

                        {{link_url::MEINE-SEITE}}?meinFilter=meinWert
                        Zuletzt geändert von Tim; 25.05.2020, 07:55.
                        http://www.premium-contao-themes.com

                        Kommentar


                        • #14
                          Eine Filtervorbelegung benötigt, wie auch in diesem Beispiel, Abhängigkeiten, die einer menschlichen Logik folgen. Ich müsste daher PHP im Backend erlauben quasi IF Abfragen. -> das wird aus Sicherheitsgründen nicht möglich sein.
                          Das wäre doch bei einer Erweiterung des SQL-Sortierfelds nicht erforderlich, oder? Es würde doch schon helfen, wenn anstelle eines einzelnen Parameters mehrere mit AND verknüpft werden könnten.

                          Das mit den Seitenurls und Inserttags funktioniert ja grundsätzlich für die Erstbelegung. Aber wenn ich, wie oben beschrieben, irgendeinen Filter auf der Seite aktiviere (z.B. nach Produktkategorie) wird diese Erstbelegung überschrieben!

                          Die gefilterten Ergebnisse werden dann wieder in einer anderen Reihenfolge sortiert.
                          Deshalb müssten die URL Parameter durchgeschleust werden, egal welche Filter wann aktiviert werden, auch beim Filter zurücksetzen.

                          Kommentar


                          • #15
                            Die Vorbelegung per Seite spricht auch die Sortierungsfilter an. Diese bleiben quasi erhalten, ausser der Benutzer wählt neue.
                            ---
                            Soriterungen werden nicht mit einer Logik verknüpft in SQL sondern hierachisch:

                            ORDER BY field_1 ASC, field_2 DESC, field_3 ASC

                            ---
                            die initconfig ist doch fantastisch für ein paar Abhängigkeiten und Vorbelgungen nach den eigenen Wünschen. (und die URL bleibt auch sauber )
                            http://www.premium-contao-themes.com

                            Kommentar

                            Lädt...
                            X