PDA

Bekijk Volledige Versie : Probleem met stijlscript



# martin
12/09/05, 08:55
Dag mensen,

Ik zag eens een script, waarmee je bezoekers een stijl kunt laten kiezen. Je
kunt op een bepaalde pagina een stijl selecteren, en dit blijft door middel
van een cookie op alle pagina's hetzelfde. Het probleem is echter dat dit op
alle pagina's binnen die map zo is. Dus als je in "../algemeen/index.php"
een stijl kiest, blijft dit zo op "../algemeen/inhoud.php" en
"../algemeen/nogiets.php". Maar ga je naar "../contact/index.php" is de
standaardstijl weer geactiveerd. Het cookie lijkt je voorkeur dus op te
slaan voor een bepaalde map, in plaats van voor alle pagina's binnen het
domein.

Mijn wens is dat je vanaf iedere pagina een stijl kunt kiezen, die
geactiveerd is zolang je op het domein blijft en tot je eventueel een andere
kiest.

Dit is de code in de pagina:

<head>

<link
rel="stylesheet"
href="stijl/oranje.css"
type="text/css"
title="Oranje"
>

<link
rel="alternate stylesheet"
href="stijl/blauw.css"
type="text/css" title="Blauw"
>

<link
rel="alternate stylesheet"
href="stijl/zwartwit.css"
type="text/css"
title="Zwartwit"
>

<script
type="text/javascript"
src="http://www.example.com/scripts/config.js"
>

</script>

</head>

<body onload="init()">

<script
type="text/javascript"
>

SetTheme();

</script>


[ inhoud ]

<img
onclick='SetStyleSheet("Oranje");'
title="Oranje stijl instellen"
src="design/or-ico.gif"
alt="Oranje"
>

<img
onclick='SetStyleSheet("Blauw");'
title="Blauwe stijl instellen"
src="design/bl-ico.gif"
alt="Blauw"
>

<img
onclick='SetStyleSheet("Zwartwit");'
title="Zwart-wit stijl instellen"
src="design/zw-ico.gif"
alt="Zwartwit"
>

</body>


Dus wanneer je een bepaalde stijl kiest, bijvoorbeeld blauw, gaat dit goed
als je in die map blijft. Ga je naar een andere map is de standaard oranje
stijl weer geactiveerd. Je moet dus per map aangeven welke stijl de
bedoeling is, terwijl ik wil dat je dat voor het gehele domein maar één keer
hoeft te doen.


.../algemeen/index.php [kies blauw]
.../algemeen/pagina2.php [blijft blauw]
.../algemeen/pagina3.php [blijft blauw]

.../anderemap/index.php [weer oranje]


Het script dat ik gebruik is het volgende:

function SetStyleSheet(newtitle)
{
SetStyleSheetInternal(newtitle);
}
function SetStyleSheetInternal(newtitle)
{
if (!document.getElementsByTagName)
{
return;
}

var i;
var savedtitle = '';
var links = document.getElementsByTagName("link");

if (!newtitle)
{
newtitle = savedtitle = ReadCookie("wanl-css", false);
}

if (!newtitle)
{
newtitle = GetPreferredStyleSheet();
}

var activesheet = null;
for (i = 0; i < links.length; i++)
{
var a = links[i];
var rel = a.getAttribute('rel');
var title = a.getAttribute('title');

if (rel.indexOf("style") != -1 && title)
{
a.disabled = true;
if (title == newtitle)
{
activesheet = a;
}
}
}
if (activesheet)
{
activesheet.disabled = false;
}
if (newtitle != savedtitle)
{
CreateCookie("wanl-css", newtitle, 365, false);
}
}

function GetActiveStyleSheet()
{
if (!document.getElementsByTagName)
{
return null;
}

var i;
var links = document.getElementsByTagName("link");

for(i = 0; i < links.length; i++)
{
var a = links[i];
var rel = a.getAttribute('rel');
var title = a.getAttribute('title');

if (rel.indexOf("style") != -1 && title && !a.disabled)
{
return title;
}
}
return null;
}

function GetPreferredStyleSheet()
{
if (!document.getElementsByTagName)
{
return null;
}

var i, a;
var links = document.getElementsByTagName("link");

for (i = 0; i < links.length; i++)
{
a = links[i];
var rel = a.getAttribute('rel');
var title = a.getAttribute('title');

if (rel.indexOf("style") != -1 && rel.indexOf("alt") == -1 && title)
{
return title;
}
}
return null;
}

function CreateCookie(name,value,days,useLang)
{

var langString = "";

var cookie = name + langString + "=" + value + ";";

if (days)
{
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
cookie += " expires=" + date.toGMTString() + ";";
}
cookie +=

document.cookie = cookie;
}

