Zend_Form – linki w opisie elementów formularza

Dosyć często istnieje potrzeba, aby w formularzu na stronie www oprócz samych pól formularza i etykiet tych pól, umieścić jeszcze jakiś opis, w którym znalazłby się link do innej strony. Zapewne spytasz teraz: Czy aby na pewno często? A tak. W prawie każdym większym serwisie www przy rejestracji, należy zaakceptować regulamin serwisu. Więc najlepiej jest umieścić element typu checkbox w formularzu i dodać przy nim link do regulaminu.

Standardowe zachowanie dekoratorów obiektu Zend_Form wygląda tak, że nie pozwalają na dodanie linków, a ściślej rzecz ujmując dokonują operacji zakodowania tagów HTML, tak by przeglądarka wyświetliła dokładnie to co wpiszemy.

Jeśli mamy taki kod:

$el->setDescription( 'Oświadczam, że zapoznałem się z
<a href="#regulamin" target="_blank">regulaminem</a>
i akceptuję jego postanowienia.' );

to efektem będzie taki tekst: „Oświadczam, że zapoznałem się z <a href=”#regulamin” target=”_blank”>regulaminem</a> i akceptuję jego postanowienia.

Zamiast takiego: „Oświadczam, że zapoznałem się z regulaminem i akceptuję jego postanowienia.”

Aby osiągnąć pożądany efekt, należy zmodyfikować ustawienia dekoratora dla danego elementu w ten sposób:

$el->getDecorator('Description')->setOption('escape', false);

A oto rozwiązanie pokazane w szerszym kontekście:

class Form_User extends Zend_Form {
 
	public function init() {
		// ...
		$el = new Zend_Form_Element_Checkbox( 'terms' );
		$el->getDecorator('Description')->setOption('escape', false);
		$el->setLabel('Akceptacja regulaminu');
		$el->setRequired( true );
		$el->setDescription( 'Oświadczam, że zapoznałem się z
				<a href="/regulamin.html" target="_blank">regulaminem</a>
				i akceptuję jego postanowienia.' );
		$this->addElement($el);
		// ...
	}
}

Dodaj komentarz

This site uses Akismet to reduce spam. Learn how your comment data is processed.