Fonction qui change none/block dans une balise DIV

Eléphanteau du PHP | 49 Messages

19 août 2011, 20:31

Bonjour,

Je réalise un planning annuel en html, avec du js et du php.
Grâce à un select on sélectionne le mois et il s’affiche dans une balise DIV grâce au JS.
Voici le code du JS :

Code : Tout sélectionner

function liste_lsb(sel) { var opt=sel.getElementsByTagName("option" ); for (var i=0; i<opt.length; i++) { var x=document.getElementById(opt[i].value); if (x) x.style.display="none"; } var cat = document.getElementById(sel.value); if (cat) cat.style.display="block"; }
Voici le code du select :

Code : Tout sélectionner

<select onchange="liste_lsb(this)> <option value="">Selectionner...</option> <option value="1">Janvier</option> <option value="2">Fevrier</option> <option value="3">Mars</option> <option value="4">Avril</option> <option value="5">Mai</option> <option value="6">Juin</option> <option value="7">Juillet</option> <option value="8">Aout</option> <option value="9">Septembre</option> <option value="10">Octobre</option> <option value="11">Novembre</option> <option value="12">Decembre</option> </select>
Et le code des div :

Code : Tout sélectionner

<div id="1" style="display:none"><?php janvier(); ?></div> <div id="2" style="display:none"><?php fevrier(); ?></div> <div id="3" style="display:none"><?php mars(); ?></div> <div id="4" style="display:none"><?php avril(); ?></div> <div id="5" style="display:none"><?php mai(); ?></div> <div id="6" style="display:none"><?php juin(); ?></div> <div id="7" style="display:none"><?php juillet(); ?></div> <div id="8" style="display:block"><?php aout(); ?></div> <div id="9" style="display:none"><?php septembre(); ?></div> <div id="10" style="display:none"><?php octobre(); ?></div> <div id="11" style="display:none"><?php novembre(); ?></div> <div id="12" style="display:none"><?php decembre(); ?></div>
Voici ma question :

Tout les mois je dois changer le « display :none » par « block » pour que le mois concerné soit visible à l’écran, peut-on intégrer du code php pour changer automatiquement none par block à chaque changement de mois.

J’en suis à bidouiller, je dis bien bidouiller, ce code ci-dessous qui fonctionne…
Mais pas en fonction du mois … hélas

Code : Tout sélectionner

<?php $mois =array (1=>"jANVIER","FEVRIER","MARS","AVRIL","MAI","JUIN","JUILLET","AOUT","SEPTEMBRE","OCTOBRE","NOVEMBRE","DECEMBRE"); $choix=$mois[date('n')]; if($mois == $choix) { function none_block() { echo "block"; } } else { function none_block() { echo "none"; } } none_block(); ?>
Je pense intégrer le code dans chaque balise DIV comme ça :

Code : Tout sélectionner

<div id="1" style="display:<?php //ici le code ?>"><?php janvier(); ?></div>
Pour l’instant ma réflexion en est là !
Comment intégrer le mois en fonction de chaque div ?

Peut-on m’expliquer en langage débutant le comment du pourquoi …

Bien cordialement

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 août 2011, 00:41

salut,

Je ne comprend pas tes fonctions par mois (janvier(), février() etc) mais bon j'ai corrigé ton code en conséquence.
- il ne faut définir la fonction en fonction d'un paramètre mais la fonction prend un paramètre qui va fournir la valeur que tu souhaite et ainsi définir une seul fonction utilisée plusieurs fois ;)
- j'ai utilisé une boucle for pour afficher les mois (parce que ben j'suis fainéant et que la ça aide ;) )
<?php
// on définit la fonction qui prend en paramètre le N° du mois que l'on affiche
function none_block($choix) {
	if(date('n') == $choix){ // on compare le N) au mois courant
		return "block";
	}
	else{
		return "none";
	}
}
// définition d'une fonction d'un mois, le moi d'aout parce que ben c'est maintenant ;)
function août() {
	echo 'un moi perso'; // message bidon je sais pas ce que tu en fait
}
// définition d'un tableau pour traduction N° => moi en français
$mois = array(1=>'janvier','février','mars','avril','mai','juin','juillet','août','septembre','octobre','novembre','décembre');
// boucle for qui va faire 12 itérations afin d'afficher le message dedans
for ($i=1;$i<=12;$i++) {
// A chaque tour j'affiche le div et utilise la fonction none_block() pour savoir s'il faut ou non l'utiliser
	echo '<div id="'.$i.'" style="display:'.none_block($i).'">'; 
	if (function_exists($mois[$i])) { // ce test permet d'éviter les soucis quand la fonction n'est pas définie (ce qui est le cas ici pour 11)
		$mois[$i]();// appel dynamique d'une fonction
	}
	else{
		echo $mois[$i]; j'affiche le nom du mois si la fonction existe pas (pour pas faire crade). 
	}
	echo '</div>';
}
?>
A l'affichage on obtient.
[quote]
<div id="1" style="display:none">janvier</div><div id="2" style="display:none">février</div><div id="3" style="display:none">mars</div><div id="4" style="display:none">avril</div><div id="5" style="display:none">mai</div><div id="6" style="display:none">juin</div><div id="7" style="display:none">juillet</div><div id="8" style="display:block">un moi perso</div><div id="9" style="display:none">septembre</div><div id="10" style="display:none">octobre</div><div id="11" style="display:none">novembre</div><div id="12" style="display:none">décembre</div>[quote]

