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 131 132 133
| <?php
//{{{ Pseudo catégories pour faire les tests
$secteur = array(
'2' => 'bois',
'4' => 'acier',
'6' => 'charbon',
'3.5' => 'informatique',
'7.1' => 'financier'
);
$surface = array('10','20','30','40','50','100','200');
//On déclare nos fonctions ici
function echo_secteur_for_array($secteur) {
global $surface;
echo '<select name="secteur" id="secteur">
<option value="0">Aucun</option>';
foreach($secteur as $coef => $domaine) {
echo '<option value="'.$coef.'">'.$domaine.'</option>';
}
echo '</select>';
}
function echo_surface_for_secteur($secteur,$coef) {
global $surface;
echo '<select name="surface_prix" id="surface_prix">';
echo '<option>--</option>';
if ($secteur) {
foreach($surface as $s) {
echo '<option value="'. $s .'">'. $s .'m² => '. ($s * $coef) .' pk </option>';
}
}
echo '</select>';
}
function echo_personne_for_surface($surface) {
echo '<select name="personnes" id="personnes">';
echo '<option>--</option>';
if ($surface) {
foreach(range(1, 0.8 * $surface) as $p) {
echo '<option value="'.$p.'">'. $p .'</option>';
}
}
echo '</select>';
}
//On récupère l'action, si y en a pas ben on renvoie une page normale
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'default';
$surface_prix = isset($_REQUEST['surface_prix']) && is_numeric($_REQUEST['surface_prix']) ? $_REQUEST['surface_prix'] : null;
switch($action) {
case 'secteur':
//Les secteurs
echo_secteur_for_array($secteur);
break;
case 'surface_prix':
//L'utilisateur veut un selectbox de surface/ prix en fonction du secteur
//qu'il vient de selectionner
echo '<select name="surface_prix" id="surface_prix"><option>--</option>';
if (isset($prix[$_REQUEST['secteur']])) {
echo_surface_for_secteur($prix[$_REQUEST['secteur']]);
}
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['secteur'])
&& isset($_REQUEST['surface_prix'])
&& isset($personnes[$_REQUEST['secteur']])
&& isset($personnes[$_REQUEST['secteur']][$_REQUEST['surface_prix']]))
{
echo_options($personnes[$_REQUEST['secteur']][$_REQUEST['surface_prix']]);
}
echo '</select>';
break;
default:
?>
<html>
<head>
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript">
//Pour éviter le copier coller
function register_prix() {
Event.observe($('surface_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($('secteur'), 'change', function() {
//On va perdre le selectbox de prix, donc on enleve les
//evenements pour éviter les eventuels memory leaks
Event.stopObserving($('surface_prix'), 'change');
//Une petite requete pour récupérer un nouveau selectbox de prix
new Ajax.Updater('les_prix', '?action=surface_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>
<span id="les_secteurs"><?php echo echo_secteur_for_array($secteur); ?></span>
<span id="les_prix"><select name="surface_prix" id="surface_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