Zum Inhalt springen

Mit TS eine Sessionvariabele an eine URL hängen

Erstellt am 16. August 2012 · 5 Antworten · letzte Antwort am 22. Januar 2013

Tags: Links, Frage

ÁndreMansfeld ·

Hallo Freunde,
mich beschäftigt ein Problem mit dem ich nicht weiterkomme.

In meinem TS arbeite ich allerhand Sessionvariabelen ab.
Wenn ich jedoch versuche, diese an einen Link in meinem Menu zu hängen, dann scheitere ich.
Ich habe so ziemlich alle addParams, additionalParam, wraps u.s.w. probiert, aber ohne Erfolg.
Hier meine beiden TS Auszüge, wobei jedes für sich funktioniert.

Mit nachfolgendem Script lasse ich mir eine Session auslesen und diese dann auf der Webseite anzeigen (damit man weiss, wo man ist).

temp.stadtanzeige = GP:stadtauswahl
seite.10.marks.STADTANZEIGE = TEXT
seite.10.marks.STADTANZEIGE.data < temp.stadtanzeige

Die Ausgabe wird je nach Stadtwahl korrekt angezeigt, dient aber nur einer Extension zum Auslesen der Sessionvariabelen und um dem User zu zeigen was er ausgewählt hat.

In der weiteren Navigation wird die Session mitgeführt und die Ausgaben sind korrekt.
Leider ist eine solche Filterung nur solange gut, wie man sich auf der Seite befindet. Wenn man einen Bookmark oder Link daraus machen möchte, dann fehlt natürlich die Variabele in der URL.

Deswegen würde ich gerne diese Variabele an den Link hängen, sodass die URL dann auch die Sessionvariabelen enthalten.
Also aus www.domain.de/stadt.html soll www.domain.de/stadt.html?Anzeige=Frankfurt werden, wobei die Sessionvariabele hier Anzeige heisst.
Mein Menu ist einfach aufgebaut.

...
marks.NAVIGATION{
entryLevel = 2
  1 = TMENU
  1 {
    expAll = 0
    noBlur = 1
    NO = 1
    NO{
    ATagParams = class="submenu1_no"
    linkWrap =  <div id="submenu1">|</div>
# meine Tests
additionalParams = &Anzeige=temp.stadtanzeige      
#additionalParams = &Anzeige<temp.stadtanzeige
#additionalParams = &Anzeige=<temp.stadtanzeige
#additionalParams = &Anzeige=<{temp.stadtanzeige}
 
#additionalParams.insertData = 1
          
}
}...

Der Link enthält nun im Menu immer www.domain.de/stadt.html?Anzeige = ..???... und hier steht leider nie meine SESSIONVARIABELE.
#paralyzed#

Ist es überhaupt möglich auf die Variabele in den TMENUS zuzugreifen?
Ich benutze diese Variabele ja mehrmals in div.Conditions und auf MARKERN, dort geht es!!!

Lieben Gruß Andreas

einpraegsam.​net ·

Du schreibst zwar immer Session - aber ich glaube du meinst eigentlich nur einen GET-Paramter.
Mit config.linkVars kannst du definieren, welche GET-Paramter mit durchgeschliffen werden sollen (sofern vorhanden)

ÁndreMansfeld ·

Hallo Jörg,
also ich habe im Moment mehrere Scripte gleichzeitig laufen, um herauszufinden, was sich bewährt.
Ich erstelle mit einem einfachen PHP Script (SCHALTER) folgende Variabelen.
1. POST Variabele mit dem Schalterwert
2. Session Eröffnung um den Wert dauerhaft zur Verfügung zu haben

Mit einem print_r sehe ich, dass ich nachdem Aufruf der Seite über beide Variabelen verfügen kann.

Nun scheitere ich grundsätzlich am Abfragen der Session, bzw. des Postwertes im TS.
Habe so viel gelesen, aber auch das sich viel geändert hat.
Resumierend wüde ich sagen, dass es gar nicht so einfach geht, aber dass will ich nicht wahrhaben :-)

Gibts kein einfaches TS Script, welches mir Zugriff auf meine Sessions liefert.
Das mit dem GP Parameter, habe ich nur aus Testzwecken eingeführt, um herauszufinden, ob ich überhaupt Zugriff auf irgendwas habe.

Letztlich möchte ich nur in allen Links, welche ich über das Menu aufrufe, die Sessionparameter mitgeben.

Lieben Gruß Andreas

PS: Ich könnte mir auch gut vorstellen, beim Aufruf eine USERFUNC zu iniziieren, hat nur das Problem, dass die erst nach einem erneuten Klick erzeugt wird und nicht gleich zur Verfügung steht.

ÁndreMansfeld ·

So nochmal das Ganze aus einer anderen Richtung.

Ich habe jetzt eine komplett neue Methode gebastelt und möchte diese nochmal kurz zur Lösungsfindung einstellen.

Mit einer winzigen .php Hilfsdatei lasse ich mir nun die Sessionwerte auswerten.
Diese PHP include ich nun in das TS.

includeLibs.city = pfad..../2012/sessionscript.php
temp.stadt = PHP_SCRIPT_EXT
temp.stadt.file = pfad..../sessionscript.php

Die PHP sieht so aus.

<?
$stadt = $_SESSION['Cityausgabe']; // holt den Wert aus der Session
$content =$stadt;  // gibt den Wert als Content zurück
?>

Auf einem Marker ausgegeben, erhalte ich gewünschtes Ergebnis ... z.B. Frankfurt

seite.10.marks.TEST = PHP_SCRIPT_EXT
seite.10.marks.TEST.file = fileadmin/2012/sessionscript.php

