2010-01-24 5 views
0

Eh bien, je continue d'améliorer mes classes de génération de formulaire et je suis bloqué en retournant tous les éléments du pays dans le tableau country_data. Seuls les deux premiers éléments s'affichent dans les options de liste déroulante.foreach en classe: Je ne peux pas retourner tous les ele en arr

est ici classe menu déroulant:

 
//drop down form class 
class DropDown 
{ 
    function __construct ($form, $field_label, $field_name, $field_desc, $dropdown_data, $locale){ 
    $this->form = $form; 
    $this->field_label = $field_label; 
    $this->field_name = $field_name; 
    $this->field_desc = $field_desc; 
    $this->dropdown_data = $dropdown_data; 
    $this->locale = $locale; 
    } 

    function getNotRequiredData(){ 
    global $notReqArry; 
    return $notReqArry[$this->locale]; 
    } 

    function getValue(){ 
    return $_POST[$this->field_name]; 
    } 

    function option(){ 
    foreach ($this->dropdown_data as $key=>$value){ 
     return $options = sprintf('%s',$key,$value); 
    }; 
    } 
    function dropdown(){ 
    return $select_start = "field_name\">$this->field_desc".$this->option().""; 
    } 

    function getLabel(){ 
    $non_req = $this->getNotRequiredData(); 
    $req = in_array($this->field_name, $non_req) ? '' : '*'; 
    return $this->field_label ? $req . $this->field_label : ''; 
    } 

    function __toString(){ 
    $id = $this->field_name; 
    $label = $this->getLabel(); 
    $field = $this->dropdown(); 
    return 'field_name.'">'.$label.''.$field.''; 
    } 
} 

Et j'utiliser la fonction supplémentaire pour des options supplémentaires:

 
function generateForm ($lang,$country_list){ 

    switch($lang) 
    { 
    case 'en-US': 
     //create EN web form 
     echo $countryField = new DropDown ($form, 'Country', 'form_country', '--Select Country--', $country_list, 'en-US'); 
    break; 
    case 'fr-FR': 
     //create FR web form 
    break; 
    case 'de-DE': 
     //create DE web form 
    break; 
    case 'ja-JP': 
     //create JA web form 
    break; 
    default: 
     //create default web form 
     print('foooo'); 
    }; 
} 

Et j'appelle le plaisir generateForm en bas de page.

 
$lang='en-US'; 
echo generateForm ($lang,$country_list); 

A la question précédente, un expert a mentionné la touche $ et la valeur de $ dans le foreach sont des objets pas, mais je ne comprends pas ce que je dois plus logique ici. Ouais, je suis vraiment nouveau à PHP et j'ai juste une petite expérience sur AS. J'ai besoin d'aide.

Merci.

+3

Contractions comme "ele" et "arr" dans le discours décontracté rendent beaucoup plus douloureux de comprendre de quoi vous parlez. Est-ce vraiment si difficile de taper le 'ay' supplémentaire? –

+0

Désolé, j'ai résolu cela. ;-) – chris

+1

Assurez-vous d'accepter la bonne réponse! = D –

Répondre

3

Votre fonction d'options essaie de parcourir toutes les options disponibles, mais retourne toujours la première. Employez ceci à la place:

function options(){ 
    $options = ''; 
    foreach ($this->dropdown_data as $key=>$value){ 
    $options .= sprintf('<option value="%s">%s</option>',$key,$value); 
    }; 
    return $options; 
} 
+0

Merci beaucoup Cryo, ça a réglé le problème ci-dessus. ;-) – chris

+0

Content de l'entendre chris. Si vous pouviez cliquer sur la case à cocher à côté de ma réponse pour la marquer comme correcte, cela permettrait à tous les autres de savoir que votre question a été répondue (et de me donner un petit bonus de représentant). – nortron

2

C'est une surprise que vous ayez deux éléments dans votre liste déroulante, selon votre code, vous devriez en avoir un seul. depuis votre fonction

function options(){ 
foreach ($this->dropdown_data as $key=>$value){ 
    return $options = sprintf('%s',$key,$value); 
}; } 

Renvoie uniquement la première option à sortir de la baie et quitte le cycle. Rassemblez tous les éléments ensemble et revenez en groupe ou appelez l'extracteur de l'option depuis un cycle externe et cela fonctionnera.

Questions connexes