Ergebnis 1 bis 17 von 17

Thema: setPost und Inserttags

  1. #1
    Contao-Nutzer
    Registriert seit
    28.01.2011.
    Beiträge
    113

    Standard setPost und Inserttags

    Hallo,

    ich habe jetzt schon eine ganze Weile im Forum gesucht aber keine Lösung zu meinem Problem gefunden. Ich habe ein Formular, das beim absenden die gleiche Seite aufruft. Die Werte des Formulars kann ich mit post() auch wunderbar auslesen und verarbeiten. Damit den Nutzer sehen kann was er eingegeben hat belege ich die Felder mit dem Standardwert

    {{form::FELD}}

    Das funktioniert bis hier hin auch sehr gut. Um alle Eingaben zu löschen möchte ich alle Formulardaten löschen und wieder auf der gleichen Seite landen. Dafür habe ich ein zweites Formular mit nur einem Absendebutton erzeugt, dass mit Hilfe des processFormData-Hooks auf die Seite umlenkt, die URL von allen Balast befreit und, so meine Hoffnung, die Formulardaten löscht. Hier die dazugehörige Klasse:

    PHP-Code:
    class DeleteFilter extends Frontend
     
    {
        public function 
    deleteFilterOnSubmit($arrPost$arrForm$arrFiles)
        {
               
    // wenn nicht dieses Formular, dann beenden
            
    if($arrForm['id'] != 2)
            {
                return;
            }
               
    //Formularwerte zurücksetzen
            
    $this->Input->setPost('feld1','');
            
    $this->Input->setPost('feld2');
            
            
    $path $this->Environment->base 'meineSeite.html';
               
    // hier wird auf die Seite umgeleitet - URL von Balast befreit
            
    $this->redirect($path); 
        }
     } 
    Ich habe für die beiden Felder zwei Varianten getestet, beide machen nicht das was ich will. Wenn ich mir die Inhalte mittels post() ausgeben lasse stehen sie noch drin. Genauso werden durch die Inserttags {{form::FELD}} die Werte weiter angezeigt.

    Kann mir jemand helfen? Die Werte aus dem Formular müssen sich doch löschen lassen.

    Vielen Dank und viele Grüße

  2. #2
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Hi Erdpferd,

    das Problem liegt im redirect
    Du setzt erst ein Post, welches in diesem Moment auf der Seite verfügbar ist (daher kannst du es auch danach abrufen). Dann folgt jedoch der Seitenwechsel und die neue - aufgerufene - Seite weiß ja nichts mehr von deinem Post-paramtern.

    Gruß
    Michael

  3. #3
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.947

    Standard

    Ich bin mir nicht ganz sicher, ob ich verstehe, was Du erreichen willst. Aber ist das nicht einfach ein

    <input type="reset" value="Formular löschen">
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  4. #4
    Contao-Nutzer
    Registriert seit
    28.01.2011.
    Beiträge
    113

    Standard

    Ich bin mir nicht sicher, ob ich das Problem richtig beschrieben habe.

    Die Seite nach dem redirect kennt die Werte im post() ja noch. Das möchte ich aber verhindern. Oder verdrehe ich das ganze. Woher kennen denn aber sonst die Inserts {{form::FELD}} die Werte, wenn sie nicht mehr im post() stehen? Die post-Parameter sind doch somit auf der nächsten Seite vorhanden, oder?

  5. #5
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.947

    Standard

    Zitat Zitat von Erdpferd Beitrag anzeigen
    Ich bin mir nicht sicher, ob ich das Problem richtig beschrieben habe.

    Die Seite nach dem redirect kennt die Werte im post() ja noch. Das möchte ich aber verhindern.
    Ich weiß nicht, wie das im konkreten Fall funktioniert. Die Werte könnten ja auch aus der Datenbank in der das Formular abgespeichert wird / aus der Session / ... kommen.

    Aber nochmal: was soll denn aus Usersicht passieren? User klickt den zweiten Button (den Submit des ansonsten unsichtbaren zweiten Formulars) und das Formular ist danach leer? Genau das würde ein "Reset-Button" machen.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  6. #6
    Contao-Nutzer
    Registriert seit
    28.01.2011.
    Beiträge
    113

    Standard

    @fiedsch

    Ein reset ist doch nur zum Abbruch eines Formulars, oder? Mein ziel ist es aber die Formulardaten als Filterparamter zu übergeben. Damit ich den Filter aber wieder löschen kann muss ich die Werte in post wieder loswerden. Der Ablauf sieht dabei folgendermaßen aus:

    1. Im Formular 1 werden die Daten eingetragen und abgeschickt
    2. Weiterleitung auf die Seite selbst und Verarbeitung der Eingaben sowie Belegung der Formualrfelder durch vorherige eingaben mit Hilfe von Insert-Tags und Standwerten
    3. Der Filter soll gelöscht werden - hierfür gibt es ein zweite Formular, dass zum einen auf die Seite selber weiterleitet und zum anderen die Post-Parameter löscht. Die Weiterleitung habe ich deshalb drin, da durch andere Filter eventuell Parameter in der URL stehe, die ich auch beseitigen möchte.

  7. #7
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.947

    Standard

    Heißt: feld1 und feld2 aus Deinem obigen Beispiel waren nur Beispielfelder, aber nicht das ganze Formular.

    Du willst also das Formular abschicken und in einem zweiteSchritt einige Felder (Filter) löschen und andere übernehmen?

    Hast Du dazu ein Beispiel, wo man sich das mal anschauen kann? So abstrakt kann ich mir das noch nicht vorstellen; vielleicht ist ja auch der Ansatz "falsch" und deswegen kompilziert umzusetzen. Vielleicht willst Du zwei eigenständige Formulare, bei denen das zweite Input des ersten übernimmt und "widerspiegelt". Zum konkreten Sinn fällt mir aber immer noch nichts ein.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  8. #8
    Contao-Nutzer
    Registriert seit
    28.01.2011.
    Beiträge
    113

    Standard

    Ein Beispiel kann ich leider nicht zeigen.

    Der Sinn der ganzen Geschichte ist, dass ich einen Catalog habe, der zum einen seine eigenen Filter verwendet und zum anderen von mir mit Hilfe eines Formulars einen weiteren Filter für eine Umkreissuche bekommen hat. Dort habe ich Zwei Felder für die Adressdaten. Nach Absenden des Formulars (sprich Umkreissuche aktivieren) wird auf die gleiche Seite weitergeleitet. Das macht das Formular selber (die URL bleibt unverändert). Jetzt kann das Formular ausgewertet und den einzelnen Einträgen eine Entfernung zugefügt werden. Die eingegebenen Werte sollen im Formular wieder zu sehen sein, damit man weiß, was man eingegeben hat (gelöst durch Inserts im Standardwert).

    Damit sich alle Filter löschen lassen, hilft eigentlich ein einfacher Link, der die URL wieder zurücksetzt. So sind die Catalog-Filter weg. Die Angaben im Formular sind aber noch da. Damit auch die verschwinden habe ich ein zweites Formular mit nur einem Absendebutton erstellt, dass schließlich via processFormData-Hook die post-Parameter des anderen Formulares löschen soll und zum anderen auf die saubere URL weiterleitet.

    Und genau das Löschen will nicht funktionieren.

  9. #9
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.947

    Standard

    Vom Cataolg habe ich keine Ahnung, kann daher auch leider nichts weiter dazu beitragen.
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  10. #10
    Contao-Nutzer
    Registriert seit
    28.01.2011.
    Beiträge
    113

    Standard

    Das Problem hat hier meiner Meinung nach auch nichts mit dem Catalog zu tun. Das Problem ist vielmehr, dass ich zum einen eine Weiterleitung brauche und zum anderen die Post-Parameter löschen muss.

    Ist denn da noch ein anderer Werg denkbar als ein zweites Formular? Kann ich durch einfaches klicken eines Links ein php-Skript auslösen, dass mir die Post-Parameter löscht? Denn die sind ja mein eigentliches Problem. Die lassen sich bei der bisherigen Methode nicht löschen. setpost() scheint irgendwie wirkungslos.

  11. #11
    Contao-Urgestein Avatar von fiedsch
    Registriert seit
    09.07.2009.
    Ort
    München
    Beiträge
    2.947

    Standard

    Zitat Zitat von Erdpferd Beitrag anzeigen
    Kann ich durch einfaches klicken eines Links ein php-Skript auslösen, dass mir die Post-Parameter löscht?
    Post Paramer "entstehen" durch Absenden eines Formulars, dessen method="POST" ist. Wenn Du ein leeres Formular abschickst, ist $_POST auch leer. Irgendetwas ist bei Dir also noch nicht sowie Du es beschreibst. Könnte es sein, daß Deine Insert-Tags noch etwas aus der URL (also "GET-Parameter) einsetzen?
    Contao-Community-Treff Bayern: http://www.contao-bayern.de

  12. #12
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    1. Session für das Formular löschen im processFormData Hook
    2. Falls alle Stränge reissen mit Javascript kriegt du die Werte im value="" Tag immer weg. Die [cleardefault] macht nichts anderes.

    Grüße,
    Tim
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  13. #13
    Contao-Nutzer
    Registriert seit
    28.01.2011.
    Beiträge
    113

    Standard

    Vielen Dank, das wars.

    Wenn ich in der Klasse folgendes schreibe gehts:

    PHP-Code:
    class DeleteFilter extends Frontend
     
    {
        public function 
    deleteFilterOnSubmit($arrPost$arrForm$arrFiles)
        {
                
    // wenn nicht clear-filter, dann beenden
            
    if($arrForm['id'] != 11)
            {
                return;
            }
                    
    // Formularwerte zurücksetzen
            
    session_unset();
                        
    // Weiterleitung
            
    $path $this->Environment->base 'angebotsliste.html';
            
    $this->redirect($path); 
        }
     } 
    Jetzt werden alle Werte wie es sein soll gelöscht und die Eingabe-Felder sind wieder leer. Hervorragend.

  14. #14
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Cool, ich hab ins Blaue geschossen, aber schön dass es funzt.

    Deine Funktion ist bissel umständlich bzw. ungut, ausser Du willst strikt, dass alle Formulare ausser dem mit der ID 11 so behandelt werden.

    Besser wäre es hier das If nicht negativiert zu nutzen, das machts flexibler.

    Jetzt löscht du gerade die komplette Session. Also z.b auch Items im Warenkorb wären weg, Logins etc. Alles leer eben.
    Benutze besser die Session Klasse und lösche nur den Zweig zu diesem Formular.

    Den Pfad Aufruf kann man auch bissel flexibler gestalten. Z.b. Per Inserttag.
    $nextPage = $this->replaceInsertTags('{{link_url::ID-ZIELSEITE}}');

    $this->redirect($nextPage);

    Sollte so klappen.

    Viele Grüße, viel Erfolg,
    Tim



    Sent from my iphone using Tapatalk
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  15. #15
    Contao-Nutzer
    Registriert seit
    28.01.2011.
    Beiträge
    113

    Standard

    Die ganze Session löschen ist zwar momentan nicht das Problem, aber für zukünftige Planungen kontraproduktiv. Da gebe ich dir Recht.

    Den Link umzuschreiben funktioniert wunderbar. $this->replaceInsertTags kannte ich bislang noch gar nicht.

    Wenn ich versuche nur einen Teil aus der Session zu holen, dann funktioniert es wieder nicht richtig.

    Ich habe versucht mal in die Session hineinzuschauen und sie mit mit Hilfe von print_r($this->Session); auszugeben. Erstaunlicherweise stehen dort die Werte meines Formulars gar nicht drin. Selbst wenn ich das löschen nicht ausführe. Die Felder zeigt er mit aber an.

    Irgendwo in der Session müssen sie aber stehen, da die Inserttags des efg die Werte ja finden. Lösche ich die komplette Session finden sie sie nicht mehr. Ich kenne die Session-Klasse bislang aber auch gar nicht. Wo können die Werte denn noch liegen, dass sie vom efg-Inserttag gefunden und ausgegeben werden?

    Nachtrag:

    Ich habe versucht im Hook die Session zu beeinflussen:

    PHP-Code:
    $this->Session->set('feld1',''); 
    $this->Session->set('feld2',''); 
    die Postparameter lassen sich irgendwie nicht entfernen. Nur ein komplettes unset hat bislang das gehoffte Ergebnis gebracht.
    Geändert von Erdpferd (03.05.2012 um 18:31 Uhr)

  16. #16
    Contao-Urgestein Avatar von Tim G
    Registriert seit
    13.02.2010.
    Ort
    Lübeck
    Beiträge
    2.210
    User beschenken
    Wunschliste

    Standard

    Die session ist ein großer verzweigter Array. Den genauen key zum Formular weiss ich jetzt auch nicht.

    var_dump() hilft da mehr, weil es den prozess stoppt und man davor in ruhe tracen kann.

    Schau dir die Klasse mal an. Es gibt auch eine public remove oder delete funktion.


    Sent from my iphone using Tapatalk
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

  17. #17
    Contao-Nutzer
    Registriert seit
    28.01.2011.
    Beiträge
    113

    Standard

    Problem gelöst.

    var_dump hat mir leider auch nicht mehr Informationen gebracht. Ich habe jetzt das Leeren der Post-Parameter ins Template verschoben und die Inserttags des efg mit denen von Inputvars ersetzt. Die Inserttags werden so scheinbar erst nach dem leeren der Parameter ersetzt, so dass sie dann tatsächlich leer sind.

    Das Problem scheint zu sein, dass im Hook die Parameter nicht bearbeitet werden. Egal ob ich mit der Session-Klasse oder der Input-Klasse gearbeitet habe, dort ging es nicht.

    Vielen Dank für eure Hilfe.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •