[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
rex_form: Falsche Anzeige von Radiobuttons und Checkboxen - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Frezl
Beiträge: 160
Registriert: 13. Aug 2009, 14:31

rex_form: Falsche Anzeige von Radiobuttons und Checkboxen

9. Mai 2012, 00:31

Hallo allerseits,

ich entwickle ein Addon für Redaxo 4.3.3. Dafür habe ich versucht, in ein Formular Radio-Buttons und Checkboxen wie im addon_template gezeigt einzufügen.

Mein Code dazu sieht wie folgt aus:

Code: Alles auswählen

[...]
            $form = new rex_form (
                $REX['TABLE_PREFIX'] . $mypage,
                "Form",
                "id=" . $id,
                "post",
                false
            );

            $field = &$form->addRadioField ('radio');
            $field->setLabel('RadioField');
            $field->addOption ('Option 1', 'option_1');
            $field->addOption ('Option 2', 'option_2');

            $field = &$form->addCheckboxField('check');
            $field->setLabel("Checkbox");
            $field->addOption('true', 1);

            $form->show();

[...]
Das sichtbare Ergebnis ist eine mittlere Katastrophe:
[ externes Bild ]

Wie man sieht, sind die Labels der Gruppen und der einzelnen Auswahlelemente wild durcheinander gewürfelt.

Das produzierte HTML-Markup sieht wie folgt aus:

Code: Alles auswählen

<form action="index.php" method="post">
    <fieldset class="rex-form-col-1">
      <legend>Form</legend>
      <div class="rex-form-wrapper">
          <input id="rex_my_addon_Form_page" name="page" value="my_addon" type="hidden">
          <input id="rex_my_addon_Form_subpage" name="subpage" value="" type="hidden">
          <input id="rex_my_addon_Form_func" name="func" value="add" type="hidden">
          <input id="rex_my_addon_Form_list" name="list" value="530981d8371a162b6810f76bc6b0c706" type="hidden">
<div class="rex-form-row">
             <p class="rex-form-col-a rex-form-radio">
         <span>RadioField</span><input value="option_1" class="rex-form-radio" name="Form[radio]" id="rex_my_addon_Form_radio_option_1" type="radio">
             <label for="rex_my_addon_Form_radio_option_1">Option 1</label><input value="option_2" class="rex-form-radio" name="Form[radio]" id="rex_my_addon_Form_radio_option_2" type="radio">
             <label for="rex_my_addon_Form_radio_option_2">Option 2</label>
        </p>

           </div>
<div class="rex-form-row">
             <p class="rex-form-col-a rex-form-checkbox rex-form-label-right">
         <span>Checkbox</span><input name="Form[check][1]" value="1" class="rex-form-checkbox rex-form-label-right" id="rex_my_addon_Form_check_1" type="checkbox">
             <label for="rex_my_addon_Form_check_1">true</label>
        </p>

           </div>
<div class="rex-form-row">
             <p class="rex-form-col-a ">
         </p><p class="rex-form-col-a rex-form-submit rex-form-submit-2">          <input id="rex_my_addon_Form_save" name="Form_save" class="rex-form-submit" value="Speichern" type="submit">
          <input id="rex_my_addon_Form_abort" name="Form_abort" class="rex-form-submit rex-form-submit-2" value="Abbrechen" type="submit">
</p>
        <p></p>

           </div>
      </div>
    </fieldset>
  </form>
Wie richtig oder falsch das ist, kann ich nicht beurteilen, da ich keine Ahnung habe, wie die Struktur von Formularelementen in Redaxo richtig aussehen muss.

Da ich keine Doku für addCheckboxField und addRadioField finden konnte, gehe ich davon aus, dass das addon_template die Verwendung richtig vormacht und es sich um einen Bug in der Klasse bzw. dem zugehörigen CSS handelt.

Gibt's dazu ne Lösung? Als Workaround alles mit Select-Boxen vollzupflastern finde ich aus Gründen der Usability keine gute Idee. Mir wäre es schon sehr recht, wenn ich Checkboxen und Radiobuttons verwenden könnte.

Viele Grüße,
Frezl

Benutzeravatar
jdlx
Beiträge: 2615
Registriert: 29. Sep 2005, 10:50
Wohnort: Hamburg
Kontaktdaten: Website

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

9. Mai 2012, 09:20

Frezl hat geschrieben:Gibt's dazu ne Lösung?
Ja, mußt in deinem Addon ne eigene CSS includen und passende rules schreiben damit das wieder paßt.. irgendwo hab ich das auch, weiß aber ad hoc nicht wo.. falls es mir einfällt poste ichs. Is aber wenig act, insofern..

*nachtrag:* hier.. https://github.com/jdlx/addon_template/ ... css#L11-39 aber siehe comment.. die haben sich wohl so allgemein geschrieben an anderer Stelle gebissen..
vg, Jan

Benutzeravatar
jdlx
Beiträge: 2615
Registriert: 29. Sep 2005, 10:50
Wohnort: Hamburg
Kontaktdaten: Website

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

9. Mai 2012, 10:31

Habs im addon_template wieder reingenommen, weil der CSS include inzwischen auch nicht mehr pauschal, sondern nur für die Addon subpages erfolgt.. daher kann es sich nicht mehr mit dem restlichen rex backend beißen.. : https://github.com/jdlx/addon_template/ ... d29fd1d978
vg, Jan

Frezl
Beiträge: 160
Registriert: 13. Aug 2009, 14:31

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

9. Mai 2012, 23:13

Wow, sehr geile Lösung! Funktioniert wunderbar! Vielen Dank für deine Hilfe!

Warum hat es das verbesserte CSS nicht schon in den Core geschafft?

Und weißt du zufällig auch eine Lösung für das Problem, dass Änderungen an Checkboxen nicht gespeichert werden?

Gruß und Dank,
Frezl

Benutzeravatar
jdlx
Beiträge: 2615
Registriert: 29. Sep 2005, 10:50
Wohnort: Hamburg
Kontaktdaten: Website

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

9. Mai 2012, 23:24

Frezl hat geschrieben:Warum hat es das verbesserte CSS nicht schon in den Core geschafft?
Weil ich mir nie die Mühe gemacht hab ne Version zu stricken, die sich nicht an anderen Stellen des backends beißt.. das CSS is da nich wirklich entgegenkommend ;)
Frezl hat geschrieben:Und weißt du zufällig auch eine Lösung für das Problem, dass Änderungen an Checkboxen nicht gespeichert werden?
Jetzt wo dus erwähnst: da war mal was.. is mir schon mal aufgefallen, aber es kam keine Lösung bei rum.. müßt man nochmal konkret angehn. Ich hatte mich irgendwann einfach stumpf auf selects verlegt ;) btw: die Daten der checkboxes landen noch korrekt in der DB, aber wenn keine angewählt ist, dann wird beim öffnen der Form fälschlicherweise eine auf gecheckt gesetzt..
vg, Jan

Benutzeravatar
jdlx
Beiträge: 2615
Registriert: 29. Sep 2005, 10:50
Wohnort: Hamburg
Kontaktdaten: Website

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

10. Mai 2012, 12:53

Also: wenn man bei den checkbox addOptions für nen value die 0 als integer benutzt, dann gehts schief.. weil rex_form dann 0 mit false gleichsetzt, und eine checkbox welche die 0 als integer value definiert hat beim aufruf als gecheckt markiert wenn das DB feld nix enthält -> sprich mit strings arbeiten.. habs im addon_template gefixt: https://github.com/jdlx/addon_template/ ... 8d1bb54360
vg, Jan

Frezl
Beiträge: 160
Registriert: 13. Aug 2009, 14:31

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

10. Mai 2012, 13:34

Ah, der Klassiker. Es wird nicht auf den Typ, sondern nur auf den Wert geprüft.

Einfach nur die Zahlen in Anführungszeichen zu setzen hat bei mir leider nicht geholfen. PHP konvertiert das ja intern auch wie's grade passt. Bei mir hat die Checkbox jetzt den Wert 't' (für true), damit funktionierts.

Als generelle Regel halte ich hier mal fest:

Alles, was sich als 0 auswerten lässt, darf nicht value einer Checkbox sein!
Das wären also
  • 0 (als integer)
  • '0' (als string bzw. char)
  • false (als boolean)
  • 'false' (als string)
