....
en fait j'utilisais pas les bonnes choses. A l'image de la classe input dans form.php j'ai créé un classe pour les liste déroulante.
Maintenant ça fonctionne mieux (en tout cas pour les liste déroulante). C'est très certainement à améliorer qu'en pensez vous ?
public function select($name,$label,$item = array()){
$error = false;
$classError = '';
if(isset($this->errors$name])){
$error = $this->errors$name];
$classError = ' alert-error';
}
if(!isset($this->controller->request->data)){
if(isset($item'default'])){
$value = $item'default'];
}else{
$value = '';
}
}else{
foreach($this->controller->request->data as $k=>$v){
if($this->controller->request->data$k]->name == $name){
$value = $this->controller->request->data$k]->value;
}
}
}
$html = '<div class="clearfix'.$classError.'">';
$html .= $label.'<br />';
$html .= '<select id="select'.$name.'" name="'.$name.'">';
asort($item);
$item = array_unique($item);
if($value != ''){
if($value == 0){
$html .= '<option value="0" selected="selected">Désactivé</option>';
}else{
$html .= '<option value="'.$value.'" selected="selected">'.$value.'</option>';
}
}
foreach($item as $k=>$v){
if(isset($item'default']) && $v != $item'default']){
if($v == 0){
$html .= '<option value="0">Désactivé</option>';
}else{
$html .= '<option value="'.$v.'">'.$v.'</option>';
}
}
}
$html .= '</select>';
if($error){
$html .= '<span class="help-inline">'.$error.'</span>';
}
$html .= '</div>';
return $html;
}
appelée comme ceci :
<?php echo $this->Form->select('name','label',array('0'=>'0','1'=>'10','2'=>'20','3'=>'30','4'=>'120','default'=>'60')); ?>