Hallo,
ich bezweifle zwar, im richtigem Subforum zu sein, aber so richtig in Plugins&Hacks passt es auch nicht...
Also, wo fange ich an...? Ich setze in meinem Blog auf dmke.de das Theme blog.txt ein, allerdings recht stark modifiziert; lediglich die Grundfarbe weiß blieb erhalten. Jetzt irgendwann bin ich auf den Trichter gekommen, auch mal andere Farben (für das selbe Theme) via CSS einzubringen, als leichtestes Beispiel: schwarz. Doch wollte ich dafür kein Plugin wie den ThemeSwitcher verwenden, sondern etwas eigenes in JS programmieren, was auch wunderbar geklappt hat...
Doch leider fehlt eine wichtige Funktion: nämlich das Speichern eines Cookies, damit ich bzw. meine paar Besucher nicht ständig neu die Farbe wechseln müssen.
Die Idee hinter dem Code ist diese:
- In der style.css sind Angaben wie
angegeben,
- ein JS muss also nur die ID #invert an den body anfügen.
- Der geänderte Information (hell/dunkel) wird in ein Cookie gespeichert.
- Betritt ein Besucher die Seite (window.onload=function() {...}), wird ermittelt ob ein Cookie mit den richtigen Werten gesetzt ist und dieser wird dann entsprechend umgesetzt.
Der Code selbst sieht bis jetzt so aus:
function dmkeSwitch() {
var theId = document.getElementsByTagName("body")[0].id;
if (theId == "normal") {
document.getElementById("switch").firstChild.data = "Zu dunkel?";
document.getElementsByTagName("body")[0].id = "invert";
} else if (theId == "invert") {
document.getElementsByTagName("body")[0].id = "normal";
document.getElementById("switch").firstChild.data = "Zu hell?";
}
return false;
}
Alles anzeigen
dmkeSwitch() wird aufgerufen, wenn das onclick-Event eines Links aktiviert wird.
Die bis jetzt weiterentwickelte (aber nicht funktionierende) Version sieht so aus:
function dmkeDebug(theString) {
newParagraph = document.createElement("p");
newInnerText = document.createTextNode(theString);
outAreal = document.getElementById("dmkeDebug");
newParagraph.appendChild(newInnerText);
outAreal.appendChild(newParagraph);
}
function dmkeTrim(theString) {
while (theString.substring(0, 1) == ' ') {
theString = theString.substring(1, theString.length);
}
while (theString.substring(theString.length-1, theString.length) == ' ') {
theString = theString.substring(0, theString.length-1);
}
return theString;
}
function dmkeGetCookie(theName, theDefaultValue) {
var dmkeCookieString = new Array();
var dmkeSingleCookie = new Array();
var dmkeSingleCAssoc = new Array();
if (document.cookie) {
dmkeCookieString = document.cookie.split(";");
for (i=0; i<=dmkeCookieString.length; i++) {
//dmkeCookieString[i] = dmkeTrim(dmkeCookieString[i]);
dmkeSingleCookie = dmkeCookieString[i].split("\=");
for (j=0; j<=dmkeSingleCookie.length; i++) {
//dmkeSingleCookie[j] = dmkeTrim(dmkeSingleCookie[j]);
dmkeSingleCAssoc[dmkeSingleCookie[0]] = dmkeSingleCookie[1];
}
}
return dmkeSingleCAssoc[theName];
} else {
return theDefaultValue;
}
}
function dmkeSetCookie(theName, theValue) {
var dmkeTimeNow = new Date();
var dmkeCookieExpire = new Date(dmkeTimeNow.getTime() + 1000*60*60*24*7);
document.cookie = "" + theName + "=" + theValue + ";expires=" + dmkeCookieExpire.toGMTString();
return true;
}
function dmkeSwitch(doSetCookie) {
var theId = document.getElementsByTagName("body")[0].id;
if (theId == "normal") {
document.getElementsByTagName("body")[0].id = "invert";
document.getElementById("switch").firstChild.data = "Zu dunkel?";
if (doSetCookie) {
dmkeSetCookie("dmkeGimmick1", "dunkel")
}
} else if (theId == "invert") {
document.getElementsByTagName("body")[0].id = "normal";
document.getElementById("switch").firstChild.data = "Zu hell?";
if (doSetCookie) {
dmkeSetCookie("dmkeGimmick1", "hell")
}
}
return false;
}
if (dmkeGetCookie("dmkeGimmick1", "hell") != "hell") {
window.onLoad = function() {
dmkeSwitch(false);
}
}
Alles anzeigen
Hierbei habe ich darauf achten wollen, die Funktionen abstrakt genug zu schreiben, um sie auch noch anderweitig einsetzen zu können.
Irgendwie scheine ich jedoch das Prinzip der Cookies in Javascript nicht ganz verstanden zu haben, bei mir wird das Cookie jedenfalls bei Aufruf nicht gesetzt (btw.: warum gibt document.cookie kein Array zurück? In PHP ist das viel einfacher...).
Kann mir jemand vielleicht ein wenig weiterhelfen?
LG
Dominik