PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zusätzliche cookies setzen



berny
11.01.2012, 13:48
Ich möchte ein kleines Script laufen lassen, welches unabhängig vom Shopsystem läuft.
Trotzdem sollte es wissen, in welcher Kategorie ich mich derzeit befinde.

Deshalb die Idee, einfach die Kategorie in ein cookie speichern und dieses im externen Script abrufen.

Wo füge ich aber am besten dieses cookie ein?
im Template-Bereich oder ev doch woanders?
Wenn ja, wo ?

jay-ar
12.01.2012, 05:49
Hallo BERNY

Was möchtest Du denn machen?
$_SESSION schleift so gut wie alles mit durch.

jay-ar

berny
12.01.2012, 08:04
So, habe das mal so gelöst:
in der configure.php setze ich ein eigenes Cookie, welches unabhägig von den anderen ist.
Die configure deshalb, weil diese Datei ganz am anfang geladen wird (vor den headers), und gleichzeitig bei Updates verschont bleibt und ich nicht jedesmal nachbessern muß.
In diesem Cookie verpacke ich die ausgelesene Kategorie.
Das externe Script holt sich dann dieses cookie und wirft es aus.

Damit mache ich folgendes:
Das script ist für ein Hintergrundbild zuständig, welches bei jedem Seitenaufruf wechselt.
Dieses wird über die css geladen, die css ist aber statisch, das script aber nicht.
Somit kann ich in Folge auch bestimmen, welche Bilder in welcher Kategorie dargestellt werden.

berny
12.01.2012, 08:43
Ein kleines Problem habe ich noch dabei:
Der Cache der Browser arbeitet unterschiedlich.
Beim FF zB wird das Bild einfach nicht neu geladen, insbesondere deshalb, weil das scritp mittels header('Location: '$kategorie.$zufallsbild); auf das eigentliche Bild weiterleiten lass.
Beim FF wird immer das alte Bild angezeigt, das ist ja noch ok weil gecached, aber beim IE werden verschiedene Bilder geladen und die Weiterleitung auf den $kategorie - Pfad ignoriert.
Wie kann das jetzt sein, wird ja die Weiterleitung über das php-Script erzeugt und nicht am PC des users ???
Oder wird diese "weiterleitung" gleich mitgecached???
Wenn ja, wie könnte ich das wieder verhindern?

KlausK
12.01.2012, 09:08
Mit dem Tag "cache-control" im Header lässt sich doch von vorn herein verhindern, dass Teile im Cache abgelegt werden.
Und "expires" content="0" zeigt eine Gültigkeit von 0 Tagen an. Der Browser müsste demnach alle Bestandteile neu aufrufen.
Wenn ich das richtig in Erinnerung habe ...

Ob das nun wirklich 'ne Hilfe ist, weiß ich auch nicht :rolleyes:

berny
12.01.2012, 12:58
nein, nicht wirklich, weil ich ja nicht alles neu laden will, sondern eben nur ein script.
Ich komm schon noch auf eine Lösung, mal abwarten :D

berny
12.01.2012, 15:37
Ich bin der Sache schon ein Stück näher.
Das Problem liegt rein im Gambio selber, der das script cached und damit auch die Weiterleitungen.
Wenn man das ganze direkt aufruft, funktioniert es einwandfrei.

Dabei ist mir auch aufgefallen, dass es egal ist, was ich bei den Cache-Einstellungen im GX2 speichere, der Shop cached immer etwas im Verzeichnis cache, auch wenn ich im Admin den Ordnernamen ändere!

Da stellt sich die Frage, ob es da einen kleinen Bug in Gambio bezüglich der Cache-Einstellungen gibt.

@Klaus:
header("Expires: Sat, 01 Aug 2001 01:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Cache-Control: post-check=0, pre-check=0");

Damit sollte zumindest das Script als nicht cachefähig gelten...

Goslarer1
12.01.2012, 16:02
Hast Du schon mal darüber nachgedacht das über eine angelegte htaccess zu lösen? Ist nur so eine Idee.
Da die htaccess ist die erste Datei die vor allen anderen gelesen wird und somit die Cacheprobleme des Browsers oder des Shops uninterressant werden.

jay-ar
12.01.2012, 16:57
Hallo Berny

schau mal bitte hier
http://www.arbeitshandschuhe-tegera.de/

Meine Vorgehensweise war folgene. (ohne cookies und ohne in den kerntateien rumzufummeln)
alles nur im Template
index.html, stylesheet.css, source/boxes/categories.php
zuerst mehrere id in der css anlegen (Beispiel)


#kopf { background: url(img/header-handschuhe.jpg) 50% 0 no-repeat;} /*das default bild*/
#kopfhandschuhe { background: url(img/header-handschuhe.jpg) 50% 0 no-repeat;}
#kopfschuhe { background: url(img/header-schuhe.jpg) 50% 0 no-repeat; }
#kopfschutzbrillen { background: url(img/header-schutzbrillen.jpg) 50% 0 no-repeat; }

dann in der index.html dem header-div die id verpassen mit 'ner smarty Übergabevariable


<div id="kopf{$HEADERBILD}" >

zuletzt der Kategorie id einen Wert zuweisen und Smarty übergeben - source/boxes/categories.php
Kategorie id entsprechend aus der $cPath Variable herauslesen (Beispiel)


$header = 'handschuhe'; //default
if (substr($cPath,0,2) == '24') $header = 'schuhe';
elseif (substr($cPath,0,2) == '29') $header = 'schutzbrillen';
$smarty->assign('HEADERBILD', $header);

Wenn du viele Kategorien hast, kann man letzteres auch mit 'nem array und einer foreach schleife komfortabler lösen. Sollte das der Fall sein, dann melde dich und ich gebe dir den Code.

jay-ar

berny
12.01.2012, 18:32
thx
muss ich mir mal ansehen.
Es ist aber letztlich das Problem, dass das script, welches ich als Header-bild lade, und welches die Weiterleitung auf das eigentliche Bild macht, hier komisch verwendet wird.
Hier werden Zufallsbilder "erzeugt", welche alle in einem bestimmten Verzeichnis liegen.

Aber der Ansatz ist mal gut, muss das mal checken, wenn ich Zeit habe, ev werfe ich das Bild mit dem script selber aus...

berny
15.01.2012, 15:42
Nachdem ich keine wirkliche Lösung gefunden habe, habe ich in der gm_dynamics.css.php am Ende einfach die entsprechende class neue definiert:
#shop_logo{
background-image:url(backgrounds/bildwechselscript.php?".time().");
}
Mit dem Timestamp erzwinge ich jetzt den reloade des scripts und es wird nicht mehr gecached, somit wird auch der header immer neu definiert und die Weiterleitung funktioniert.
Etwas dirty, ich weiß:p.

Alle anderen Lösungen scheitern einfach daran, dass das Bildwechselscript selber gecacht wird und somit das Ergebnis = header-Weiterleitung immer die gleiche ist.