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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
| <?php
//{{{ Pseudo catégories pour faire les tests
$surfaces = array(
'25' => '25 m2',
'50' => '50 m2'
);
$prix = array(
'25' => array(
'100' => '100 euros',
'200' => '200 euros'
),
'50' => array(
'500' => '500 euros',
'600' => '600 euros'
)
);
$personnes = array(
'25' => array(
'100' => array(
'2' => '2 pers',
'4' => '4 pers'
),
'200' => array(
'6' => '6 pers',
'7' => '7 pers'
)
),
'50' => array(
'500' => array(
'2' => '2 pers',
'3' => '3 pers'
),
'600' => array(
'3' => '3 pers',
'5' => '5 pers'
)
)
);
//}}}
//Pour éviter le copier coller
function echo_options($tab) {
foreach($tab as $key => $value) {
echo '<option value="'. $key .'">'. $value .'</option>';
}
}
//On récupère l'action, si y en a pas ben on renvoie une page normale
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'default';
switch($action) {
case 'prix':
//L'utilisateur veut un selectbox de prix en fonction de la surface
//qu'il vient de selectionner
echo '<select name="prix" id="prix"><option>--</option>';
if (isset($_REQUEST['surface']) && isset($prix[$_REQUEST['surface']])) {
echo_options($prix[$_REQUEST['surface']]);
}
echo '</select>';
break;
case 'personnes':
//L'utilisateur veut un selectbox de prix en fonction de la surface
// et du prix qu'il vient de selectionner
echo '<select name="personnes" id="personnes"><option>--</option>';
if (isset($_REQUEST['surface'])
&& isset($_REQUEST['prix'])
&& isset($personnes[$_REQUEST['surface']])
&& isset($personnes[$_REQUEST['surface']][$_REQUEST['prix']]))
{
echo_options($personnes[$_REQUEST['surface']][$_REQUEST['prix']]);
}
echo '</select>';
break;
default:
?>
<html>
<head>
<script type="text/javascript" src="http://script.aculo.us/prototype.js"></script>
<script type="text/javascript">
//Pour éviter le copier coller
function register_prix() {
Event.observe($('prix'), 'change', function() {
//Une petite requete pour récupérer un nouveau selectbox de personnes
new Ajax.Updater('les_personnes', '?action=personnes', {
parameters: Form.serialize('mon_form')
});
});
}
Event.observe(window, 'load', function() {
Event.observe($('surface'), 'change', function() {
//On va perdre le selectbox de prix, donc on enleve les
//evenements pour éviter les eventuels memory leaks
Event.stopObserving($('prix'), 'change');
//Une petite requete pour récupérer un nouveau selectbox de prix
new Ajax.Updater('les_prix', '?action=prix', {
parameters: Form.serialize('mon_form'),
onComplete: function() {
//Il faut écouter le onchange du nouveau selectbox
register_prix();
}
});
//Sait-on jamais, peut-etre que personnes est influencé
//par surface...
new Ajax.Updater('les_personnes', '?action=personnes', {
parameters: Form.serialize('mon_form')
});
});
register_prix();
});
</script>
</head>
<body>
<form action="" method="POST" id="mon_form">
<div>
<select name="surface" id="surface"><option>--</option><?php echo echo_options($surfaces); ?></select>
<span id="les_prix"><select name="prix" id="prix"><option>--</option></select></span>
<span id="les_personnes"><select name="personnes" id="personnes"><option>--</option></select></span>
</div>
</form>
</body>
</html>
<?php
break;
}
?> |
Partager