예제 #1
0
 /**
  * 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;
 }