SilverStripe PHP Forms: si anido un SelectionGroup dentro de un FieldGroup, uno de los Radio Box de SelectionGroup_Items relacionados no aparece. ¿Por qué?

3 minutos de lectura

avatar de usuario
Rudiger

Tengo un formulario que tiene dos FieldGroups, y en uno de los FieldGroupyo tengo un SelectionGroup.

los SelectionGroup_Items aparecen en el formulario FieldGroup pero los cuadros de radio para seleccionar una de las opciones no se muestran. Si elimino el FieldGroup luego vuelve a funcionar.

He mirado las plantillas del marco, y si cambio el FieldGroup_holder.ss SmallFieldHolder a FieldHolder las cajas de radio vuelven a aparecer y funcionan correctamente. He intentado seguir las plantillas para ver cuál no está obedeciendo el SelectionGroup pero sigo perdiéndome.

Aquí hay un ejemplo de código

$fields = FieldList::create(
    FieldGroup::create(
        TextField::create('Name', 'Name')
    ),
    FieldGroup::create(
        SelectionGroup::create(
            'Test1or2',
            array(
                SelectionGroup_Item::create(
                    'Test1', array(
                        TextField::create('Test1', 'Test1')
                    ),
                    'Test1'
                ),
                SelectionGroup_Item::create(
                    'Test2', array(
                        TextField::create('Test2', 'Test2')
                    ),
                    'Test2'
                )
            )
        )
    )
),
FieldList::create(
    FormAction::create('submit', 'Submit')
)

  • Parece que SelectionGroup no tiene un SelectionGroup_small.ss plantilla que se utiliza cuando anida campos. Simplemente créelo en su tema y modifíquelo. También podría valer la pena plantear una cuestión sobre github

    – wmk

    20 de febrero de 2017 a las 7:23


  • @wmk no tiene mucha suerte con eso. ¿Algo más que pueda hacer para que funcione?

    – Rüdiger

    20 de febrero de 2017 a las 10:28

  • También he agregado un problema de git github.com/silverstripe/silverstripe-framework/issues/6637

    – Rüdiger

    22 de febrero de 2017 a las 8:58

  • Esta no es una gran pregunta, y no sé cómo obtuvo 57 votos a favor, especialmente dado el bajo recuento de vistas, pero supongo que no irá a ningún lado por eso. Su problema es con el HTML generado, pero no lo proporciona ni proporciona un ejemplo de la salida HTML deseada. Su muestra de código es sintácticamente inválida y no se proporciona ningún contexto sobre dónde se usa. Si resolvió esto de alguna manera, debe publicar una respuesta; si el problema ya no es relevante o reproducible, debe eliminar la pregunta.

    – miken32

    6 de marzo de 2019 a las 17:11

  • @ miken32 tiene que ver específicamente con el marco SilverStripe (de ahí la etiqueta) y se ha publicado un error en el repositorio de GitHub (vinculado en los comentarios). La razón por la que no hay html es porque no hay una plantilla html para las funciones dadas, ese es el error. Además de un punto y coma al final, no tengo idea de lo que estás hablando acerca de que es sintácticamente inválido. Cualquiera que esté familiarizado con el marco conocerá el contexto. Todavía es un error abierto y fácilmente reproducible.

    – Rüdiger

    7 de marzo de 2019 a las 3:54

Puede agregar otro conjunto de campos y luego establecer sus atributos en id="hidden_field" aria-hidden="true". En el documento css podría hacer lo siguiente.

    #hidden_field{
        display:none;
        height:0;
        width:0;
        margin:0;
        padding:0;
        visibility: hidden;
    }

Esto debería ocultar el comportamiento de consulta de SilverStripe Framework. En mis propios formularios php, aparecían corchetes aleatorios cada vez que alguien enviaba un nuevo formulario varias veces con diferentes números de identificación de parte. Usé este enfoque para ocultar los corchetes aleatorios en mi sitio.

  • @Rudiger, ¿funcionó este código para evitar el error del marco SilverStripe?

    – JTS

    24 de noviembre de 2019 a las 15:08

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad