FriendsOfREDAXO / mform

Spielend einfach umfangreiche Modul-Input-Formulare erzeugen.
MIT License
77 stars 19 forks source link

Methoden "setLabelColClass" und "setFormItemColClass" ohne Funktion #355

Open dpf-dd opened 3 months ago

dpf-dd commented 3 months ago

Folgende Anweisungen funktionieren noch mit der letzten Version von MForm 7, seit 8.0.3. werden die Anweisungen aber komplett ignoriert...

MForm 7 => korrekt

INPUT:
$form->setLabelColClass('col-sm-12 text-center');
$form->setFormItemColClass('col-sm-12 text-center');

OUTPUT:
<div class="form-group ">
    <div class="col-sm-12 text-center">...</div>
    <div class="col-sm-12 text-center">...</div>    
</div>

MForm 8 => nicht korrekt

INPUT:
$form->setLabelColClass('col-sm-12 text-center');
$form->setFormItemColClass('col-sm-12 text-center');

OUTPUT:
<div class="form-group">
    <div class="col-sm-2 control-label">...</div>
    <div class="col-sm-10">...</div>    
</div>

Affected versions / Verwendete Versionen REDAXO: 5.17.1 PHP: 8.3.8 Database: MariaDB 10.6.18 Browser: alle AddOns: MForm 8.0.3

dpf-dd commented 3 months ago

Irgendwie kam mir das Problem bekannt vor... :D

https://github.com/FriendsOfREDAXO/mform/issues/316

Hier ist es! Der Fehler wurde mit MForm 7.4.3 "eingeführt". Die Fragment-Datei "mform_default.php" hat sich in Version 8 etwas verändert und der Fix aus 7.x fehlt...

Ich würde hier auch gerne einen PR beisteuern, aber ich verstehe den Code nicht zu 100%... Mir erschließt sich das Dasein des Switches nicht wirklich. setLabelColClass und setFormItemColClass werden direkt übergeben, aber von $this->type gelesen und ich weiß nicht wie tief dieses $this->type in der Programmlogik verbaut ist... Wo bzw. wie kann man denn die drei Values "default, default_full, default_custom_full" einstellen/ansteuern/bearbeiten?

switch ($this->getVar('type')) {
    default:
    case 'default':
        $this->setVar('labelColClass', 'col-sm-2 control-label');
        $this->setVar('formItemColClass', 'col-sm-10');
        break;
    case 'default_full':
    case 'default_custom_full':
        $this->setVar('labelColClass', 'col-sm-12');
        $this->setVar('formItemColClass', 'col-sm-12');
        break;
}
joachimdoerr commented 3 months ago

Es gibt eine ->setFull() Methode mit der oder mit dem Attribute 'full' => true kann man den Type auf "default_full" setzen.

dpf-dd commented 3 months ago

Dann wäre die Frage, was hat Vorrang bei folgender Konstellation bzw. wie soll dann so eine "Doppelanweisung" behandelt werden?

$form->addTextField("$id.0.meinfeld");
$form->setLabel('Mein Feld');
$form->setFull();
$form->setLabelColClass('col-sm-12 text-center');
$form->setFormItemColClass('col-sm-12 text-center');