formulario zend para multicheckbox eliminar entrada de tags

Estoy usando zend_form (parte de Zend Framwork) para crear un formulario y lo encuentro cuando agrego un conjunto de casillas de verificación usando el elemento multicheckbox de Zend_Form (Zend_Form_Element_MultiCheckbox) el código que se genera como sigue:

  

Es decir, la entrada está dentro de la etiqueta. Mientras que el código es técnicamente correcto, va en contra de las buenas prácticas en cuanto a que el W3c lo vea y tampoco es lo que yo quiero, ya que hace que el estilo sea más difícil. Lo que quiero es lo siguiente:

 

Por lo tanto, ¿cómo puedo mover la entrada de la checkbox fuera de la etiqueta y cómo rodeo cada opción en los divs? He visto muchas páginas en Internet de las llamadas soluciones, pero ninguna funciona en multicheckboxes, ya que solo está orientada a las tags circundantes (es decir, la que indica los temas en este ejemplo), no a las tags y entradas de las opciones reales.

Por favor ayuda.

Gracias Paul

El decorador Zend_Form_Decorator_ViewHelper usa de forma predeterminada el asistente de vista Zend_View_Helper_FormMultiCheckbox para representar su elemento multicheckbox. Ese asistente de visualización se extiende desde Zend_View_Helper_FormRadio que por algún motivo está codificado de forma rígida para colocar alrededor de la etiqueta .

Tendrá que escribir su propio asistente de visualización que copia la mayor parte del código de Zend_View_Helper_FormRadio::formRadio() pero escribe el HTML sin las alrededor del elemento. Aquí hay un fragmento de otra respuesta que muestra la modificación que podría querer hacer.

Su ayuda personalizada se debe Some_Prefix_Helper_FormMultiCheckbox pero sin saber cómo se estructura su aplicación es difícil decir exactamente qué debería ser Some_Prefix o cómo se aseguraría de cargarlo en lugar de Zend_View_Helper_FormMultiCheckbox . Consulte la documentación sobre cómo cargar complementos para obtener algunos consejos.

Parece que la mejor solución se basa en la respuesta anterior de la ardilla. Como la entrada dentro de una etiqueta está codificada, la mejor solución es cambiar este comportamiento. Puede hacerlo modificando la clase Zend_View_Helper_FormRadio o anulándola con su propio encabezado de vista personalizado. Recomendaría la opción del encabezado personalizado, ya que modificar el Zend Framework sería una mala idea, ya que necesitaría actualizarse cada vez que actualizas el marco, tener un efecto sobre cualquier persona o proyecto que use esa copia del marco, etc. Al usar un helper personalizado será específico para el proyecto y no afectará a nada más ni se verá afectado al actualizar el marco (sin embargo, es posible que deba actualizar el asistente si la actualización del marco ha cambiado algunos comportamientos). Lo que hice que está funcionando bien es:

1 – Creé un modelo / módulo en la biblioteca, llamé al sitio web de la mina. Primero, se trata de crear una carpeta en la biblioteca con el mismo nombre que el modelo. Por lo tanto, tengo biblioteca> sitio web

Editar: se olvidó de decir que tendrá que registrar la biblioteca del complemento ya sea a través del progtwig de arranque o de la aplicación.ini. Encuentro que es más fácil solo agregar:

autoloaderNamespaces [] = “Website_”

Cualquier lugar debajo del espacio de nombre de la aplicación

2 – Creé las subcarpetas y el archivo correspondientes a la clase Website_View_Helper_FormRadio, que anulará Zend_View_Helper_FormRadio. Por lo tanto, la estructura de la carpeta y el archivo es

sitio web> ver> ayuda> FormRadio.php

3 – Luego copié el contenido de la función formRadio de Zend_View_Helper_FormRadio en Website_View_Helper_FormRadio dentro de la clase. Luego lo modifiqué con el código que ardilla refería así a la clase Website_View_Helper_FormRadio que hereda de Zend_View_Helper_FormRadio así:

 class Website_View_Helper_FormRadio extends Zend_View_Helper_FormRadio { public function formRadio($name, $value = null, $attribs = null, $options = null, $listsep = "
\n") { // The code from the formRadio function in Zend_View_Helper_FormRadio with // the modification from the code squirrel referred to } }

Esto nos da nuestra propia copia de la clase con nuestro código modificado que hereda de la versión Zend del elemento FormRadio.

Ahora puede usar el elemento Zend Form Radio como siempre y usará nuestras mejoras

Tenga en cuenta que si desea tener el mismo efecto en MultiCheckbox o en la checkbox, debe hacer que estos usen nuestra versión de formulario de radio, ya que estos elementos usan la forma de radio como base. Para hacer esto, creamos nuestras propias versiones de estos en nuestra biblioteca y los hacemos heredar de nuestra versión. Por lo tanto, tendríamos para multicheckbox lo siguiente:

biblioteca> sitio web> ver> ayuda> FormMultiCheckbox.php

Sería una copia de Zend_View_Helper_FormMultiCheckbox

Luego reemplace la línea:

 class Zend_View_Helper_FormMultiCheckbox extends Zend_View_Helper_FormRadio 

con:

 class Website_View_Helper_FormMultiCheckbox extends Website_View_Helper_FormRadio 

Espero que ayude a alguien.

Aquí hay información adicional sobre la personalización de renderizado multiCheckBox

Quería que las tags de las casillas prefijaran en lugar de anexar (este comportamiento predeterminado está codificado). Como la guía de referencia de ZF no es muy eloquent al respecto, finalmente ingresé en el código central para descubrir cómo personalizarlo. Eche un vistazo a Zend_View_Helper_FormRadio::formRadio() para más información.

Es posible modificar el decorador de casillas de verificación a través de las opciones multiCheckBox: agregando algunas opciones con el prefijo label_ .

Aquí está mi elemento de formulario:

 $this->addElement('multiCheckbox', 'stars_number', array( 'filters' => array('Int'), 'escape' => false, // to allow html in the labels 'separator' => '', // to keep everything inline 'label_placement' => 'prepend', 'label_class' => 'stars', // custom css needed 'decorators' => $decorator_chain, // decorators array defined upper, and passed to many elements of the form )); 

Espero que esto ayude a algunos a ahorrar horas de rastreo de Google sin éxito …

Creo que necesitas quitar la etiqueta del decorador y crear tu propio decorador que funcionará como decorador de tags, pero usa las tags div y tags juntas como necesites.