Zuweisung einer CSS-Klasse an sfWidgets anhand der Feldtypen

Da es in letzter Zeit öfters vorkam, dass wir Formularfelder in einer Schleife ausgeben mussten -aus welchen Gründen auch immer- und ich hier im Team der „Designerfuzzi“ bin, der das Ganze auch noch schön aussehen lassen soll, musste ein Konstrukt her das die Vergabe der CSS-Klassen je nach Feldtyp übernimmt.

In folgender Schleife werden alle Felder, ob es nun ein Radio, Checkbox, Textfeld oder eine Textarea ist, ausgeben.

<?php foreach($a_field_names AS $field): ?>
    <?php echo $form[$field]->render(array('class' => 'classname')); ?>
<?php endforeach; ?>

Der Grund ist wieder mal der IE, für den ich unsere Projekte aufgrund unserer Zielgruppen immer wieder anpassen muss. Das soll heißen vergebe ich einem input die Klasse ‘text’ mit einem border so wird im IE auch bei den Radios ein border dargestellt. Die Selektion anhand des type mittels CSS-Selektoren fällt weg da der IE dies nicht unterstützt.

Am geeignetsten fand ich in diesem Fall die Verwendung eines Helpers, dem ich das Formularfeldobjekt übergebe und den Namen der zum type passenden CSS-Klasse zurückgeliefert bekomme.

<?php
function type2css($o_field)
{
    $s_css_classname = "";

    if(NULL !== $o_field->getWidget()->getOption('choices'))
    {
        if(TRUE === $o_field->getWidget()->getOption('expanded'))
        {
            if(TRUE === $o_field->getWidget()->getOption('multiple'))
            {
                $s_css_classname = "checkbox";
            }
            else
            {
                $s_css_classname = "radio";
            }
        }
        else
        {
            $s_css_classname = "select";
        }
    }
    else
    {
        $s_css_classname = "text";
    }

    return $s_css_classname;
}
<?php use_helper('InputCSS'); ?>

<?php foreach($a_field_names AS $field): ?>
    <?php echo $form[$field]->render(array('class' => type2css($form[$field])));?>
<?php endforeach; ?>

Ich behandle hier Textfelder und Texareas als „text“, da diese für meine Zwecke die gleichen CSS-Eigenschaften besitzen.

Dieser Beitrag wurde unter Helper, Symfony 1.4 veröffentlicht. Setze ein Lesezeichen auf den Permalink.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>