Außerdem muss beachtet werden, dass bei Mehrfachauswahl auch mehrere Values mit zusätzlichen Trennzeichen in die Datenbank geschrieben werden. Das Feld muss also entsprechend lang sein!

Viele Grüße,
Frezl

Benutzeravatar
jdlx
Beiträge: 2615
Registriert: 29. Sep 2005, 10:50
Wohnort: Hamburg
Kontaktdaten: Website

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

10. Mai 2012, 14:40

Treffend analysiert.. magst das als issue bei r4 einwerfen? Finde das gehört gefixt..
vg, Jan

Frezl
Beiträge: 160
Registriert: 13. Aug 2009, 14:31

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

10. Mai 2012, 15:02

Wenn du mir sagst, wo. Im Forum? Nen richtigen Bug Tracker scheint's ja nicht zu geben...


Frezl
Beiträge: 160
Registriert: 13. Aug 2009, 14:31

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

15. Mai 2012, 15:40

die haben sich wohl so allgemein geschrieben an anderer Stelle gebissen..
Eine dieser Stellen ist der TinyMCE-Editor. Wenn man den im Backend benutzt, zerschießt der Hack die Menüleisten des Editors. Hab dafür folgende Lösung gefunden, die auf der CSS3-Pseudoklasse ":not()" basiert:

Code: Alles auswählen

/**
* Addon_Template
*
* @author http://rexdev.de, Kompatibilität für TinyMCE-AddOn hinzugefügt von Frederik Held
* @link https://github.com/jdlx/addon_template
*
* @package redaxo4.3
* @version 0.2.0
*/

/* OVERRIDES FÜR css_form.css */

div.rex-form div.rex-form-row p.rex-form-radio label {
    display:inline-block;
    float:none;
    margin:0 20px 0 0;
    padding:5px 0 0 0;
    width:auto;
}

p.rex-form-col-a:not(.tinyMCEEditor) span {
    clear: both;
    display: block;
    float: left;
    width: 145px;
    padding: 5px;
}

div.rex-form div.rex-form-row p.rex-form-checkbox label {
    display:inline-block;
    margin:0 20px 0 0;
    padding:5px 0 0 0;
    width:auto;
}

div.rex-form-row p.rex-form-label-right input.rex-form-checkbox {
    margin: 4px 5px 0 0;
    float:left;
    clear:none;
}

div.rex-form-row p.rex-form-label-right label {
    margin: 3px 0 0 0;
}
Viele Grüße,
Frezl

Benutzeravatar
jdlx
Beiträge: 2615
Registriert: 29. Sep 2005, 10:50
Wohnort: Hamburg
Kontaktdaten: Website

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

15. Mai 2012, 16:58

Im addon_template wird dessen backend.css inzwischen nur noch in der index.php included, und nicht mehr in der config.. d.h. es wird nur noch verlinkt, wenn man auf einer der addon_template pages ist, und sonst nicht. Dadurch kann sich dann kein CSS beissen..
vg, Jan

Frezl
Beiträge: 160
Registriert: 13. Aug 2009, 14:31

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

16. Mai 2012, 00:38

Wenn man TinyMCE auf der gleichen Seite (also auch im AddOn) verwenden will schon ;-)

Btw: Ich habe versucht, den Hack nur auf den Unterseiten, die diesen benötigen, einzubinden. Aber
rex_register_extension('PAGE_HEADER', 'addHeaderCssHacks');
hat bei mir nur in der config.inc.php funktioniert :-P Also überprüfe ich jetzt dort, welche subpage und func geladen wird... Ist das korrekt so, oder hab ich was falsch gemacht?

Viele Grüße,
Frezl

Benutzeravatar
jdlx
Beiträge: 2615
Registriert: 29. Sep 2005, 10:50
Wohnort: Hamburg
Kontaktdaten: Website

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

16. Mai 2012, 12:59

Zunächst: Thomas hat das CSS für radio/chexkbox für 4.3.4 gefixt.
Da es sich an die rex Konventionen hält, sind die inputs untereinander angeordnet.. deswegen hab ich im addon_template nochmal umgebaut, und habe jetzt overrides, die per zusätzlicher class floated die inputs eben floatend ausrichten.. und zwar für < 4.3.4 als auch beim gefixten 4.3.4 CSS.
vg, Jan

Zurück zu „Sonstiges“