public static function createSelectBox(array $items, array $optionAttrs = NULL, $selected = NULL)
{
if ($selected !== NULL) {
$optionAttrs['selected?'] = $selected;
}
list($optionAttrs, $optionTag) = self::prepareAttrs($optionAttrs, 'option');
$option = Html::el();
$res = $tmp = '';
foreach ($items as $group => $subitems) {
if (is_array($subitems)) {
$res .= Html::el('optgroup')->label($group)->startTag();
$tmp = '</optgroup>';
} else {
$subitems = [$group => $subitems];
}
foreach ($subitems as $value => $caption) {
$option->value = $value;
foreach ($optionAttrs as $k => $v) {
$option->attrs[$k] = isset($v[$value]) ? $v[$value] : NULL;
}
if ($caption instanceof Html) {
$caption = clone $caption;
$res .= $caption->setName('option')->addAttributes($option->attrs);
} else {
$res .= $optionTag . $option->attributes() . '>' . htmlspecialchars($caption, ENT_NOQUOTES, 'UTF-8') . '</option>';
}
}
$res .= $tmp;
$tmp = '';
}
return Html::el('select')->setHtml($res);
}