[php / javascript]Skinable website

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • MrEdge_
  • Registratie: April 2000
  • Laatst online: 17-11-2023
Ik wil mijn website graag voorzien van 2 skins. De user moet ze zelf kunnen kiezen. De images liggen al klaar en ik wilde met CSS de complete opmaak verzorgen.
Eerst wilde ik de theme aan de url meegeven, bijv:
code:
1
blaat.html?theme=blue

Maar omdat ik gebruik maak van frames kan ik de url niet per pagina uitlezen. Dus had ik in gedachten om de theme dmv een cookie uit te lezen in iedere html pagina.
Als ik dan eenmaal weet welke theme er is geselecteerd wil ik de bijbehorende stylesheet linken. Maar daar zit dus het probleem: wat is een goede manier om dat te doen? Ik heb helaas geen ervaring met php, wel met javascript.
Heeft iemand tips hoe ik dit het beste kan aanpakken?

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

euh... wat heb je al geprobeerd, en in welke richting denk je? Weet je hoe je cookies uit moet lezen, etc? de manual al gevonden?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • TA2
  • Registratie: Februari 2002
  • Laatst online: 30-09-2022

TA2

Kun je die variabelen niet doorgeven naar je source in je frame ?

Acties:
  • 0 Henk 'm!

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Om nou hier te gaan vragen hoe je het beste dit kan aanpakken?
Het is immers een kwestie van een cookie zetten en weer uitlezen

Het kan zowel met JavaScript als PHP. Het boeit je niet of de client er dingen aan kan veranderen of kan verbouwen, aangzien het niet kritisch is en hij de keuze toch zelf kan maken (hell, mocht het wel zo zijn, dan zit je al fout met je cookie)

Als ik jou was zou ik dus mooi de boel aanpakken met JavaScript. Ik zie nl. geen reden om speciaal hiervoor PHP op de server te installeren.

[ Voor 7% gewijzigd door Glimi op 27-01-2003 11:01 ]


Acties:
  • 0 Henk 'm!

  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 25-10-2022

Banpei

Hachiroku on this touge?

Het lijkt mij handiger om dat met een sessie-variabele doen. Als de client geen cookies accepteerd werkt het zowiezo niet, dan zou je nog eventueel met de sessie-variabele via GET door te geven een sessie kunnen behouden en toch nog de skins kunnen weergeven.

Ik zie alleen niet het probleem met het niet door kunnen geven naar een ander frame. :?

AE86 gevonden! | So what I thought I'd do was, I'd pretend to be one of those deaf-mutes.


Acties:
  • 0 Henk 'm!

  • MrEdge_
  • Registratie: April 2000
  • Laatst online: 17-11-2023
drm schreef op 27 januari 2003 @ 10:57:
euh... wat heb je al geprobeerd, en in welke richting denk je? Weet je hoe je cookies uit moet lezen, etc? de manual al gevonden?
Wat ik al heb geprobeerd is dus de theme aan de url mee t egeven. Maar als je 1 grote index.htm hebt met meerdere frames, dan kan ik dus niet per pagina de url uitlzen. Onderstaand stukje code werkt prima als je met 1 pagina te maken hebt:
code:
1
2
3
4
5
qstr=document.location.search;
if(qstr.charAt(0)=="?")
{
    qstr=qstr.substring(1,qstr.length);
}

Maar wat gebeurt er als er www.gridlock.nl/index.htm?blue staat? Werkt het dan ook voor de pagina's in de frameset?

Ik kwam er iig niet uit, dus dacht ik aan cookies. Daar heb ik wel wat ervaring mee dus ik weet hoe ze te zetten en uit te lezen etc. Dat zou probleem 1 wel oplossen.

Vervolgens wilde ik, als ik eenmaal de theme weet, aan de hand daarvan een stylesheet linken, bijvoorbeeld blue.css.
Maar dat linken gebeurt tussen de head tags dus daar kan ik geen gebruik maken van een variabele (voor zover ik weet dan).
Hetvolgende idee was om dan 1 css file met twee classes te gebruiken. Maar dan loop ik weer tegen het probleem aan dat ik niet weet hoe ik dat moet implementeren:
code:
1
2
3
var theme = "blue";

<p class=theme>blaat</p>

Nou begrijp ik ook wel dat _dat_ niet gaat werken, maar om nou overal een document.write omheen te moeten zetten lijkt me ook geen nette oplossing.

Nouja, dat heb ik dus geprobeerd. Wat ik nog niet heb geprobeerd is php, omdat ik daar nog nooit mee heb gewerkt. Vandaar mijn vraag of het een uitkomst zou bieden.

De manual had ik al wel gezien ja :)
Glimi schreef op 27 January 2003 @ 11:00:
Om nou hier te gaan vragen hoe je het beste dit kan aanpakken?
Het is immers een kwestie van een cookie zetten en weer uitlezen

Het kan zowel met JavaScript als PHP. Het boeit je niet of de client er dingen aan kan veranderen of kan verbouwen, aangzien het niet kritisch is en hij de keuze toch zelf kan maken (hell, mocht het wel zo zijn, dan zit je al fout met je cookie)

Als ik jou was zou ik dus mooi de boel aanpakken met JavaScript. Ik zie nl. geen reden om speciaal hiervoor PHP op de server te installeren.
Ok, duidelijk. (Ik wil er nog wel ff bij vermelden dat de server al php-enabled is. Dat hoeft dus geen probleem te zijn)
Maar hoe zorg ik er met Javascript dan voor dat de juiste stylesheet of de juiste class wordt gelinkt / gebruikt?

Acties:
  • 0 Henk 'm!

  • Eskimootje
  • Registratie: Maart 2002
  • Laatst online: 08:29
Wat dag je van 2 stylesheets een voor elke theme. Dan hoef je alleen in je headers nog een cookie te implenteren en per pagina een regel php. Lijkt me makkelijker als javascript (dan download je alles en dat kost bandbreedte).

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Mja, volgens mij is het redelijk omslachtig om het in JavaScript te gaan maken.

Als je nou gewoon je index.html verandert in een index.php dan kun je het natuurlijk gewoon zo doen:
index.php?skin=melp
code:
1
2
3
4
5
6
7
8
9
10
11
(...)
<?
if ( !isset ( $_GET [ 'skin' ] ) || !in_array ( $_GET [ 'skin' ] ) ) {
   $skin = 'jedefault-skin';
} else {
   $skin = $_GET [ 'skin' ];
}
?>
<frameset ... >
   <frame src="blaat.php?skin=<?=$skin?>" ... />
(...)

Dat zou iig mijn voorkeur hebben boven allerlei gevogel met javascript... De rest kun je dan idd prima met cookies oplossen:
code:
1
2
3
4
5
6
7
<?
// zet skin in je cookie, als geset in $_GET, en zet waarde in $skin
// anders, als geset in cookie, lees $skin uit je cookie
// anders neem default skin
?>
<link rel="stylesheet" type="text/css" href="skins/<?=$skin?>/style.css" />
etcetera

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • MrEdge_
  • Registratie: April 2000
  • Laatst online: 17-11-2023
drm schreef op 27 January 2003 @ 11:51:
[nohtml]Mja, volgens mij is het redelijk omslachtig om het in JavaScript te gaan maken.

[knip] een stukje code [/knip]
Dit is precies wat ik bedoel, thnx :)
Jammer dat ik nog geen php kennis heb, maar met de manual bij de hand moet ik toch een heel eind gaan komen met dit voorbeeld.

Acties:
  • 0 Henk 'm!

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 02-09 11:02

D2k

ff drm aanvullen
PHP:
1
2
3
} else {
   $skin = $_GET [ 'skin' ];
}


ff nitpicken -> rule nr 1: never trust user input :+
dus die $skin ff door een case halen om te kijken of de skin wel bestaat ;)

Doet iets met Cloud (MS/IBM)


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

D2k:
ff drm aanvullen
PHP:
1
2
3
} else {
   $skin = $_GET [ 'skin' ];
}


ff nitpicken -> rule nr 1: never trust user input :+
dus die $skin ff door een case halen om te kijken of de skin wel bestaat ;)
code:
1
if ( !isset ( $_GET [ 'skin' ] ) || !in_array ( $_GET [ 'skin' ] ) ) {
Mja, beetje verwarrend misschien, maar ik was 1 argument vergeten bij die in_array. moet dus
code:
1
if ( !isset ( $_GET [ 'skin' ] ) || !in_array ( $_GET [ 'skin' ], $valid_skins ) ) {
zijn, o.i.d. :Y)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • MrEdge_
  • Registratie: April 2000
  • Laatst online: 17-11-2023
Ik kick mijn eigen topic maar ff, dan hoef ik geen nieuwe te openen :)

