точная настройка выпадающего списка - PullRequest
0 голосов
/ 16 февраля 2011

Использование form_dropdown в одной форме со следующими параметрами:

<select name="depto">
<option value="">[todos los departamentos]</option>
<option value="0001">First</option>
<option value="01">Second</option>
</select>

Когда поле имеет любое значение, отличное от пустого, то есть "0001" или "01", в обоих случаях form_dropdown генерирует

<select name="depto">
<option value="">[todos los departamentos]</option>
<option selected="selected" value="0001">First</option>
<option selected="selected" value="01">Second</option>
</select>

помечает как выбранные 2 варианта.

Заглядывая внутрь помощника форм, функция in_array () используется для проверки значения.

Я изменил form_helper для вызова in_array () с использованием точного соответствия, то есть третьего параметра как 'true', и начал работать, как указано.

Видите ли вы какие-либо проблемы с этим изменением?Небольшие изменения помечены /// HERE THE ,true ADDED

Вот код функции:

/**
 * Drop-down Menu
 *
 * @access  public
 * @param   string
 * @param   array
 * @param   string
 * @param   string
 * @return  string
 */
if ( ! function_exists('form_dropdown'))
{
    function form_dropdown($name = '', $options = array(), $selected = array(), $extra = '')
    {
        if ( ! is_array($selected))
        {
            $selected = array($selected);
        }

        // If no selected state was submitted we will attempt to set it automatically
        if (count($selected) === 0)
        {
            // If the form name appears in the $_POST array we have a winner!
            if (isset($_POST[$name]))
            {
                $selected = array($_POST[$name]);
            }
        }

        if ($extra != '') $extra = ' '.$extra;

        $multiple = (count($selected) > 1 && strpos($extra, 'multiple') === FALSE) ? ' multiple="multiple"' : '';

        $form = '<select name="'.$name.'"'.$extra.$multiple.">\n";

        foreach ($options as $key => $val)
        {
            $key = (string) $key;

            if (is_array($val))
            {
                $form .= '<optgroup label="'.$key.'">'."\n";

                foreach ($val as $optgroup_key => $optgroup_val)
                {
                    $sel = (in_array($optgroup_key, $selected, true)) ? ' selected="selected"' : ''; /// HERE THE ,true added

                    $form .= '<option value="'.$optgroup_key.'"'.$sel.'>'.(string) $optgroup_val."</option>\n";
                }

                $form .= '</optgroup>'."\n";
            }
            else
            {
                $sel = (in_array($key, $selected, true)) ? ' selected="selected"' : '';  /// HERE THE ,true ADDED

                $form .= '<option value="'.$key.'"'.$sel.'>'.(string) $val."</option>\n";
            }
        }

        $form .= '</select>';

        return $form;
    }
}

1 Ответ

0 голосов
/ 12 июня 2011

Попробуйте привести ваши значения в виде строк, как в примерах ниже, и посмотрите, работает ли это.

$deptolist = array( (string)'0001' => 'First', (string)'01' => 'Second' );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...