Wenn ich nun dieses Ergebnis erhalte, müsste es doch möglich sein, dies mit additionalParams an den Link zu hängen.

Ich habe es aber nicht umsetzen können #paralyzed#

Da ich im TS eigentlich keine Variabelen aufrufen kann, muss ich es wohl anders machen.
kann mir da jemand einen Schupps geben.

Hier nochmal das Menu:

marks.NAVIGATION = HMENU
marks.NAVIGATION {
entryLevel = 2
  1 = TMENU
  1 {
    expAll = 0
    NO = 1
          NO{
             ATagParams = class="submenu1_no"
             linkWrap =  <div id="subnav1">|</div>
             additionalParams = &Anzeige=   ??????
     
      
...

Dazu wäre noch zu fragen: Wenn ich die PHP Datei ausserhalb von MENU include geht das doch auch in Ordnung, denn ich denke das wenn ich sie in die NO=1 hole, wird sie mehrere Male (Für jeden Menupunkt) includiert oder?

Wie immer ... für einen Schupps dankbar :p

ÁndreMansfeld ·

Also ich komme nicht weiter,
mein TS verweigert strikt irgendwelche Sessions und Postdaten auszulesen.
Ich erzeuge mit

...
setcookie("SetCity", "Frankfurt" ); // ein PHP Session Cookie
$_SESSION["Cityausgabe"] = "Frankfurt"; // Und finde Sie auch im Cookie/Session Manager des Browsers
....
    
    /* Neuer Versuch*/
    $daten='Frankfurt';   
    $GLOBALS['TSFE']->fe_user->setKey('ses','City', $daten); // Eine Typo Session VAR
    $GLOBALS["TSFE"]->storeSessionData();

mehrere Cookies,Sessions.

Auf einen Marker zum Testen ausgegeben erhalte ich sowohl mit ...

seite.10.marks.TEST = TEXT
...
seite.10.marks.data = global : HTTP_COOKIE_VARS | City
seite.10.marks.data = global : HTTP_GET_VARS | City
seite.10.marks.data = global : HTTP_POST_VARS | hierher
seite.10.marks.value=TSFE:City
seite.10.marks.value=TSFE:ses|City
seite.10.marks.value=TSFE:fe_user|ses|City    // bin eingeloggt!!
...

... als auch mit noch zig weiteren Scripts, welche ich in den div. Foren gefunden habe KEINE Ausgabe.
Diese Funktion (Sessiondaten im TS auszuwerten) ist doch eigentlich nichts besonderes denke ich, aber Lösungen dazu gibts anscheinend nicht wirklich.
Ich verwende Typo3 4.5 auf einem Server mit PHP 5 kann es denn daran liegen, dass die Lösungen die ich gefunden habe allesamt nicht mehr zutreffend sind?
Das Einzige was funktioniert ist meine Ausgabe über die PHP Hilfsdatei, aber das Ergebnis will nicht an den Link (additionalParams).

Keiner eine Idee dazu?

Lieben Gruß
Andreas

ÁndreMansfeld ·

Ist zwar schon eine Weile her, aber hier mal der Weg der bei mir funktioniert.
Nach vielem Googlen und probieren (bzw. Doc/Ref studieren) boten sich mir letztlich 2 Wege um ....
1. Aus meiner Extension Typo3 Sessions zu definieren und damit im TS zu arbeiten.
2. In meiner Extension mit den Typo3 Sessions zu arbeiten.
3. Einen Link zu generieren mit dem Sessionparameter.

Vielfach dokumentiert:

$GLOBALS["TSFE"]->fe_user->setKey('ses','city',$meincookie);
$GLOBALS["TSFE"]->storeSessionData();

erzeugt eine Session mit der Typo3 arbeiten kann.
Hierbei steht ses für die Session, city für den Namen meiner Session und $meincookie für den Wert z.B.

$meincookie = 'Frankfurt';

.
Damit ich auch in PHP mit meiner Extension einen Cookie zur Verfügung habe definiere ich einfach mit

setcookie("city", $meincookie);

auch noch ein "externes" PHP Cookie. Das muss nicht sein, aber eben genau hier war mein Problem. Dieses Cookie konnte ich nicht mit TS auslesen.
In meinem Fall habe ich es nur Zwecks überprüfung mitgeschleift.

So... im TS kann man mit

temp.stadtanzeige = TEXT
temp.stadtanzeige.data = TSFE:fe_user|sesData|city

und dann mit einem MARKER

marks.STADTANZEIGE < temp.stadtanzeige

den Sessionwert ausgeben. Z.B. Sie schauen sich gerade Angebote aus ###STADTANZEIGE## an. Also in meinem Fall Frankfurt

Mein 3tes Problem war ja einen Link mit dem Sessionparameter zu generieren.
Dafür gibts 2 Wege:
1. Man schaltet den Sessionwert einfach mit einem config.linkVars ein. Dann werden alle Links in Typo3 mit dem Wert der Session erweitert. Zum Beispiel. www.domain.de soll für eine weitere Verarbeitung noch die Variabele einer Stadt (city) bekommen, dann wird jeder Link um mein Sessionwert city ergänzt. Wenn der Wert z.B. Frankfurt heißt, dann steht in der URL www.domain.de/?city=Frankfurt.
Dies macht man im TS mit

config.linkVars = city

Wenn man nur an den Links in einem Menu einen Sessionwert benötigt kann man auch im MENU

additionalParams.dataWrap = &city = {TSFE:fe_user|sesData|city}

benutzen.

Hoffe ich konnte ein wenig helfen, wenn man auf ähnliche Probleme stößt.
Übrigens ... getestet in Typo3 Version 6 mit PHP > 5.x