2 Stimmen

CSS-Attribute zu Symfony-Formularbeschriftungen hinzufügen?

Ich versuche, einige CSS-Attribute zu Beschriftungen in meiner benutzerdefinierten sfForm hinzuzufügen, aber ich kann es nicht erreichen.

In meiner benutzerdefinierten Klasse myForm extends sfForm Ich erstelle alle Textfelder dynamisch:

public function configure()
{
    $widgetFixtures = array();
    foreach ($fixtures as $fixture) {  
     $widgetFixtures[$fixture->getId()] = new sfWidgetFormInputText(  
            array('label' => $fixture->getTeamNameDom()),  
            // I would like to add something like: array('class' => $fixture->getCSS()),
            array('value' => $fixture->getScore1(), 'readonly' => 'readonly')
            );
    }
    $this->setWidgets($widgetFixtures);
}

Ich habe versucht, das Rendering zu formatieren mit setFormFormatterName aber ohne Erfolg.

Hinweis: Ich kann nicht verwenden renderLabel($value, $attributes = array()) in der Vorlage, weil ich die CSS-Klasse aus der DB erhalte (wie Sie vielleicht gesehen haben, muss ich verwenden: $fixture->getCSS()).

Könnte mir jemand Licht ins Dunkel bringen?

Vielen Dank!

1voto

ocornu Punkte 579

Ich habe das Problem folgendermaßen gelöst.
Ich habe die beiden Vorschläge von johnwards und richsage genommen und sie zusammengefügt:
"Diese Art von Dingen sollte in der Ansicht/Aktion behandelt werden."
"Zugriff auf die Optionen/Attribute, die dem Widget selbst übergeben werden".

Zuerst füge ich die CSS-Klasse zur Eingabe selbst hinzu (auch wenn ich sie nicht verwenden werde).

In meiner benutzerdefinierten Klasse myForm extends sfForm ,

foreach ($fixtures as $fixture) {    
     $widgetFixtures[$fixture->getId()] = new sfWidgetFormInputText(  
         array('label' => $fixture->getTeamNameDom()),  
         array('value' => $fixture->getScore1(), 
               'readonly' => 'readonly',  
               'class' => $fixture->getCSS())  
         );  
}  

Dann, in der Vorlage, statt der Verwendung von echo $form; Ich füge die CSS-Klasse dem Label wie unten gezeigt hinzu:

foreach ($form as $widgetId => $widget) {  
    ...
    $labelClass = $widget->getWidget()->getAttribute('class');  
    echo '<td>'.$widget->renderLabel(null, array('class' => $labelClass)).'</td>';  
    ...
}

Vielleicht ist das nicht die beste Lösung für dieses Problem, aber es funktioniert.

Vielen Dank für Ihr Feedback!

0voto

Tom Punkte 29316

Was Sie zu tun versuchen, scheint möglich zu sein, aber Ihre ausgegraute Syntax scheint ein wenig daneben zu sein. Versuchen Sie dies:

    $widgetFixtures[$fixture->getId()] = new sfWidgetFormInputText(  
        array('label' => $fixture->getTeamNameDom()),  
        array('class' => $fixture->getCSS()),
        array('value' => $fixture->getScore1(), 'readonly' => 'readonly')
    );

... oder lesen Sie den Abschnitt "Die sfWidgetForm-Basisklasse" hier: http://www.symfony-project.org/forms/1_4/en/A-Widgets

0voto

johnwards Punkte 1871

Das Klassenattribut muss für alle Formular-Widgets als Array im zweiten Parameter übergeben werden.

$this->setWidget('foo', new sfWidgetFormInputText(array(),array('class','fooclass'));

0voto

richsage Punkte 26579

Sie können versuchen, die Widget-Klasse zu überschreiben, wenn Sie CSS zu den Beschriftungen hinzufügen möchten - insbesondere die Methoden, die die Beschriftung darstellen. Sie könnten dann etwas tun wie

$foo = new myWidgetFormInputText(array("myCSSClass" => $fixture->getCSS()));

und überschreiben Sie dann Ihre renderLabel() Methode oder ähnliches in Ihrem Widget. Ihr Widget hat Zugriff auf die Optionen, die Sie übergeben - im obigen Beispiel myCSSClass ist die Optionstaste. Sie können dann diesen Klassenwert auf die Beschriftung Ihres Widgets anwenden.

0voto

Es ist viel einfacher als das. Wenden Sie einfach CSS auf das Etikett für Tag...

label[for=payment_cardNumber]
{
    margin-top: 20px;
    color: red;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X