Template switcher / Manier om bezoekers een waarde aan een variabel toe te kenne

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kees van Kempen

Kees van Kempen

02/11/2009 16:42:00
Quote Anchor link
Hallo,
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)
PHP script in nieuw venster Selecteer het PHP script
1
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';
?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>


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
 
PHP hulp

PHP hulp

24/11/2024 05:28:43
 
- Ariën  -
Beheerder

- Ariën -

02/11/2009 16:44:00
Quote Anchor link
zet het geheel eens tussen [code-] en [/code-] tags. (zonder de streepjes). Dan is het geheel beter leesbaar.
Gewijzigd op 01/01/1970 01:00:00 door - Ariën -
 
Jelmer -

Jelmer -

02/11/2009 17:53:00
Quote Anchor link
Alle waarden die je via een form verstuurt komen in PHP binnen in de $_GET of $_POST array (afhankelijk van de waarde van je form method-attribuut) PHP genereert alleen de HTML, direct de waarde uitlezen uit een select-element kan dus niet. Voor wat PHP weet staat er alleen wat code, het interpreteert deze niet.

Dus, zoiets zou kunnen werken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>'
;
?>

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>'
;
?>
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Kees van Kempen

Kees van Kempen

03/11/2009 20:43:00
Quote Anchor link
Ik zal kijken of ik het snap!
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
 
Lauren Zonneveld

Lauren Zonneveld

03/11/2009 21:27:00
Quote Anchor link
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.
 
Jelmer -

Jelmer -

04/11/2009 09:42:00
Quote Anchor link
Je kan ook onchange="this.form.submit()"
 
Jaron T

Jaron T

04/11/2009 10:32:00
Quote Anchor link
@ Jelmer, onchange="submit();" is toch ook goed?
 
Kees van Kempen

Kees van Kempen

04/11/2009 13:46:00
Quote Anchor link
Dankje:P
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.