Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework]Zend Form
Forum PHP.pl > Forum > PHP > Frameworki
ShadowD
Jestem ciekaw jak rozwiązać problem z formami w zend mianowicie chodzi o atrybucie id w inputach, mam na stronie dwa formularze i w każdym z nich jest input o nazwie "login", dzięki czemu na stronie mam dwa razy id = "login" co jest nie poprawne i chciał bym to jakoś naprawić.

Jest jakiś łatwy sposób by dodawać przed wszystkimi id, for itp. nazwę całego forma? Czy zostaje mi napisać własny widok do formularza?
Pilsener
1. Można zmienić nazwę jednego na "login2"
2. Nie słyszałem o żadnej opcji wpływającej na nazwy, id i tak dalej
3. Ale można zmienić ręcznie:
  1. $name = new Zend_Form_Element_Text('name');
  2. $name->setAttrib('id','wefwefwfwegwegweg');
ShadowD
Można, można ale już lepszym pomysłem wydaje się zmodyfikowanie widoku na taki który będzie nadawał id, for, class itp. początek pochodzący od nazwy całego forma. Ehhh, zend to zabawa w chowanego z obchodzeniem małych problemów. ;]

ROZWIĄZANIE:
Można stworzyć klasę dziedziczącą po zend_form (tutaj nasz kolega z forum ładnie to demonstruje, poza tym tutaj znalazłem natchnienie do rozwiązania problemu - http://blog.wilgucki.pl/2010/06/uniwersaln...-zendform.html) i w niej na stałe umieścić tą regułę lub w każdym formem w jakim jest potrzebna, tylko trzeba pamiętać iż powinna być na samym końcu lub po dodaniu elementów.

  1. foreach($this->getElements() as $element) {
  2. $element->id = $this->getName().$element->getId();
  3. }


W skrócie - przechodzi po wszystkich elementach i zmienia ich Id dodając przedrostek którym jest nazwa całego forma (ustawiamy ją w taki sposób $this->setName('')), przy okazji zend jest taki inteligentny iż zmienia sam znacznik for w label, więc nic więcej nie trzeba a całość jest w pełni automatyczna. :-)
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.