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

122

Tengo una forma que tiene dos FieldGroups, y en una de las FieldGroupque tengo a SelectionGroup.

Los SelectionGroup_Items aparecen en el formulario, FieldGrouppero los cuadros de radio para seleccionar una de las opciones no se muestran. Si elimino el FieldGroup, entonces funciona de nuevo.

He mirado las plantillas de marco, y si cambio FieldGroup_holder.ss SmallFieldHoldera FieldHolderlas cajas de radio aparecen de nuevo y funcionan correctamente. Intenté seguir las plantillas para ver cuál no obedece SelectionGrouppero 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')
)
Rudiger
fuente
66
Parece que SelectionGroup no tiene una SelectionGroup_small.ssplantilla que se usa cuando anida campos. Simplemente créelo en su tema y modifíquelo. También podría valer la pena plantear un problema en github
wmk
1
@wmk no tiene mucha suerte con eso. ¿Algo más que pueda hacer para que funcione?
Rudiger
1
También he agregado un problema de git github.com/silverstripe/silverstripe-framework/issues/6637
Rudiger
1
Esta no es una gran pregunta, y no sé cómo obtuvo 57 votos a favor, especialmente dado el bajo recuento de visitas, pero supongo que no va a ninguna parte 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
66
@ 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 porque es sintácticamente inválido. Cualquiera que esté familiarizado con el marco sabrá el contexto para él. Sigue siendo un error abierto y fácilmente reproducible.
Rudiger

Respuestas:

1

Puede agregar otro conjunto de campos y luego configurar sus atributos id="hidden_field" aria-hidden="true". En el documento CSS puede 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 paréntesis 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 al azar en mi sitio.

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