Back to Select class

Method options

public static string
options
(mixed $arr, mixed $optKey = 'value', mixed $optText = 'text', mixed $selected = null, mixed $translate = false)
Generates the option tags for an HTML select list (with no select tag surrounding the options).
Parameters
  • array $arr An array of objects, arrays, or values.
  • mixed $optKey If a string, this is the name of the object variable for the option value. If null, the index of the array of objects is used. If an array, this is a set of options, as key/value pairs. Valid options are: -Format options, {@see \Joomla\CMS\HTML\HTMLHelper:: $formatOptions }. -groups: Boolean. If set, looks for keys with the value "<optgroup>" and synthesizes groups from them. Deprecated. Defaults true for backwards compatibility. -list.select: either the value of one selected option or an array of selected options. Default: none. -list.translate: Boolean. If set, text and labels are translated via Text::_(). Default is false. -option.id: The property in each option array to use as the selection id attribute. Defaults to none. -option.key: The property in each option array to use as the selection value. Defaults to "value". If set to null, the index of the option array is used. -option.label: The property in each option array to use as the selection label attribute. Defaults to null (none). -option.text: The property in each option array to use as the displayed text. Defaults to "text". If set to null, the option array is assumed to be a list of displayable scalars. -option.attr: The property in each option array to use for additional selection attributes. Defaults to none. -option.disable: The property that will hold the disabled state. Defaults to "disable". -option.key: The property that will hold the selection value. Defaults to "value". -option.text: The property that will hold the the displayed text. Defaults to "text". If set to null, the option array is assumed to be a list of displayable scalars.
  • string $optText The name of the object variable for the option text.
  • mixed $selected The key that is selected (accepts an array or a string)
  • bool $translate Translate the option values.
Returns
  • string HTML for the select list
Since
  • 1.5
Class: Select
Project: Joomla

Method options - Source code

/**
 * Generates the option tags for an HTML select list (with no select tag
 * surrounding the options).
 *
 * @param   array    $arr        An array of objects, arrays, or values.
 * @param   mixed    $optKey     If a string, this is the name of the object variable for
 *                               the option value. If null, the index of the array of objects is used. If
 *                               an array, this is a set of options, as key/value pairs. Valid options are:
 *                               -Format options, {@see HTMLHelper::$formatOptions}.
 *                               -groups: Boolean. If set, looks for keys with the value
 *                                "<optgroup>" and synthesizes groups from them. Deprecated. Defaults
 *                                true for backwards compatibility.
 *                               -list.select: either the value of one selected option or an array
 *                                of selected options. Default: none.
 *                               -list.translate: Boolean. If set, text and labels are translated via
 *                                Text::_(). Default is false.
 *                               -option.id: The property in each option array to use as the
 *                                selection id attribute. Defaults to none.
 *                               -option.key: The property in each option array to use as the
 *                                selection value. Defaults to "value". If set to null, the index of the
 *                                option array is used.
 *                               -option.label: The property in each option array to use as the
 *                                selection label attribute. Defaults to null (none).
 *                               -option.text: The property in each option array to use as the
 *                               displayed text. Defaults to "text". If set to null, the option array is
 *                               assumed to be a list of displayable scalars.
 *                               -option.attr: The property in each option array to use for
 *                                additional selection attributes. Defaults to none.
 *                               -option.disable: The property that will hold the disabled state.
 *                                Defaults to "disable".
 *                               -option.key: The property that will hold the selection value.
 *                                Defaults to "value".
 *                               -option.text: The property that will hold the the displayed text.
 *                               Defaults to "text". If set to null, the option array is assumed to be a
 *                               list of displayable scalars.
 * @param   string   $optText    The name of the object variable for the option text.
 * @param   mixed    $selected   The key that is selected (accepts an array or a string)
 * @param   boolean  $translate  Translate the option values.
 *
 * @return  string  HTML for the select list
 *
 * @since   1.5
 */
