Estoy escribiendo esta pregunta porque tengo dificultades para configurar los valores predeterminados para un _MultiCheckbox elemento de una Zend Framework 1.9.3.
Creo Zend_Form_Element_MultiCheckbox con múltiples opciones como esta:

$multiCheckbox = new Zend_Form_Element_MultiCheckbox( 'elId',
array ( 'disableLoadDefaultDecorators' =>true ) );

$multiCheckbox ->setName( 'elId' )
->setLabel('elId')
->setRequired( false )
->setAttrib('class', 'inputtext')
->setDecorators( array( 'ViewHelper' ) )
->setMultiOptions( $options );

donde $opciones de matriz es un array asociativo ‘clave’ => ‘valor’. El campo se muestra igual de bien, y puedo hacer que todos los valores activados para ese elemento.

Al regresar a la página necesito restaurar desde la base de la totalidad de la lista de opciones y marca la marcada queridos. He tratado de hacer como que:

$multiCheckbox ->setValue( $defaults );

donde $valor predeterminado es la matriz, que contiene elementos de tipo ‘checked_option_field_id’ => true
(por ejemplo. array( ‘1222’ => true, ‘1443’ => true ) ).
Que acción comprueba TODAS las casillas y no sólo una vez que me necesitan y que he pasado a el método setValue ().
He tratado de pasar sólo un array que contiene los elementos de tipo ‘checked_option_field_id’,
(por ejemplo. matriz( ‘1222’, ‘1443’ ) )
pero que también no funciona NINGUNA de las casillas de verificación está activada.
He utilizado el formulario setDefaults() método con los dos tipos de matrices, pero los resultados son los mismos – como en este método se utiliza de nuevo setValue() para cada elemento.

MultiCheckbox elemento se representa así ( resultado cuando se intenta establecer valor activado sólo una opción ):

<label for="elId-1222"><input type="checkbox" name="elId[]" id="elId-1222" value="1222" checked="checked" class="inputtext">BoRoom </label><br />

<label for="elId-1443"><input type="checkbox" name="elId[]" id="elId-1443" value="1443" checked="checked" class="inputtext">BoRoom Eng2 </label><br/>

Ese elemento rellena el comprueban los valores de la opción en el elId[] matriz. Que es el nombre del elemento.
setDefaults() método que obtiene todos los elementos de formulario por su nombre y cometer sus valores por defecto llamando setDefault() método del formulario y después de que setValue() método de los elementos. Así que mi multicheckbox elemento tiene nombre elId ( no todo el elemento opciones una por una ) y establecer los valores predeterminados para todas las opciones, en lugar de sólo el dado en la matriz.

Que es como yo lo veo y no puedo encontrar la solución de cómo establecer los valores predeterminados sólo para algunas de las opciones de un multicheckbox elemento.

3 Comentarios

  1. 9

    Chris es correcto que setValue() espera un array de valores a ser «marcado» (no una matriz de tipo bool valores codificados por su opción IDs).

    Si usted está buscando la lógica detrás de la forma de generación, no se ven en la Zend_Form_Element objeto (o la cantidad de extendido de los elementos de la misma), aspecto en el Zend_View_Helper objetos. Específicamente el Zend_View_Helper_FormRadio objeto.

    A la hora de generar el código HTML de las opciones de la matriz es un bucle, entonces el valor se compara con el valor de la matriz – la matriz pasa a setValue(), utilizando in_array().

    De Zend_View_Helper_FormRadio línea: 150

    //is it checked?
    $checked = '';
    if (in_array($opt_value, $value)) {
        $checked = ' checked="checked"';
    }

    No está seguro de lo que no funciona para usted, pero si usted está pasando:

    $element->setMultiOptions(array('1111' => 'Some Label', 
                                    '2222' 'Some Other Label', 
                                    '3333', 'Not Selected Label'));
    
    $element->setValue(array('1111','2222');

    Se debe trabajo. Tal vez si se puede incluir algún código sería más fácil ver lo que está pasando?

    • Ambos están a la derecha. He conseguido hacer que funcione pasar un array con los valores de la opción. Gracias por la ayuda.
  2. 2

    La setValue() espera un array con los valores que se deben revisar, en este caso, por ejemplo, tiene que pasar un array con los valores de 1222, 1443 para que sean calificadas como equipaje.

    • He mencionado anteriormente que la aprobación de dicha matriz también no funciona ninguno de los elementos de opción está activada. La matriz de pasar de tipo array(‘1222’, ‘1444’) no marque ninguna casilla de verificación. Pasando array (‘1222’ => true, ‘1444’ => verdadero) comprueba que todas las casillas pero no sólo los especificados en la matriz. También, no me parece en absoluto correcto de la lógica en el Formulario de Elemento de método setValue() que va a establecer los valores predeterminados para multi elemento. De todos modos, yo también empiezo a pensar que el problema puede venir porque la HtmlTag decorador o el ViewHelper decorador que puedo usar para representar el campo y la forma en que lo hace.

Dejar respuesta

Please enter your comment!
Please enter your name here