function ReadCookie(name, useLang)
{

var langString = "";

var nameEQ = name + langString + "=";
var ca = document.cookie.split(';');

for(var i = 0; i < ca.length; i++)
{
var c = ca[i];
while (c.charAt(0) == ' ')
{
c = c.substring(1, c.length);
}

if (c.indexOf(nameEQ) == 0)
{
return c.substring(nameEQ.length,c.length);
}
}
return null;
}

function SetTheme()
{
SetStyleSheetInternal();
return true;
}

function init()
{
SetStyleSheetInternal();
}


Zou iemand met kennis het script willen aanpassen waardoor het voor het
gehele domein werkt, in plaats van alleen een map?

Alvast hartelijk dank!

Groetjes Martin.

Ronald Klip
12/09/05, 09:35
winamp schreef:
>
> standaardstijl weer geactiveerd. Het cookie lijkt je voorkeur dus op te
> slaan voor een bepaalde map, in plaats van voor alle pagina's binnen het
> domein.

[snip irrelevante code]

> function CreateCookie(name,value,days,useLang)
> {
>
> var langString = "";
>
> var cookie = name + langString + "=" + value + ";";
>
> if (days)
> {
> var date = new Date();
> date.setTime(date.getTime()+(days*24*60*60*1000));
> cookie += " expires=" + date.toGMTString() + ";";
> }
> cookie +=
>
> document.cookie = cookie;
> }
>
> Zou iemand met kennis het script willen aanpassen waardoor het voor het
> gehele domein werkt, in plaats van alleen een map?

Het is client-side javascript; je zit dus in de verkeerde groep.

Anyway: zorg ervoor dat het script ook het pad aangeeft, in dit geval / .
Oftewel voeg op de juiste plek path=/; toe aan het script.

--
groet, Ronald

# martin
12/09/05, 10:05
> winamp schreef:

Winamp schreef? Is er iets mis met de instellingen die ik gebruik, volgens
mij is het "# martin"?

>> function CreateCookie(name,value,days,useLang)
>> {
>>
>> var langString = "";
>>
>> var cookie = name + langString + "=" + value + ";";
>>
>> if (days)
>> {
>> var date = new Date();
>> date.setTime(date.getTime()+(days*24*60*60*1000));
>> cookie += " expires=" + date.toGMTString() + ";";
>> }
>> cookie +=
>>
>> document.cookie = cookie;
>> }
>>
>> Zou iemand met kennis het script willen aanpassen waardoor het voor
>> het gehele domein werkt, in plaats van alleen een map?
>
> Het is client-side javascript; je zit dus in de verkeerde groep.
>
> Anyway: zorg ervoor dat het script ook het pad aangeeft, in dit geval
> / . Oftewel voeg op de juiste plek path=/; toe aan het script.

Bedankt, met je tip kon ik het script bijwerken en het voldoet nu:


function CreateCookie(name,value,days,useLang)
{

var langString = "";

var cookie = name + langString + "=" + value + ";";

if (days)
{
var date = new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
cookie += " expires=" + date.toGMTString() + ";";
}
cookie += " path=/";

document.cookie = cookie;
}


Groetjes Martin.

Ronald Klip
12/09/05, 11:45
schreef:
> > winamp schreef:
>
> Winamp schreef? Is er iets mis met de instellingen die ik gebruik, volgens
> mij is het "# martin"?

Mijn client heeft wat moeite met dat # aan het begin van je
'naam', misschien omdat # als een quote-teken wordt gezien. De naam wordt
dan geheel weggelaten bij een reply. Ik had er nu even snel iets
associatiefs neergezet. Een volgende keer zal ik netjes je naam gebruiken
;)

--
groet, Ronald

# martin
13/09/05, 07:45
Hieronder volgt een reactie op dit bericht:
>> Dag mensen,
>>
>> Ik zag eens een script, waarmee je bezoekers een stijl kunt laten
>> kiezen. [..]
>> Mijn wens is dat je vanaf iedere pagina een stijl kunt kiezen, die
>> geactiveerd is zolang je op het domein blijft en tot je eventueel
>> een andere kiest.

> Ik gebruik zelf zo'n 5 regeltjes code en voor zover ik weet wordt het
> ook in elke
> browser ondersteund. Met of zonder Javascript.

[script]

Bedankt voor de moeite. Is inderdaad minder code. Ik ga zondag kijken of het
mij ook lukt dit te implementeren :-)

# martin

--
http://www.winampnederlands.nl/handleidingen
handleidingen voor winamp - media - shoutcast