Construction Select template Php

Eléphanteau du PHP | 39 Messages

03 janv. 2016, 21:04

Bonjour a tous et bonne année 2016 !!!
J ai encore besoin de votre aide svp.
Il s agit d une template php qui construit un select avec 3 options correspondant aux années 2015, 2016 et 2017. J'ai donc :

<select name="year" style="margin: 0px 13px;" id="year">
<option {if $smarty.get.y == 'Y'|date - 1} selected {/if} value="{'Y'|date - 1}">{'Y'|date - 1} </option>
<option {if $smarty.get.y == 'Y'|date} selected {/if} value="{'Y'|date}">{'Y'|date} </option>
<option {if $smarty.get.y == 'Y'|date + 1} selected {/if} value="{'Y'|date + 1}">{'Y'|date + 1} </option>
</select>

Mon problème c est que je souhaite avoir l année 2016 qui vient se positionner par défaut lorsque l'utilisateur arrive sur la page. Mais je n'obtiens pas cela, En fait si je veux l'année 2016 qui s'affiche par défaut il faut que je mette l'option correspondante en premier soit :
<select name="year" style="margin: 0px 13px;" id="year">
<option {if $smarty.get.y == 'Y'|date} selected {/if} value="{'Y'|date}">{'Y'|date} </option>
<option {if $smarty.get.y == 'Y'|date - 1} selected {/if} value="{'Y'|date - 1}">{'Y'|date - 1} </option>
<option {if $smarty.get.y == 'Y'|date + 1} selected {/if} value="{'Y'|date + 1}">{'Y'|date + 1} </option>
</select>

or, quand je fais ca j'obtiens les années dans le désordre:2016,2015,2017. C'est pas trés joli.

Avez-vous une solution pour remédier a ce problème ?
Merci de votre aide.
Sandy

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

03 janv. 2016, 21:17

Bonjour,

Regarde le code HTML généré par ton template, à mon avis tu as des selected en trop ;)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 39 Messages

03 janv. 2016, 22:03

Salut Arthur,
En effet j'ai ceci :
<select name="year" style="margin: 0px 13px;" id="year">
<option <?php if ($_GET['y']==date('Y')-1){?> selected <?php }?> value="<?php echo date('Y')-1;?>
"><?php echo date('Y')-1;?>
</option>
<option <?php if ($_GET['y']==date('Y')){?> selected <?php }?> value="<?php echo date('Y');?>
"><?php echo date('Y');?>
</option>
<option <?php if ($_GET['y']==date('Y')+1){?> selected <?php }?> value="<?php echo date('Y')+1;?>
"><?php echo date('Y')+1;?>
</option>
</select>
mais si dans le tpl je mets :
<select name="year" style="margin: 0px 13px;" id="year">
<option {if $smarty.get.y == 'Y'|date - 1} {/if} value="{'Y'|date - 1}">{'Y'|date - 1} </option>
<option {if $smarty.get.y == 'Y'|date} selected {/if} value="{'Y'|date}">{'Y'|date} </option>
<option {if $smarty.get.y == 'Y'|date + 1} {/if} value="{'Y'|date + 1}">{'Y'|date + 1} </option>
</select>

dans le php généré j'obtiens :

<select name="year" style="margin: 0px 13px;" id="year">
<option <?php if ($_GET['y']==date('Y')-1){?> <?php }?> value="<?php echo date('Y')-1;?>
"><?php echo date('Y')-1;?>
</option>
<option <?php if ($_GET['y']==date('Y')){?> selected <?php }?> value="<?php echo date('Y');?>
"><?php echo date('Y');?>
</option>
<option <?php if ($_GET['y']==date('Y')+1){?> <?php }?> value="<?php echo date('Y')+1;?>
"><?php echo date('Y')+1;?>
</option>
</select>
Mais l'année est toujours positionnée sur 2015.
As-tu une idée ?

Mammouth du PHP | 2703 Messages

03 janv. 2016, 22:12

selected="selected" au lieu de selected

Eléphanteau du PHP | 39 Messages

03 janv. 2016, 22:27

Salut or1
alors j'ai dans template :
<select name="year" style="margin: 0px 13px;" id="year">
<option {if $smarty.get.y == 'Y'|date - 1} {/if} value="{'Y'|date - 1}">{'Y'|date - 1} </option>
<option {if $smarty.get.y == 'Y'|date} selected="selected" {/if} value="{'Y'|date}">{'Y'|date} </option>
<option {if $smarty.get.y == 'Y'|date + 1} {/if} value="{'Y'|date + 1}">{'Y'|date + 1} </option>
</select>

