Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework]Grupowanie divami o określonym ID elementów dużego formularza
Forum PHP.pl > Forum > PHP > Frameworki
darko
Witam.
Mam jeden duży formularz, z którego muszę zrobić partiale, oddzielając poszczególne grupy elementów divami z określoną wartością atrybutu ID. Próbuję tak i działa, ale tylko dla jednej grupy elementów:
  1. $add_form->addDisplayGroup(array('elem1','elem2'), 'step1');
  2. $add_form->setDecorators(array('FormElements', array('HtmlTag', array('tag'=>'div','id'=>'step1'))));

Jednak nie mogę znaleźć sposobu na dodanie kolejnych DIVów i tworzenie kolejnych grup. Próbuję tak:
  1. $display_groups = array('elem1','elem2', 'step1', 'elem3','elem4', 'step2');
  2. $add_form->addDisplayGroups($display_groups);
  3. $add_form->setDecorators(array('FormElements', array('HtmlTag', array('tag'=>'div','id'=>'step1','tag'=>'div','id'=>'step2'))));

i step2 nadpisuje step1, zamiast dodać kolejnego diva obejmującego elem3 i elem4. Kolejna kwestia: przy zastosowanym rozwiązaniu znikają mi tagi <form></form> (! ?).
Pytanie: w jaki sposób można rozwiązać powyższy problem? Chodzi o uzyskanie mniej więcej zbliżonego efektu jak poniżej (pomijam domyślne dekoratory dt i dd oraz labele):
  1. <form action="blabla" method="post">
  2. <div id="step1">
  3. <input type="text" name="elem1" />
  4. <input type="text" name="elem2" />
  5. </div>
  6. <div id="step2">
  7. <input type="text" name="elem3" />
  8. <input type="text" name="elem4" />
  9. <input type="submit" value="zapisz" />
  10. </div>
  11. </form>

ps. utworzenie kilku osobnych formularzy - zamiast jednego dużego - nie jest dla mnie żadnym rozwiązaniem.
batman
Rozwiązanie znajdziesz u mnie na blogu. Polecam również pozostałe wpisy na temat formularzy. W zasadzie wszystko w nich jest opisane.

Odpowiedzi w skrócie:
- znacznika form nie ma, ponieważ nie dodałeś do formularza dekoratora Form.
- dla displayGroup jest odpowiednia metoda do ustawiania dekoratorów: setDisplayGroupDecorators
darko
Czyli:

  1.  
  2. $add_form = new MyForm();
  3. $add_form->addDisplayGroup(array('elem1','elem2'), 'step1');
  4. $add_form->addDisplayGroup(array('elem3','elem4'), 'step2');
  5. $add_form->clearDecorators();
  6.  
  7. $add_form
  8. ->addDecorator('FormElements')
  9. ->addDecorator('Form');
  10.  
  11. $add_form->setDisplayGroupDecorators(array(array('FormElements')));
  12.  
  13. $add_form->getDisplayGroup('step1')->addDecorator('HtmlTag', array('tag' => 'div', 'id'=>'step1'));
  14. $add_form->getDisplayGroup('step2')->addDecorator('HtmlTag', array('tag' => 'div', 'id'=>'step2'));
  15.  
  16. $add_form->setElementDecorators(
  17. array('ViewHelper'),
  18. array('Label'),
  19. array('Errors'),
  20. array('Description')
  21. );
  22. $this->view->form = $add_form;
  23. $this->render();

~batman dzięki.
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.