Ik heb nu een skinable site gemaakt maar loop toch wel tegen wat problemen aan waarvan ik niet goed weet hoe ik dat moet oplossen.

Ik heb een index.php en dat is eigenlijk alleen een frameset. Wat ik heb gedaan is zodra index.php wordt geladen eerst checken of er misschien een skin is meegegeven in de addressbar. Maar als je voor het eerst op de site komt zal dat dus niet het geval zijn. Vervolgens check ik of er misschien een cookie aanwezig is en uiteindelijk, als dat allemaal niet is gelukt zet ik een default kleurtje.
In de frameset is dat eenvoudig door te geven aan de andere pagina's. Maar het probleem is nu dat ik (zonder cookies) niet weet hoe ik de kleur centraal kan opslaan zodat elke pagina weet dan $skin == blue ofzo.

Nu lees ik in elke pagina de cookie uit maar dat werkt brak en onbetrouwbaar en heeft als nadeel dat wanneer de user geen cookies accepteert de pagina niet goed wordt weergegeven.
Hoe is dit op een nette manier op te lossen?

Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
ik gebruik zelf voor m'n "skin-variabele" altijd een sessie-variabele. Overigens wordt een session-id (die refereert naar de sessie-data van een specifieke client) vaak ook opgeslagen in een cookie, maar PHP kan die ook zonder gebruik van een session-cookie automatisch via de $_GET doorgeven (middels de session.use_trans_sid env var). Maar dat laatste is niet veiliger dan met session-cookies, omdat clients dan gemakkelijker de session-ids kunnen zien.

[ Voor 4% gewijzigd door Genoil op 17-02-2003 12:55 ]


Acties:
  • 0 Henk 'm!

  • MrEdge_
  • Registratie: April 2000
  • Laatst online: 17-11-2023
Genoil schreef op 17 februari 2003 @ 12:55:
ik gebruik zelf voor m'n "skin-variabele" altijd een sessie-variabele. Overigens wordt een session-id (die refereert naar de sessie-data van een specifieke client) vaak ook opgeslagen in een cookie, maar PHP kan die ook zonder gebruik van een session-cookie automatisch via de $_GET doorgeven (middels de session.use_trans_sid env var). Maar dat laatste is niet veiliger dan met session-cookies, omdat clients dan gemakkelijker de session-ids kunnen zien.
ok, maar ik wil niet van cookies of sessionvariablen afhankelijk zijn aangezien dat tot problemen kan leiden.
Ik heb de logica in de index.php zitten. Is het niet mogelijk om, nadat de cookies en de $_GET zijn gecontroleerd, de uiteindelijke color vast te leggen in 1 centrale variabele die vervolgens in elke pagina op de site bekend is?

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Wat dit betreft zijn cookies of sessions (liever 't laatste, denk ik) toch de beste oplossing. Een alternatief zou via 't ip adres van de gebruikers zijn (REMOTE_ADDR en HTTP_X_FORWARDED_FOR), maar je kan zelf wel bedenken dat dat ook niet foolproof is.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

Verwijderd

MrEdge_ schreef op 17 February 2003 @ 14:37:
[...]

ok, maar ik wil niet van cookies of sessionvariablen afhankelijk zijn aangezien dat tot problemen kan leiden.
Ik heb de logica in de index.php zitten. Is het niet mogelijk om, nadat de cookies en de $_GET zijn gecontroleerd, de uiteindelijke color vast te leggen in 1 centrale variabele die vervolgens in elke pagina op de site bekend is?
T is een beetje omslachtig maar je zou, de keuze van de gebruiker op basis van IP in een database kunnen opslaan en dan vervolgens zijn laatste keuze steeds terug zoeken (Nadeel is wel dat je bij grote websites een heel eind moet terug zoeken op een gegeven moment, maar als je bijvoorbeeld alleen de laatste week/maand ofzo doorzoekt moet t kunnen).

Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
Ik heb zoiets lopend (kijk op www.geemz.tk --> en dan bij instellingen ofzo). Ik doe het zo:

PHP:
1
2
$css = $_SESSION['gz_stylesheet'];
echo "<link rel='stylesheet' href='".$css."' type='text/css' /> ";


Werkt goed :) Je kunt eventueel ook templates gaan gebruiken (kijk maar es op http://smarty.php.net)
Pagina: 1