j'obtiens en genere :
<select name="year" style="margin: 0px 13px;" id="year">
<option <?php if ($_GET['y']==date('Y')-1){?> <?php }?> value="<?php echo date('Y')-1;?>
"><?php echo date('Y')-1;?>
</option>
<option <?php if ($_GET['y']==date('Y')){?> selected="selected" <?php }?> value="<?php echo date('Y');?>
"><?php echo date('Y');?>
</option>
<option <?php if ($_GET['y']==date('Y')+1){?> <?php }?> value="<?php echo date('Y')+1;?>
"><?php echo date('Y')+1;?>
</option>
</select>
Et j'ai toujours 2015 affichée en premier par défaut.
Une autre suggestion svp ?

Mammouth du PHP | 2703 Messages

03 janv. 2016, 22:30

quel est le code html généré ?

Eléphanteau du PHP | 39 Messages

03 janv. 2016, 22:38

je te l'ai mis c'est ca :
<select name="year" style="margin: 0px 13px;" id="year">
<option <?php if ($_GET['y']==date('Y')-1){?> <?php }?> value="<?php echo date('Y')-1;?>
"><?php echo date('Y')-1;?>
</option>
<option <?php if ($_GET['y']==date('Y')){?> selected="selected" <?php }?> value="<?php echo date('Y');?>
"><?php echo date('Y');?>
</option>
<option <?php if ($_GET['y']==date('Y')+1){?> <?php }?> value="<?php echo date('Y')+1;?>
"><?php echo date('Y')+1;?>
</option>
</select>

Mammouth du PHP | 2703 Messages

03 janv. 2016, 22:42

quel est le code html généré ? pas le php

Eléphanteau du PHP | 39 Messages

04 janv. 2016, 07:43

:oops: excuse moi mais je ne cpmprends pas. je suis debutante. pour moi un fichier tpl va generer un fichier php qui va me donner ma page html. plus que ca je ne sais pas. mais je serai ravie que l'on m'explique.

Mammouth du PHP | 688 Messages

04 janv. 2016, 10:32

c'est donc le code html visible dans le navigateur qu'il faut vérifier.

Mammouth du PHP | 881 Messages

04 janv. 2016, 17:05

Ce que l'on te demande ici, c'est de
i) lancer ton navigateur
ii) afficher la page qui contient ton code
iii) faire afficher par le navigateur le html ( chrome utilise Ctrl-U pour faire cela, iExplore demande qu'on aille dans le menu « Afficher - Montrer le code source » )
iv) c'est ce code qu'il te faut étudier

Combien de fois apparaît la commande "selected" dans tes options ?

Voici un code tout-cuit qui peut t'aider (non à apprendre, je m'en excuse, mais à avancer dans ton projet). C'est du code dont tu n'auras pas souci au cours des années à venir:

Code : Tout sélectionner

<select name="year" style="margin: 0px 13px;" id="year"> <?php for ($a=2013; $a<date("Y"); $a++) { echo '<option value="'.$a.'"'; if ($a == date("Y")) { echo ' selected="selected" '; } echo '>'.$a.'</option>'; } ?> </select>
Soyez artisans de paix

Eléphanteau du PHP | 39 Messages

04 janv. 2016, 23:32

voila j'ai ca :
<select name="year" style="margin: 0px 13px;" id="year">
<option value="2016">2016 </option>
<option value="2017">2017 </option>
<option value="2015">2015 </option>

</select>
selected n'apparait aucune fois.

Eléphanteau du PHP | 39 Messages

04 janv. 2016, 23:39

Merci Patriboom mais ca ne marche pas j'obtiens la zone de l'année vide. et puis je veux que mon code marche chaque année avec toujours l'année en cours affichée par défaut, l'année précédente qui la précède a l'affichage et l'année suivante qui la suit ;)
donc pas de date en dur comme dans ton exemple.

Mammouth du PHP | 881 Messages

04 janv. 2016, 23:52

Et bien là, c'est simple.
Il suffit de dire à PHP ce que tu viens d'écrire dans ton texte. « Je veux l'an précédant et l'an suivant » comme ceci

Code : Tout sélectionner

<select name="year" style="margin: 0px 13px;" id="year"> <?php echo '<option value="'.(date("Y")-1).'">'.(date("Y")-1).'</option>'; echo '<option value="'.date("Y").'" selected="selected">'.date("Y").'</option>'; echo '<option value="'.(date("Y")+1).'">'.(date("Y")+1).'</option>'; ?> </select>
Soyez artisans de paix