bon la fonction est pas super dynamique car elle ne fonctionne que pour le mois courant mais si tu "navigue" ça fonctionne plus. il te faut donc passer en paramètre le moi que tu affiche (le mois visible) et le mois actuel dans la boucle for (le $i).
par exemple function none_block($afficher,$courant) {} le principe reste le même ;)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 49 Messages

20 août 2011, 21:23

Bonjour Moogli,

Merci de prendre le temps de m'aiguiller sur ce coup... :D
Je souhaiterais obtenir ceci dans le code source de ma page :

Code : Tout sélectionner

<div id="1" style="display:none"><?php janvier(); ?></div> <div id="2" style="display:none"><?php fevrier(); ?></div> <div id="3" style="display:none"><?php mars(); ?></div> <div id="4" style="display:none"><?php avril(); ?></div> <div id="5" style="display:none"><?php mai(); ?></div> <div id="6" style="display:none"><?php juin(); ?></div> <div id="7" style="display:none"><?php juillet(); ?></div> <div id="8" style="display:block"><?php aout(); ?></div> <div id="9" style="display:none"><?php septembre(); ?></div> <div id="10" style="display:none"><?php octobre(); ?></div> <div id="11" style="display:none"><?php novembre(); ?></div> <div id="12" style="display:none"><?php decembre(); ?></div>
Merci pour ton code =D> , je l'ai corrigé à ma façon comme ceci et j'obtiens ce que je voulais....enfin :!:

Code : Tout sélectionner

<?php $mois = array(1=>'janvier','fevrier','mars','avril','mai','juin','juillet','aout','septembre','octobre','novembre','decembre'); function none_block() { } for ($i=1;$i<=12;$i++) { if (function_exists($mois[$i])) { $mois[$i](); echo '<div id="'.$i.'" style="display:'.none_block($i).'">'; } else{ echo '<div id="'.$i.'" style="display:none"><?php '; echo $mois[$i]; echo '(); ?></div>'; } } ?>
Sauf que ..... :cry: le mois concerné pour chaque mois et bien c'est écrit none après display ......
Alors que je souhaiterais que block change chaque mois !

Voilà ce que j'obtiens dans le code source avec ton code modifié...on peut remarquer que le mois d'aout et bien que ... style="display:none" :

Code : Tout sélectionner

<div id="1" style="display:none"><?php janvier(); ?></div> <div id="2" style="display:none"><?php fevrier(); ?></div> <div id="3" style="display:none"><?php mars(); ?></div> <div id="4" style="display:none"><?php avril(); ?></div> <div id="5" style="display:none"><?php mai(); ?></div> <div id="6" style="display:none"><?php juin(); ?></div> <div id="7" style="display:none"><?php juillet(); ?></div> <div id="8" style="display:none"><?php aout(); ?></div> <div id="9" style="display:none"><?php septembre(); ?></div> <div id="10" style="display:none"><?php octobre(); ?></div> <div id="11" style="display:none"><?php novembre(); ?></div> <div id="12" style="display:none"><?php decembre(); ?></div>
Comment faire apparaitre .... à chaque changement de mois :
Par exemple pour le mois d’août :
<div id="8" style="display:block"><?php aout(); ?></div>
Et que le mois d’après l’id 8 revient à none et quand même temps l’id 9 change à block ?

Merci pour le coup de pouce..

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

20 août 2011, 23:13

bon la fonction est pas super dynamique car elle ne fonctionne que pour le mois courant mais si tu "navigue" ça fonctionne plus. il te faut donc passer en paramètre le moi que tu affiche (le mois visible) et le mois actuel dans la boucle for (le $i).
par exemple function none_block($afficher,$courant) {} le principe reste le même ;)

@+
quand au code que je t'ai fournit il est fonctionnel. Le mois qui sera afficher en "block" est fixé (enfin c'est le mois de la date serveur) a toi que modifier la fonction en conséquence :)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 49 Messages

22 août 2011, 11:19

Bonjour Moogli,

Merci, merci, merci =D>
Je suis un idiot..... #-o
Ton code fonctionne parfaitement, je me suis enbringué dans un truc de d....
Voici ton code, c'est :priere:

Code : Tout sélectionner

<?php function none_block($choix) { if(date('n') == $choix){ return "block"; } else{ return "none"; } } function août() { echo ''; } $mois = array(1=>'janvier','fevrier','mars','avril','mai','juin','juillet','aout','septembre','octobre','novembre','decembre'); for ($i=1;$i<=12;$i++) { echo '<div id="'.$i.'" style="display:'.none_block($i).'"> '; if (function_exists($mois[$i])) { $mois[$i](); } else{ echo $mois[$i]; } echo '</div>'; } ?>
Merci beaucoup...