Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Form Elements i setDecorators.
Forum PHP.pl > Forum > PHP > Frameworki
siuda
Witam,

Mam pytanie odnosnie użycia dekoratorów przy tworzeniu formularza za pomocą Form Elements. Jeden z layoutów jest przygotowany do pracy z urządzeniami mobilnymi z użyciem jQuery Mobile i mam problem z datą urodzenia. To są 3 inputy typu select, które muszą się zawierać się w jednym <fieldset> i dodatkowo zawierać instrukcję data-role="controlgroup", czyli całosć będzie wyglądała następująco:

<fieldset data-role="controlgroup" data-type="horizontal">
.....
</fieldset>

Czy jest to możliwe do osiągnięcia za pomocą dekoratorów?


Pozdrawiam,
Pilsener
Nikt nie każe korzystać ze standardowego renderowania formularzy - jest to tylko dla wygody, no można coś tam czasem dekoratorem dziergać. Ale jeśli chcesz za pomocą dekoratorów zmieniać cały HTML to odradzam - napocisz się i specjalista od front-endu będzie miał potem problem. Najlepiej użyj po prostu własnego widoku, przecież z obiektu formularza możesz pobrać co trzeba.
Sephirus
Nie do końca rozumiem/zgadzam się z przedmówcą...

Jeśli używasz zenda i chcesz mieć to ładnie poukładane to wystarczy utworzyć jakiś nowy element w formie i przypisać do niego odpowiednio szablon html

  1. $pole= new Zend_Form_Element_Text('data');
  2. $pole->setLabel('data')
  3. ->setDecorators(array(array('ViewScript', array('viewScript' => 'sciezka/do/pliku.phtml'))));


w ten sposób możesz tworzyć sobie widoki html zupełnie dowolne... obsłuż w nich jedynie te dane, które przekazujesz do elementu (np label itp).

Jeśli przekazujesz jakieś dane do tego pola to w skrypcie widoku zamień np. date "2012-07-06" odpowiednio tak by do tych selectów wrzucić części daty (rok,miesiąc,dzień).

Przy odczycie forma (wysłaniu post'a) możesz nadpisać metodę forma isValid i dodać w nim sprawdzanie tego pola. Jak dobrze pokombinujesz to jest proste i skuteczne. i zachowujesz w pełni użycie formów, które same się sprawdzają itd... smile.gif
Pilsener
Wiem, że można przypisać widok do elementu formularza ale tutaj problem jest, by zamiast:
  1. echo $this->form;


Wyświetlić np. tak:
  1. <p>Label sobie tutaj: <?php echo $this->form->element->label ?></p>
  2. <p>Tu może input: <?php echo $this->form->element->input ?></p>
  3. </form>


Można też poszczególne elementy formularza:
  1. echo $this->form->element;


Innego sposobu by zaimplementować szybko gotowy kod HTML formularza nie znam. Chyba, że faktycznie chodzi tylko o jeden element.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.