public static function options($arr, $optKey = 'value', $optText = 'text', $selected = null, $translate = false)
{
    $options = array_merge(HTMLHelper::$formatOptions, static::$optionDefaults['option'], array('format.depth' => 0, 'groups' => true, 'list.select' => null, 'list.translate' => false));
    if (is_array($optKey)) {
        // Set default options and overwrite with anything passed in
        $options = array_merge($options, $optKey);
    } else {
        // Get options from the parameters
        $options['option.key'] = $optKey;
        $options['option.text'] = $optText;
        $options['list.select'] = $selected;
        $options['list.translate'] = $translate;
    }
    $html = '';
    $baseIndent = str_repeat($options['format.indent'], $options['format.depth']);
    foreach ($arr as $elementKey => &$element) {
        $attr = '';
        $extra = '';
        $label = '';
        $id = '';
        if (is_array($element)) {
            $key = $options['option.key'] === null ? $elementKey : $element[$options['option.key']];
            $text = $element[$options['option.text']];
            if (isset($element[$options['option.attr']])) {
                $attr = $element[$options['option.attr']];
            }
            if (isset($element[$options['option.id']])) {
                $id = $element[$options['option.id']];
            }
            if (isset($element[$options['option.label']])) {
                $label = $element[$options['option.label']];
            }
            if (isset($element[$options['option.disable']]) && $element[$options['option.disable']]) {
                $extra .= ' disabled="disabled"';
            }
        } elseif (is_object($element)) {
            $key = $options['option.key'] === null ? $elementKey : $element->{$options['option.key']};
            $text = $element->{$options['option.text']};
            if (isset($element->{$options['option.attr']})) {
                $attr = $element->{$options['option.attr']};
            }
            if (isset($element->{$options['option.id']})) {
                $id = $element->{$options['option.id']};
            }
            if (isset($element->{$options['option.label']})) {
                $label = $element->{$options['option.label']};
            }
            if (isset($element->{$options['option.disable']}) && $element->{$options['option.disable']}) {
                $extra .= ' disabled="disabled"';
            }
            if (isset($element->{$options['option.class']}) && $element->{$options['option.class']}) {
                $extra .= ' class="' . $element->{$options['option.class']} . '"';
            }
            if (isset($element->{$options['option.onclick']}) && $element->{$options['option.onclick']}) {
                $extra .= ' onclick="' . $element->{$options['option.onclick']} . '"';
            }
        } else {
            // This is a simple associative array
            $key = $elementKey;
            $text = $element;
        }
        /*
         * The use of options that contain optgroup HTML elements was
         * somewhat hacked for J1.5. J1.6 introduces the grouplist() method
         * to handle this better. The old solution is retained through the
         * "groups" option, which defaults true in J1.6, but should be
         * deprecated at some point in the future.
         */
        $key = (string) $key;
        if ($key === '<OPTGROUP>' && $options['groups']) {
            $html .= $baseIndent . '<optgroup label="' . ($options['list.translate'] ? Text::_($text) : $text) . '">' . $options['format.eol'];
            $baseIndent = str_repeat($options['format.indent'], ++$options['format.depth']);
        } elseif ($key === '</OPTGROUP>' && $options['groups']) {
            $baseIndent = str_repeat($options['format.indent'], --$options['format.depth']);
            $html .= $baseIndent . '</optgroup>' . $options['format.eol'];
        } else {
            // If no string after hyphen - take hyphen out
            $splitText = explode(' - ', $text, 2);
            $text = $splitText[0];
            if (isset($splitText[1]) && $splitText[1] !== '' && !preg_match('/^[\\s]+$/', $splitText[1])) {
                $text .= ' - ' . $splitText[1];
            }
            if (!empty($label) && $options['list.translate']) {
                $label = Text::_($label);
            }
            if ($options['option.label.toHtml']) {
                $label = htmlentities($label);
            }
            if (is_array($attr)) {
                $attr = ArrayHelper::toString($attr);
            } else {
                $attr = trim($attr);
            }
            $extra = ($id ? ' id="' . $id . '"' : '') . ($label ? ' label="' . $label . '"' : '') . ($attr ? ' ' . $attr : '') . $extra;
            if (is_array($options['list.select'])) {
                foreach ($options['list.select'] as $val) {
                    $key2 = is_object($val) ? $val->{$options['option.key']} : $val;
                    if ($key == $key2) {
                        $extra .= ' selected="selected"';
                        break;
                    }
                }
            } elseif ((string) $key === (string) $options['list.select']) {
                $extra .= ' selected="selected"';
            }
            if ($options['list.translate']) {
                $text = Text::_($text);
            }
            // Generate the option, encoding as required
            $html .= $baseIndent . '<option value="' . ($options['option.key.toHtml'] ? htmlspecialchars($key, ENT_COMPAT, 'UTF-8') : $key) . '"' . $extra . '>';
            $html .= $options['option.text.toHtml'] ? htmlentities(html_entity_decode($text, ENT_COMPAT, 'UTF-8'), ENT_COMPAT, 'UTF-8') : $text;
            $html .= '</option>' . $options['format.eol'];
        }
    }
    return $html;
}