Archive for the ‘Sternchen’ tag
Pflichtfelder mit Sternchen markieren via CSS
Oft möchte man in einem Formular eine Prüfung einbinden, die anschlägt, wenn das Feld nicht gefüllt wurde. Das geht mit dem Zend Framework und Zend_Form sehr einfach:
class Wb_Form_Subscription extends Zend_Form { public function __construct($options = null) { $element = new Zend_Form_Element_Text('Email'); $element->setLabel('Email') ->setRequired(true); $this->addElement($element); } }
Mit der setRequired() Funktion fügen wir automatisch eine NotEmpty-Prüfung hinzu, außerdem erhält das Element die CSS-Klasse „required“:
<label for="Email" class="required">Email</label>
Wenn das Formular nun abgeschickt wird und das Feld leer bleibt, erhalten wir eine Fehlermeldung. Diese werden wir nachher noch anpassen. Doch erst möchten wir noch das Feld als Pflichtfeld markieren, mit einem kleinen roten Stern, so wie hier:
Das können wir auf 3 Arten erledigen, wobei die dritte mein Favorit ist:
$element->setLabel('Email *')
$element->getDecorator('label')->setOption('requiredSuffix', ' * ');
oder via CSS:
.required { background-image:url(/img/required-field.png); background-position:top right; background-repeat:no-repeat; padding-right:10px; }
Eine Beispieldatei kann hier runtergeladen werden.
Achso, die englische Fehlermeldung wollen wir noch anpassen, das geht so:
$element = new Zend_Form_Element_Text('Email'); $element->setLabel('Email') ->setAttrib('size', 90) ->setRequired(true) ->addErrorMessage('Diese Email-Adresse ist ungültig') ->addValidator('EmailAddress'); $this->addElement($element);
Wenn man für die verschiedenen Validatoren unterschiedliche Fehlermeldungen haben möchte, geht das so:
$element = new Zend_Form_Element_Text('Email'); $element->setLabel('Email') ->setAttrib('size', 90) ->setRequired(true) ->addValidator('NotEmpty', false, array('messages' => 'Leer')) ->addValidator('EmailAddress', false, array('messages' => 'Ungültig')); $this->addElement($element);
Möchte man nur eine Fehlermeldung haben, muss man den zweiten Parameter ($breakChainOnFailure) auf true setzen. Sobald ein Validator fehlschlägt, wird die Prüfung aller weiteren Validatoren abgebrochen.
Setzt man Zend_Translate ein, sollte man übrigens die Fehlermeldungen mittels Zend_Translate übersetzen lassen, und nicht so wie oben gezeigt. Dazu fügt man einfach eine neue Übersetzung hinzu, mit dem Schlüssel, der sich in den Klassenkonstanten der jeweiligen Validator-Klasse versteckt, wie hier beispielsweise beim EmailAddress-Validator.