SilverStripe PHP Forms - Wenn ich eine SelectionGroup in einer FieldGroup verschachtele, wird eine der zugehörigen SelectionGroup_Items-Optionsbox nicht angezeigt. Warum?


122

Ich habe eine Form, die zwei FieldGroups hat, und in einer der FieldGroups habe ich eine SelectionGroup.

Die SelectionGroup_Items werden im Formular FieldGroupangezeigt, aber die Optionsfelder zur Auswahl einer der Optionen werden nicht angezeigt. Wenn ich das entferne FieldGroup, funktioniert es wieder.

Ich habe mir die Framework-Vorlagen angesehen, und wenn ich die FieldGroup_holder.ss SmallFieldHolderzu FieldHolderden Optionsfeldern ändere , erscheinen sie wieder und funktionieren korrekt. Ich habe versucht, den Vorlagen zu folgen, um zu sehen, welche nicht den Anforderungen entspricht, SelectionGroupaber ich verliere mich immer wieder.

Hier ist ein Beispiel für Code

$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')
)

6
SelectionGroup hat anscheinend keine SelectionGroup_small.ssVorlage, die beim Verschachteln von Feldern verwendet wird. Erstellen Sie es einfach in Ihrem Thema und ändern Sie es. Könnte es auch wert sein, ein Problem auf github
wmk

1
@wmk nicht viel Glück damit. Kann ich sonst noch etwas tun, damit es funktioniert?
Rüdiger

1
Ich habe auch ein Git-Problem hinzugefügt github.com/silverstripe/silverstripe-framework/issues/6637
Rüdiger

1
Dies ist keine gute Frage, und ich weiß nicht, wie sie 57 positive Stimmen erhalten hat, insbesondere angesichts der geringen Anzahl von Ansichten, aber ich denke, dass sie deswegen nirgendwo hingehen wird. Ihr Problem liegt im generierten HTML, aber Sie geben es nicht an oder geben ein Beispiel für die gewünschte HTML-Ausgabe. Ihr Codebeispiel ist syntaktisch ungültig und es wird kein Kontext angegeben, wo es verwendet wird. Wenn Sie dies irgendwie gelöst haben, sollten Sie eine Antwort posten. Wenn das Problem nicht mehr relevant oder reproduzierbar ist, sollten Sie die Frage löschen.
miken32

6
@ miken32 hat speziell mit dem SilverStripe-Framework (daher das Tag) zu tun und ein Fehler wurde im GitHub-Repository veröffentlicht (in den Kommentaren verlinkt). Der Grund, warum es kein HTML gibt, ist, dass es keine HTML-Vorlage für die angegebenen Funktionen gibt, das ist der Fehler. Abgesehen von einem Semikolon am Ende habe ich keine Ahnung, wovon Sie sprechen, dass es syntaktisch ungültig ist. Jeder, der mit dem Framework vertraut ist, kennt den Kontext dafür. Es ist immer noch ein offener Fehler und leicht reproduzierbar.
Rüdiger

Antworten:


1

Sie können ein weiteres Feldset hinzufügen und dann die Attribute auf festlegen id="hidden_field" aria-hidden="true". Im CSS-Dokument können Sie Folgendes tun.

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

Dies sollte das Abfrageverhalten von SilverStripe Framework verbergen. In meinen eigenen PHP-Formularen wurden zufällige Klammern angezeigt, wenn jemand ein neues Formular mehrmals unter verschiedenen Teilenummern einreichte. Ich habe diesen Ansatz verwendet, um die zufälligen Klammern auf meiner Website auszublenden.


@ Rudiger Hat dieser Code funktioniert, um den Fehler des SilverStripe-Frameworks zu umgehen?
JTS
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.