Template switcher / Manier om bezoekers een waarde aan een variabel toe te kenne
Ik ben vanplan om een template switcher te maken op een bijzondere manier: met php. De bedoeling is dus ook om niet alleen de kleuren maar ook andere plaatjes te krijgen. Ik dacht zelf om een http://josaus.com/index.php?style=[STIJL] te maken maar ik weet niet hoe dat moet. Ik heb hiervoor al verschillende fora bezocht en het gevraagd maar ik heb geen zinvolle antwoorden gehad. Ook heb ik vaak op Google gekeken maar ik kon niks vinden.
Deze scripts heb ik:
---------------------------------------------------------------------------------------
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php //header include
include_once 'template/header.html' ?>
<?php
//styles
include_once 'template/' . $style . '/logo.html';
include_once 'template/' . $style . '/left.html';
include_once 'template/' . $style . '/right.html';
?>
include_once 'template/header.html' ?>
<?php
//styles
include_once 'template/' . $style . '/logo.html';
include_once 'template/' . $style . '/left.html';
include_once 'template/' . $style . '/right.html';
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<?php //header include
include_once 'template/header.html' ?>
<body>
<select name="style_chooser">
<option value="<?php if (selected) $style = blue ?>">Blue</option>
<option value="<?php if (selected) $style = red ?>">Red</option>
<option value="<?php if (selected) $style = green ?>">Green</option>
</select>
<?php
//styles
include_once 'template/' . $style . '/logo.html';
include_once 'template/' . $style . '/left.html';
include_once 'template/' . $style . '/right.html';
?>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<?php //header include
include_once 'template/header.html' ?>
<body>
<select name="style_chooser">
<option value="<?php if (selected) $style = blue ?>">Blue</option>
<option value="<?php if (selected) $style = red ?>">Red</option>
<option value="<?php if (selected) $style = green ?>">Green</option>
</select>
<?php
//styles
include_once 'template/' . $style . '/logo.html';
include_once 'template/' . $style . '/left.html';
include_once 'template/' . $style . '/right.html';
?>
</body>
</html>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<form method="post" action="page1.php">
<select name="style_chooser">
<option value="<?php $style = blue ?>">Blue</option>
<option value="<?php $style = red ?>">Red</option>
<option value="<?php $style = green ?>">Green</option>
</select>
<input type="submit" value="submit" name="Submit" />
</form>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<form method="post" action="page1.php">
<select name="style_chooser">
<option value="<?php $style = blue ?>">Blue</option>
<option value="<?php $style = red ?>">Red</option>
<option value="<?php $style = green ?>">Green</option>
</select>
<input type="submit" value="submit" name="Submit" />
</form>
</body>
</html>
Ik denk dat veel scripts niet echt helpen maar ik heb even geëxperimenteerd.
Josaus
Gewijzigd op 01/01/1970 01:00:00 door Kees van Kempen
Gewijzigd op 01/01/1970 01:00:00 door - Ariën -
Dus, zoiets zou kunnen werken:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
if(isset($_GET['style'])) {
$style = $_GET['style'];
} else {
$style = 'standaard';
}
include_once 'template/' . $style . '/logo.html';
include_once 'template/' . $style . '/left.html';
include_once 'template/' . $style . '/right.html';
echo '
<form method="get">
<select name="style">
<option value="rood">Rood</option>
<option value="geel">Geel</option>
</select>
<input type="submit">
</form>';
?>
if(isset($_GET['style'])) {
$style = $_GET['style'];
} else {
$style = 'standaard';
}
include_once 'template/' . $style . '/logo.html';
include_once 'template/' . $style . '/left.html';
include_once 'template/' . $style . '/right.html';
echo '
<form method="get">
<select name="style">
<option value="rood">Rood</option>
<option value="geel">Geel</option>
</select>
<input type="submit">
</form>';
?>
Probleem is dat dit niet erg veilig is. Die include_once laat je in theorie ieder bestand dat op de webserver staat, of zelfs webpagina's, includen. (In de praktijk gelukkig niet vanwege instellingen en rechten) En het is niet erg handig omdat het geselecteerde thema niet onthouden wordt, en je vrij veel code moet schrijven om nieuwe thema's toe te voegen. Arrays kunnen dat veel gemakkelijker maken:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
// Alle styles die er zijn. Links de naam van de map, rechts de
// naam die je op je site wilt laten zien. Zo kan je bijvoorbeeld
// spaties en speciale tekens gebruiken in de namen (die mogen
// normaal niet voorkomen in mapnamen)
$styles = array(
'rood' => 'Rood',
'groen' => 'Groen',
'orange' => 'Fanta® Orange'
);
// toegevoegd: kijk of de gekozen style wel eentje is die volgens
// de lijst hierboven bestaat.
if(isset($_GET['style']) && isset($styles[$_GET['style']])) {
$style = $_GET['style'];
} else {
$style = 'standaard';
}
include_once 'template/' . $style . '/logo.html';
include_once 'template/' . $style . '/left.html';
include_once 'template/' . $style . '/right.html';
echo '
<form method="get">
<select name="style">';
foreach($styles as $map => $naam) {
if($style == $map) { // als de momenteel actieve style dezelfde is als deze ene in de lijst, dan selecteer hem
$geselecteerd = ' selected="selected"';
} else {
$geselecteerd = '';
}
echo '<option value="'.$map.'"'.$geselecteerd.'>'.$naam.'</option>';
}
echo '
</select>
<input type="submit">
</form>';
?>
// Alle styles die er zijn. Links de naam van de map, rechts de
// naam die je op je site wilt laten zien. Zo kan je bijvoorbeeld
// spaties en speciale tekens gebruiken in de namen (die mogen
// normaal niet voorkomen in mapnamen)
$styles = array(
'rood' => 'Rood',
'groen' => 'Groen',
'orange' => 'Fanta® Orange'
);
// toegevoegd: kijk of de gekozen style wel eentje is die volgens
// de lijst hierboven bestaat.
if(isset($_GET['style']) && isset($styles[$_GET['style']])) {
$style = $_GET['style'];
} else {
$style = 'standaard';
}
include_once 'template/' . $style . '/logo.html';
include_once 'template/' . $style . '/left.html';
include_once 'template/' . $style . '/right.html';
echo '
<form method="get">
<select name="style">';
foreach($styles as $map => $naam) {
if($style == $map) { // als de momenteel actieve style dezelfde is als deze ene in de lijst, dan selecteer hem
$geselecteerd = ' selected="selected"';
} else {
$geselecteerd = '';
}
echo '<option value="'.$map.'"'.$geselecteerd.'>'.$naam.'</option>';
}
echo '
</select>
<input type="submit">
</form>';
?>
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
Dankje!
Alleen weet iemand nog hoe je die http://site.com/index.php?stijl=iets maakt?
Ik snap niet hoe dat moet en ik kan het wel gebruiken!
Nieuwe vraag:
Het gaat fout als ik onchange="document.getElementById('style').submit(); eraan toevoeg. Wat gaat er fout?
Josaus
EDIT: Sorry deze vraag is al geantwoord en nieuwe vraag toegevoegd!:P
Gewijzigd op 01/01/1970 01:00:00 door Kees van Kempen
Het element met de id "style" is geen formulier maar een select input. Geef je formulier een id en voeg die id toe in de onchangecode waar nu "style" staat.
Je kan ook onchange="this.form.submit()"
@ Jelmer, onchange="submit();" is toch ook goed?
Dankje:P