Zum Inhalt springen

URL Parameter fixieren

Erstellt am 22. Juni 2005 · 4 Antworten · letzte Antwort am 22. Juni 2005

Tags: Frage

fez ·

Hoi!
Vielleicht versteh ich ja was falsch... Aber gerade deswegen meine Frage:

Ich will eine Extension schreiben, die sich durch eine Dropdownbox (name="ddvalue") steuern lässt.

Beim Seitenwechsel soll sich das Formular dann merken, welche Einstellung ddvalue hatte. Das versuche ich mit $GLOBALS['TSFE']->linkVars .= ", ddvalue"

Damit sollte ja dann ddvalue an allen Links mit dran hängen.... Aber beim Klick auf ein Link springt dann mein Formular immer auf den ersten Wert in der Dropdown zurück

Was mach ich da falsch?

Muss ich da noch irgendwas zusätzlich aufrufen?

FEZ

jenses ·

Du mußt auf der Zielseite den übergebenen "ddvalue" auslesen und die entsprechende Option in der select-box als
'selected="selected"' markieren.
Eigentlich brauchst du das auch nicht per linkVars machen.
Du verschickst ja die Formulardaten per GET oder POST,
diese Daten brauchst du auf der Zielseite ja nur auszulesen.

jenses

fez ·

Das mach ich...
Ich erklär's nochmal genauer, hatte vorher nicht genügend Zeit!

Es gibt in meine Test zwei Seiten im Baum pageA und pageB. Auf beiden binde ich meine Extension ein.
Die Extension hat die oben angesprochene DropdownBox und einen Button. Klick auf den Button lädt die Seite neu und alles funktioniert wunderbar! Was ich jetzt ZUSÄTZLICH will ist, dass wenn ich von pageA (wo ich schon ein Formular Neuladen durchgeführt habe) auf pageB wechsle meine Extension sich die Einstellung die sie auf pageA bekommen hat merkt.
Und zu sowas reich reines Auslesen nicht, da ja der Link zu pageB zunächst mal die Variable ddvalue NICHT beinhaltet.

Hier noch der komplette Code meiner main() [einzige Funktion bisher]. "ddvalue" heisst hier "stoccerproductid" [leider verhaut das PHP tag den code deswegen unformatiert]
function main($content,$conf) {
$this->conf = $conf; //store configuration
$this->pi_loadLL(); // Loading language-labels
$this->pi_setPiVarDefaults(); // Set default piVars from TS
$this->pi_initPIflexForm(); // Init FlexForm for plugin
$this->pi_USER_INT_obj=1; // Configuring "no caching"

$STOCCER_PRODUCT_ID = 'stoccerproductid';

// If no product is selected!
$this->productid = t3lib_div::_GP($STOCCER_PRODUCT_ID) ? t3lib_div::_GP($STOCCER_PRODUCT_ID) : -1;


// MAKE THE USED URL-PARAMS beeing added permanently
$linkVarsToAdd = $STOCCER_PRODUCT_ID;
if(!$GLOBALS['TSFE']->linkVars){
// NONE SET UP TO NOW
$GLOBALS['TSFE']->linkVars = $linkVarsToAdd;
}else{
//Check if they already were added
if(!stristr($GLOBALS,$linkVarsToAdd)){
// ADD THEM
$GLOBALS['TSFE']->linkVars .= ", ".$linkVarsToAdd;
}
}
$content = '';
$dropdownlist = '';
$button = '<input type="submit" value="GO" class="stoccer-chart-button" />';
$chartUrl = '';
$baseUrl='';
$urlParams='';
$selectConf = array();
$selectConf['pidInList'] = $this->cObj->data['pages'];
$res = $this->cObj->exec_getQuery('tx_stoccercharts_products', $selectConf);
while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)){
if($this->productid == -1){
$this->productid = "".$row['productid'];
}
$dropdownlist .= '<option value="'.$row['productid'].'" ifthis-="">productid == $row['productid']){
// This is the product to show!
$dropdownlist .= ' selected';
$baseUrl = $row['baseurl'];
}
$dropdownlist .= '>'.$row['productname'].'</option>';
}
$chartUrl = $baseUrl . $urlParams;

$content .= '<div class="stoccer-chart-box">';
$content .= '<form method="GET">';
$content .= '<input type="hidden" name="id" value="'.$GLOBALS[" tsfe-="" />id.'">';
$content .= '<select name="'.$STOCCER_PRODUCT_ID.'" size="1" class="stoccer-chart-productselector">'.$dropdownlist.'</select>';
$content .= $button;
$content .= '</form>';
$content .= '<img src="'.$chartUrl.'" class="stoccer_chart_small" alt="" />';
$content .= '</div>';
return $this->pi_wrapInBaseClass($content);
}

EDIT: Auch hier wird der Code zerstört.... Naja, vielleicht reichts ja für's verständnis

jenses ·

Ich steige jetzt nicht so richtig hinter deinen Code. :o
Ich hab sowas folgendermaßen gemacht :
Beim Eintritt in die main-function werden die POST-Daten ausgelesen, Daten die ich weiterverwenden will (z.B. auf Page B) speichere ich als Sessiondaten:

$meineSessionDaten = $_POST[tx_uxsession_pi1][input_field];
$GLOBALS["TSFE"]->fe_user->setKey("ses", 'user_uxsession[eingabewert]', $meineSessionDaten);

Wenn ich sie wieder brauch, hole ich sie mir zurück :

$meineSessionDaten = $GLOBALS["TSFE"]->fe_user->getKey("ses", 'user_uxsession[eingabewert]');

Dadurch spart man sich diesen ganzen linkVars - Kram.
Und ich habe jederzeit Zugriff auf einmal gespeicherte Daten.

jenses

fez ·
jenses schrieb

Ich steige jetzt nicht so richtig hinter deinen Code. :o

Seltsam auch :-)

Wie auch immer!
Das mit der SESSION is ein g***** Trick!
Danke dir! Funktioniert wunderbar!!!!

FEZ