Ankündigung

Einklappen
Keine Ankündigung bisher.

Seiten-ID an ein Listen-Modul übergeben

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

  • Seiten-ID an ein Listen-Modul übergeben

    Hi Forum,

    ich habe ein Listenmodul, welches mit einem Seitenfilter arbeitet. Das Modul funktioniert wie es soll, wenn es auf der jeweiligen Seite eingebunden ist. Auch die Vererbung auf die Kindseiten funktioniert gut. Alles prima.
    Ich möchte die Anzeige der Ergebnisse im Frontend aber nur haben, wenn diese Ergebnisliste explizit (durch Klick auf einen Button) auf der Seite angefordert wird.
    Ich dachte nun daran, dass ich nicht immer alle Ergebnisse auf der Seite mitschleppen und diese nur ausblenden will, sondern die Ergebnisse auf einer komplett anderen Seite anzeigen lassen möchte.
    Hier ergibt sich nun die Schwierigkeit. Das Listenmodul hätte dann eine SeitenID die in der zugrunde liegenden Tabelle ja gar nicht bekannt ist. Ich müsste also die Seite mit dem Listenmodul über meinen Buttonlink so aufrufen, dass ich die SeitenID der aufrufenden Seite als Parameter mitgeben kann.
    Ich habe einige Aufrufe versucht aber ich bekomme es nicht hin. Die Anzeige bleibt immer leer.

    Wie müsste ich den Link aufbauen um das zu lösen? Oder bin ich zu kompliziert? Oder zu einfach?

    Auf jeden Fall schon mal 1000 Dank für jede Hilfestellung!

  • #2
    Puhh... ich muss gestehen. Ich verstehe nicht, was du vorhast.
    http://www.premium-contao-themes.com

    Kommentar


    • #3
      Entschuldige bitte ;-)

      Ich habe Produkte in einer Tabelle, die unterschiedlichen Seiten in meinem Seitenbaum zugeordnet sind (Eine Seite hat mehrere Produkte. Ein Produkt ist immer nur einer Seite zugeordnet)
      Die normale Ansicht im Frontend zeigt alle Produkte die genau der jeweiligen Seite zugeordnet sind.
      Es soll zusätzlich die Möglichkeit geschaffen werden, auf Knopfdruck zusätzlich alle Produkte der untergeodneten Seiten anzuzeigen.
      Dazu habe ich bereits ein Listenmodul mit entsprechendem Seitenfilter, welches auch tadellos funktioniert und die gewünschten Produkte anzeigt.

      Aber: Wie verknüpfe ich am besten diesen Filter mit meinem Knopf?

      Aktuell blende ich diese Ergebnisse pauschal per CSS aus und toggle die Anzeige per JavaScript auf dem Button. Das funktioniert, ist aber unschön, da die Ergebnisliste ja vorher trotzdem da ist und entsprechend für Datenvolumen sorgt (die Anzahl der Produkte kann sehr groß werden).
      Ich suche nach einem Lösungsweg, die Ergebnisliste wirklich erst auf den Knopfdruck zu ermitteln und dann direkt zur Anzeige zu bringen.

      Meine Idee war, das Listenmodul (mit dem Seitenfilter) auf eine andere, versteckte, Seite zu legen. Wenn der Benutzer im Frontend nun den Button anklickt, soll die andere (versteckte) Seite geladen werden und das dortige Listenmodul (mit dem Seitenfilter) zeigt mir die Treffer des kompletten Baumes an.

      Aktuell passiert so natürlich gar nichts, weil das Listenmodul ja von seiner eigenen (der versteckten) SeitenID ausgeht und dazu natürlich nix in der DB steht. Ich müsste also ereichen, dass ich die aufrufende SeitenID mit übergeben kann und der Filter eben nicht die aktuelle, sondern die übergebene Seite als Basis für die Baumsuche benutzt.

      Ich hoffe das ist verständlicher? Denke ich mal wieder zu kompliziert? Geht das mit Bordmitteln?
      Danke Dir für Deine Antwort!

      Kommentar


      • #4
        Dein Button könnte einen GET Parameter an die URL knallen (einfaches Formular, Methode GET)
        Dieser Wert ist der gewünschten Seiten-IDs. z.B. ?meinButtonWert=10

        Eigenes SQL Feld der Liste (oder eigener SQL Filter) mit Erw. inputvar

        FIND_IN_SET({{get::meinButtonWert}},{{meinTagsFeld }});

        CC löst Inserttags auf blob Felder als Kommaliste auf. Sollte genau für diesen Zweck passen.
        --
        Alternative ohne Code:

        Für jeden Button ein Formular mit Weiterleitungsseite und auf der Weiterleitungsseite ein CC Liste Modul mit einem Einfache Abfrage Filter mit dem gewünschten Standardwert.
        --
        Richtig cool :
        Entweder nen eigenen Hook Filter anlegen oder per getQueryOptions Hook von CC das SQL array manipulieren bevor es an gefetcht wird.
        Zuletzt geändert von Tim; 20.05.2016, 10:33.
        http://www.premium-contao-themes.com

        Kommentar


        • #5
          Hi Tim,
          danke schön für die wie immer schnellen Antworten!!!

          Die erste Variante ist mein Plan B, den ich bisher nicht angefasst habe, weil ich den Trailfilter nicht neu bauen wollte . Die Schwierigkeit hier ist nicht, die zur Seite gehörigen Produkte abzufragen. Das bekomme ich mit einer SQL Abfrage nach dem obigen Muster leicht hin (Ich habe in meinem Fall keine Tags, die SeitenID steht als einzelner Werte in jedem Produktdatensatz und ich kann mit einfachem "ist gleich" arbeiten).

          Mein Problem ist, dass ich ja dem Trail folgen muss. Der Filtertyp "Seitenauswahl" funktioniert dafür wunderbar ... aber leider kann ich ihm keine Inserttags übergeben .
          Es funktioniert, wenn ich die Seiten manuell per Hand angebe ... aber damit ist mir nicht geholfen, denn dann muss ich ja zig Filter/Module anlegen und das ist ja nicht so richtig wartbar.

          Deine zweite Variante "ohne Code" kann ich nicht. Ich weiß leider nicht wie ich mir "Für jeden Button ein Formular mit Weiterleitungsseite" vorstellen soll? Wie "baue" ich sowas?

          naja und "Richtig cool" werde ich leider nicht so schnell ;-)) - Das ist noch Spanisch für mich.

          Ich fürchte ich muss also doch schauen, wie ich die möglichen Unterseiten per SQL aus der DB bekomme und mit diesen Werten dann die URL bauen und die Parameter übergeben kann. Oder kennst Du adhoc einen Contao Aufruf, der alle Unterseiten ausgibt?

          Danke Dir für Deine Hilfe!


          Kommentar


          • #6
            Oder kennst Du adhoc einen Contao Aufruf, der alle Unterseiten ausgibt?
            $arrChilds = \Database::getInstance()->getChildRecords($objPage->id);
            http://www.premium-contao-themes.com

            Kommentar


            • #7
              Hi Tim,

              ich habe das nun so gelöst, dass ich auf der Datenbankseite eine Stored Procedure einsetze, die mir alle existierenden Unterseiten zu einer Seiten ID liefert und ich kann dadurch mit einem einzigen Query die gewünschten IDs erhalten. Ich wollte unter allen Umständen diese rekursiven Abfragen im Template vermeiden (Man hätte vermutlich auch die Tabelle einmal in ein Array lesen können und dann im Template mit PHP rekursv im Array suchen können aber das habe ich mit meinen bescheidenen PHP Kenntnissen nicht so schnell hinbekommen).

              Contao liefert im PageModel die Methode "findPublishedSubpagesWithoutGuestsByPid" - aber damit scheine ich nur die erste Unterebene zu erhalten, muss also ggf. wieder rekursiv durchhangeln.

              Anyhow, so gehts gut.

              ABER: Ich habe dann noch ein Problem mit dem CC Filter. Ich rufe die Seite mit entsprechendem Parameter auf:

              Code:
              meineSeite.html?meinParameter=12,43,11
              Ich verwende ein ganz normales Listenmodul mit einem Filter vom Typ "Einfach ID-Liste".
              Ich habe im Feld "Werte" den entsprechenden Inserttag
              Code:
              {{get::meinParameter}}
              eingetragen.
              Leider funktioniert der Filter damit nicht . Wenn ich die Werte wie oben direkt kommasepariert
              Code:
              12,43,11
              eintrage, funktioniert es tadellos.

              Kann ich hier keine Insert Tags verwenden? - Was mache ich falsch, bzw. welchen Filter sollte ich verwenden?
              Danke Dir und VG

              Kommentar


              • #8
                Filter reagieren natürlich nur, wenn es ein passendes Attribut-Alias dafür gibt bzw. der Urlparameter gesetzt ist für einen Filter. Sonst ist es ein einfacher GET Wert.

                Tags und Multiple-Attribute Filtern als GET Array:
                meinParameter[]=12,43,11
                http://www.premium-contao-themes.com

                Kommentar


                • #9
                  Hmm, geht bei mir nur mit einem Wert. Wenn ich mehr als einen Wert in der Liste habe, dann wird immer nur der ersten Wert berücksichtigt. Habe ich noch etwas übersehen? (Wenn ich die Werte (kommagetrennt) direkt in die Werteliste eintrage, funktioniert es.

                  Kommentar


                  • #10
                    Schau dir das mal bei einem aktiven Tags filter ab
                    http://www.premium-contao-themes.com

                    Kommentar


                    • #11
                      Hmm, meinst Du diese Schreibweise?
                      HTML-Code:
                      meineSeite.html?meinParameter[]=12&meinParameter[]=43&meinParamter[]=11
                      So funktioniert es! Aber die URL wird ja ewig lang. "Schöner" fänd ich es auch so wie Du es obern geschrieben hast ;-)

                      Kommentar


                      • #12
                        Nein, keine Wiederholung. Die eckigen Klammern machen den Unterschied. Siehe Post oben:

                        Zitat von Tim Beitrag anzeigen
                        Filter reagieren natürlich nur, wenn es ein passendes Attribut-Alias dafür gibt bzw. der Urlparameter gesetzt ist für einen Filter. Sonst ist es ein einfacher GET Wert.

                        Tags und Multiple-Attribute Filtern als GET Array:
                        meinParameter[]=12,43,11
                        http://www.premium-contao-themes.com

                        Kommentar


                        • #13
                          Nein, schrieb ich oben. Wenn ich es so schreibe wie Du vorgeschlagen hast:
                          Code:
                           
                           meineSeite.html?meinParameter[]=12,43,11
                          dann kommt bei mir nur das erste Produkt zur Anzeige (12). Erst wenn ich es auf diese Art schreibe,
                          Code:
                             
                           meineSeite.html?meinParameter[]=12&meinParameter[]=43&meinParamter[]=11
                          funktioniert die Ausgabe korrekt. Ich hatte mir die Einstellungen soweit angeschaut aber nichts gefunden was ich evtl. übersehen haben könnte? Es wäre toll, wenn ich die Kurzform verwenden könnte.

                          Kommentar


                          • #14
                            Stimmt. Hast recht. Wird verkettet.
                            --
                            Kommando zurück: Man schreibt es doch ohne eckige Klammern. Hab es gerade getestet.
                            meinParameter=12,43,11 Ich habe hier einen Tags Filter, der arbeitet ohne Probleme mit einfachem Komma.
                            Alias ist tags_werkzeuge.
                            Klicke auf die Grafik für eine vergrößerte Ansicht

Name: screenshot_1220.jpg
Ansichten: 103
Größe: 89,7 KB
ID: 3343



                            Wenn's dann noch komplexer wird:

                            Willste dir nicht einfach nen Hook-Filter schreiben? Dafür ist er da. Dann kannst du sogar alles aus der Session nehmen und brauchst überhaupt keine Url Änderungen etc.
                            Zuletzt geändert von Tim; 24.05.2016, 08:59.
                            http://www.premium-contao-themes.com

                            Kommentar


                            • #15
                              Danke Dir. .... einfach nen Hook-Filter schreiben ... Phew ... Das Brett ist mir noch zu dick. Ich muss noch viel lernen...

                              Kommentar

                              Lädt...
                              X