/** * Muuten kuten luo_pudotusvalikko, mutta tähän voi antaa mielivaltaisen * määrän parametreja uudella tekniikalla. Muutenkin toteutus uusien * html-metodien pohjalta. * <p>Palauttaa pudotusvalikon html-koodin. Asettaa valituksi parametrina annetun * arvon (tai sitä vastaavan nimen).</p> * <p>Arvot ja nimet -muuttujien tulee olla yhtä monta elementtiä sisältäviä * taulukoita (array). Ellei näin ole, palautetaan virheviesti (string).</p> * <p>Pudotusvalikon otsikko määritellään viimeisellä parametrilla ($otsikko).</p> * * Otsikko tulee label for -elementtinä. * * @param array $arvot option value -arvot * @param array $nimet option-tagien väliin asetettava määre, eli tämä näkyy * käyttäjälle pudotusvalikon vaihtoehtona. * @param type $select_maaritteet Maarite-luokan olioita taulukossa. * Täällä pitää olla name-arvo, jos halutaan kuljettaa arvot http:n kautta * (ilman AJAX-tekniikkaa). * @param type $option_maaritteet Maarite-luokan olioita taulukossa. Huomaa, * että nämä tulevat samanlaisina kaikille option-elementeille. Voi olla * tyhjä. Metodissa varmistetaan, että kysymyksessä on taulukko. * @param int $oletusvalinta_arvo (oletus)vaihtoehtoa vastaava arvo. Jos tämä * on tyhjä, muuten epäkelpo tai alle 0, näytetään ensimmäinen vaihtoehto. * @param string $otsikko Pudotusvalikon eteen kirjoitettava otsikko/kuvaus. * Ellei tarvetta, kannattaa antaa tyhjä merkkijono. Muuten otsikko * sullotaan label-tagien sisään ja se yhdistetään valikon id:n kanssa. * @return string Palauttaa pudotusvalikon html-koodin. */ public static function luo_pudotusvalikko_uusi($arvot, $nimet, $select_maaritteet, $option_maaritteet, $oletusvalinta_arvo, $otsikko) { $option_html = ""; if (!is_array($option_maaritteet)) { $option_maaritteet = array(); } // Otsikon muokkaus: if (!empty($otsikko)) { // Jotta label-elementti voidaan kiinnittää select-elementtiin, // tarvitaan tietää sen id:n arvo. Ellei sellaista löydy, // luodaan sellainen (pitäisi olla yksilöllinen). $id = Attr::etsi_id($select_maaritteet); if ($id === Attr::$EI_LOYTYNYT) { // Arvotaan luku väliltä 100000-1000000 $id = rand(100000, 1000000); // Lisätään id taulukkoon: Attr::lisaa_maarite(new Attr("id", $id, false), $select_maaritteet); } $otsikko = Html::luo_label_for($id, $otsikko . ": ", array()); } if (empty($arvot)) { $valikkohtml = $otsikko . Html::luo_select($option_html, array()); } else { if (is_array($arvot) && is_array($nimet) && sizeof($arvot) == sizeof($nimet)) { // Varmistetaan että oletusvalinta määritelty. Ellei, // asetetaan valituksi ensimmäinen taulukon alkio. if (!isset($oletusvalinta_arvo)) { $oletusvalinta_arvo = $arvot[0]; } // Luodaan option-elementti kustakin arvosta: for ($i = 0; $i < sizeof($arvot); $i++) { // Lisätään value-määrite Attr::lisaa_maarite(Attr::value($arvot[$i]), $option_maaritteet); // Jos oletusvalinta täsmää: if ($oletusvalinta_arvo == $arvot[$i]) { // Lisätään selected-määrite optionmääritteisiin, mutta // eri taulukkoon, ettei määrite tule kaikkiin kohtiin! $selected_maaritteet = array_merge($option_maaritteet, array(Attr::selected())); $option_html .= Html::luo_option($nimet[$i], $selected_maaritteet); } else { $option_html .= Html::luo_option($nimet[$i], $option_maaritteet); } } $valikkohtml = $otsikko . Html::luo_select($option_html, $select_maaritteet); } else { $valikkohtml = "Virhe parametreissa!\n (php_yleismetodit.luo_pudotusvalikko_uusi)"; } } return $valikkohtml; }