public static function renderSelect(Field $field) { if (strpos($field->getName(), '[]') || is_array($field->getValue())) { $field->setAttribute('multiple', 'multiple'); } $selected = is_array($field->getValue()) ? $field->getValue() : [$field->getValue()]; $select = sprintf('<select name="%s" %s>', $field->getName(), $field->getAttributes()); foreach ($field->getChoices() as $value => $choice) { if (is_array($choice)) { if (empty($choice)) { continue; } $select .= sprintf('<optgroup label="%s">', $value); foreach ($choice as $subvalue => $subchoice) { $select .= sprintf('<option value="%s" %s>%s</option>', $subvalue, in_array($subvalue, $selected) ? ' selected="selected"' : '', $subchoice); } $select .= '</optgroup>'; } else { $select .= sprintf('<option value="%s" %s>%s</option>', $value, in_array($value, $selected) ? ' selected="selected"' : '', $choice); } } return $select . '</select>'; }