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

rex_form: Falsche Anzeige von Radiobuttons und Checkboxen

Verfasst: 9. Mai 2012, 00:31
von Frezl
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

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

Verfasst: 9. Mai 2012, 09:20
von jdlx
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..

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

Verfasst: 9. Mai 2012, 10:31
von jdlx
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

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

Verfasst: 9. Mai 2012, 23:13
von Frezl
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

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

Verfasst: 9. Mai 2012, 23:24
von jdlx
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..

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

Verfasst: 10. Mai 2012, 12:53
von jdlx
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

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

Verfasst: 10. Mai 2012, 13:34
von Frezl
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

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

Verfasst: 10. Mai 2012, 14:40
von jdlx
Treffend analysiert.. magst das als issue bei r4 einwerfen? Finde das gehört gefixt..

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

Verfasst: 10. Mai 2012, 15:02
von Frezl
Wenn du mir sagst, wo. Im Forum? Nen richtigen Bug Tracker scheint's ja nicht zu geben...

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

Verfasst: 10. Mai 2012, 16:35
von jdlx

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

Verfasst: 15. Mai 2012, 15:40
von Frezl
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

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

Verfasst: 15. Mai 2012, 16:58
von jdlx
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..

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

Verfasst: 16. Mai 2012, 00:38
von Frezl
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

Re: rex_form: Falsche Anzeige von Radiobuttons und Checkboxe

Verfasst: 16. Mai 2012, 12:59
von jdlx
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.