Zum Inhalt springen

Shift + Reload in Action?

Erstellt am 3. November 2005 · 6 Antworten · letzte Antwort am 4. November 2005

Tags: Frage

rene_afew ·

Hallo,
ich möchte gerne ein Formular über folgende Action ausführen:

<form action="'.$this-">pi_getPageLink($GLOBALS['TSFE']->id).'" method="GET">

Mit dieser Action wird die aktuelle Seite nocheinmal aufgerufen. Aber ... das geschieht leider nicht. Erst mit einem manuellen Shift + Reload kann ich das herbeiführen.

Weiß jemand, wie man Shift + Reload mit PHP ausführt?

Gruß Rene

woida ·

Was willst du denn mit einem Shift+Reload? #paralyzed#

Dein Formular wird nicht aufgerufen, weil du über action nur eine URL ohne Paramter übergenben kannst (also nur index.php). Deshalb tut dein Formular auch nichts.
Paramter können nur über das Formular selbst übergeben werden. Mach also einfach ein hidden Field:

'<input type="hidden" name="id" value="'.$GLOBALS['TSFE']->id.'">';
rene_afew ·

Hallo woida,
danke für die prompte Antwort. Bei Shift + Reload wirft das Formular das richtige Ergebnis aus. In meinem Fall habe ich eine Selectbox, deren Namen die Variable für den Wert der selektierten Option ist.

 <select name="'.$this-">prefixId.'[uid]">

Wenn ich auf eine Option der Selektbox klicke, sehe ich danach sofort die richtige Sessionvariable oben in der URL-Zeile als GET-Parameter. Aber die Selektbox springt nicht auf diese Option. Jetzt könnte man annehmen - gut die Selectbox ist falsch gebaut. Aber ... macht man einmal den Shift + Reload funktioniert alles richtig. Das heißt bei Klick wird dann immer die richtige Option in der Box angezeigt und der Wert der Sessionvariable stimmt auch. Hmm... Ich kann dem Besucher ja nicht zumuten nach dem ersten Klick auf die Selectbox ein Shift-Reload zu machen.
Gruß Rene

woida ·

...danach sofort die richtige Sessionvariable oben in der URL-Zeile...

Ich denke nicht, daß du erkennst wann eine Sessionvariabel "richtig" oder "falsch" ist: Eine Sessionvariable ist eine ca. 32-stellige Hex-Zahl, wann soll die denn falsch sein?

So wies aussieht hast du nicht ganz verstanden, wie Formulare funktionieren: Wenn du eine Select-Box markierst, wird erstmal nur das Kreuzchen gesetzt, ansonsten passiert gar nichts.
Damit dein Formular was tut, mußt du erstaml einen "Submit"-Button einfügen und den dann auch anklicken. Erst dann siehst du die Variablen der Checkbox in der URL.

rene_afew ·

...

Damit dein Formular was tut, mußt du erstaml einen "Submit"-Button einfügen und den dann auch anklicken.

Ja natürlich, wie gesagt, es handelt sich hier um eine Selectbox, bei der es auch einen Submitbutton gibt. Dieser Button wird gedrückt, nachdem man eine bestimmte Option in der Box gewählt hat.

Damit du siehst, wovon ich spreche, hier einmal das generierte HTML:

                         <form action="test_ext.html" method="GET">

                           <select name="tx_rc_pi1[uid]">
                         <option value="1"> Männer
<option value="2"> Frauen
<option value="3"> Kinder
<option value="4" selected=""> Typen
<option value="5"> Professionen

                          </select>
                          <input type="submit" value="ok" />
                          </form>

Erst dann siehst du die Variablen der Checkbox in der URL.

jep, und zwar immer, auch beim ersten Mal. Shift + Reload muß ich drücken, damit die angeklickte Option als 'SELECTED' markiert wird und der GET-Parameter auch von anderen Funktionen des Skripts erfaßt wird.

Wie die GET-Parameter von der Funktion zur Generierung der Selectbox verwendet werden, siehst du hier:

           function makeSelectBox() {

                       $content.='
                         <form action="'.$this-">pi_getPageLink($GLOBALS['TSFE']->id).'" method="GET">
                         <select name="'.$this-">prefixId.'[uid]">
                         ';

                          $query = "SELECT title, uid  FROM tx_rc_category";                                                
                          $res = mysql(TYPO3_db,$query);

                            while($row = mysql_fetch_object($res)){

                              $content.= "<option value="\&quot;$row-">uid\"";

                               if (isset($this->piVars['uid']) && $this->piVars['uid'] == $row->uid ){

                                      $content.= " SELECTED";
                                         }
                                      $content.= "> $row->title\n";                            
                            }

                       $content.='
                          </select>
                          <inputtype="submit" value="ok">
                          </form>
                          ';
           return $content ;
           }

Gruß Rene

woida ·

Mal ein Schnellschuß:
füg doch mal als erste Anweisung in deiner Function

 $GLOBALS["TSFE"]->set_no_cache();

(also in Zeile 2)

und nach Zeile 23

<input type="hiden" name="no_cache" value="1" />

ein.

rene_afew ·

Hallo woida,
ich kanns kaum glauben, aber dein Schnellschuß hat auf Anhieb ins Schwarze getroffen - es funktioniert!!

Danach habe ich nocheinmal in der TSref nachgelesen was es mit '$GLOBALS["TSFE"]->set_no_cache()' aufsich hat:

$GLOBALS["TSFE"]->set_no_cache()
Call the function $GLOBALS["TSFE"]->set_no_cache(), if you want to disable caching of the page. Call this during development! And call it, if the content you create may not be cached.

... kann mir aber immer noch keinen Reim darauf machen, dass das diese Konsequenzen hatte. Danke für deinen Tipp!!

Meine Funktion sieht jetzt so aus - und die generierte Selectbox braucht jetzt **keinen** SHIFT + RELOAD mehr im Browser:

           function makeSelectBox() {
           
                       // Cache löschen!!
                       $GLOBALS["TSFE"]->set_no_cache();

                       $content.='
                         <form action="'.$this-">pi_getPageLink($GLOBALS['TSFE']->id).'" method="GET">
                         <select name="'.$this-">prefixId.'[uid]">
                         ';

                          $query = "SELECT title, uid  FROM tx_rc_category";                                                
                          $res = mysql(TYPO3_db,$query);

                            while($row = mysql_fetch_object($res)){

                              $content.= "<option value="\&quot;$row-">uid\"";

                               if (isset($this->piVars['uid']) && $this->piVars['uid'] == $row->uid ){

                                      $content.= " SELECTED";
                                         }
                                      $content.= "> $row->title\n";                            
                            }

                       $content.='
                          </select>
                          <!-- Cache löschen -->
                          <input type="hidden" name="no_cache" value="1" /> 
                          <inputtype="submit" value="ok">
                          </form>
                          ';
           return $content ;
           }
           }

Gruß Rene