Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] zend_form
Forum PHP.pl > Forum > PHP > Frameworki
larson7221
Witam jestem początkującym w zend framework i jestem ciekawy jak można w tym frameworku zrobić coś takiego
jak jest w panelach administracyjnych czyli np przy wyświetlaniu newsów
[checkbox] | np tytuł | opcje
[checkbox] | np tytuł | opcje
[checkbox] | np tytuł | opcje
<input type="submit" value="usuń zaznaczone" >

dotychczas programując w PHP robiłem to bardzo prosto
jakaś tam pętla
  1. while($r=mysql_fetch_array($query))
  2. {
  3. echo '<input type="checkbox" name="usun[]" value="'.$r['id'].'">';
  4. // tutaj jakieś nazwy itp
  5. }

no wiecie w każdym razie o co mi chodzi . W zendzie formularze robi się za pomocą
zend form można sobie zrobić tam klasę popuzupełniąć to metodami i wyświetlić do widoku
A co z formularzami tego typu jak ja podałem ? czyli generowanymi z bazy danych
mam to zrobić w widoku czy jest jakiś ładniejszy sposób na to ?

jeśli ktoś by był tak miły i miał to w swoich projektach proszę o przykładowe rozwiązanie ja już sobię oblukam jak to jest zrobione pozdrawiam ;D


ps sorki za taki chaos w moim pytaniu
Pilsener
Normalnie w Zend _Form robisz:
  1. $model = new Model();
  2. $data = $model->getData();
  3. //używasz $data w pętli


Parametry do formularza (jeśli jakieś są) przekazuje przez kontroler i konstruktor formularza. Ale pewnie nic nie stoi na przeszkodzie, żeby robić to bezpośrednio w formularzu. Można też w kontrolerze obrabiać fomularz:
  1. $form = new Zend_Form();
  2. //add option to list_something form element
  3. $form->list_something->addOption('key','value');

larson7221
dzięki , trochę mi rozjaśniłeś sprawę jak wrócę do domu to się pobawię wink.gif

  1. <?php
  2.  
  3. class Application_Form_Newssedit extends Zend_Form
  4. {
  5.  
  6. public function init()
  7. {
  8. $model = new Application_Model_DbTable_News();
  9. $row = $model->selectNews();
  10. foreach($row as $option=>$op)
  11. {
  12.  
  13. $usun = new Zend_Form_Element_Checkbox("usun[]");
  14. $usun->setValue($op['id']);
  15. $this->addElement($usun);
  16.  
  17.  
  18. }
  19. $this->setMethod('post');
  20.  
  21. }
  22.  
  23.  
  24. }
  25.  
  26.  


Chyba jednak nie działa wyświetla mi tylko jeden chckbox na dodatek ze złym id
  1. <form enctype="application/x-www-form-urlencoded" method="post" action=""><dl class="zend_form">
  2.  
  3. <dt id="usun-label"> </dt>
  4.  
  5. <dd id="usun-element">
  6.  
  7. <input type="hidden" name="usun" value="0" /><input type="checkbox" name="usun" id="usun" value="1" /></dd></dl></form>
  8.  

oto wygenerowany kod
model jest na 100% dobrze zrobiony bo w widoku użyłem go identycznie i wyświetla newsy
ps poza tym nadal nie wiem jak
wyświetlić formularz tak jak powyżej
melkorm
Zend_Form_Element_MultiCheckbox
larson7221
dzięki

  1. <?php
  2.  
  3. class Application_Form_Newssedit extends Zend_Form
  4. {
  5.  
  6. public function init()
  7. {
  8. $model = new Application_Model_DbTable_News();
  9. $row = $model->selectNews();
  10. foreach($row as $option)
  11. {
  12.  
  13. $tab[]= $option['id'];
  14.  
  15.  
  16.  
  17. }
  18. $usun = new Zend_Form_Element_MultiCheckbox("usun[]",array('multiOptions'=>$tab));
  19. $this->addElement($usun);
  20. $this->setMethod('post');
  21.  
  22. }
  23.  
  24.  
  25. }
  26.  
  27.  


doszedłem do tego momentu ok
ale ja potrzebuję utworzyć dokładnie taki formularz + stronicowanie




ps doszedłem do czegoś takiego jak dekoratory czy dzięki temu będę mógł stworzyć to co chcę ?
melkorm
Jak chcesz być masochistą to proszę bardzo smile.gif Nikt nie powiedział że MUSISZ wyświetlać Zend_Forma.
larson7221
rozumiem że nikt nie potrafi mi pomóc i jest to ciężkie do zrobienia ? .
Szukam już 4 godzinę jakiejś metody która mogła by wyświetlić obiekt checkbox z Zend_Form_Element_MultiCheckbox
tak jak się to robi $this->form2->getelement("usun");
tylko że w przypadku Zend_Form_Element_MultiCheckbox wszystkie checkobxy mają name=usun[] to zrozumiałe bo nazwa powinna być tablicą chcąc gdzieś te dane przesłać ale nie załatwia mnie to bo tych checkboxów nie mogę sobie poukładać jak chcę . Metoda getElement pobiera wd name a nie wd id elementu
czy jest na to jakiś sposób ?
jeszcze raz bardzo proszę o pomoc .
Koniecznie muszę zaimplementować w ten sposób formularz , jak podany jest na zdjęciu .
irmidjusz
Generalnie zendowe formularze mają to do siebie, że czasem są upierdliwe do stylowania wyglądu. Ale wszystko się da zrobić biggrin.gif

1. W najprostszych przypadkach, można przypisać odpowiednim elementom formularza atrybuty ID oraz CLASS i w arkuszu CSS kombinować jak elementy poustawiać, aby wyglądały jak chcemy.

2. Jak powyższe to za mało, to możesz zmienić ustawienia dekoratorów elementów formularza oraz dekoratorów samego formularza. Czasem sama zmiana kolejności użytych dekoratorów pozwala osiągnąć zamierzony efekt. Tym sposobem wyrenderowany formularz nie zawiera domyślnych tagów <dd>, <dl> itd., tylko powiedzmy <ul>, <li>, <div> i tak dalej - co sobie sam ustalisz, z odpowiednimi nazwami klas itd.

3. Największą kontrolę w określaniu wyglądu formularza masz wówczas, gdy do jego renderowania użyjesz dekoratora viewScript, bo to polega na tym, że tworzysz dla takiego formularza osobny plik widoku (.phtml) i w nim konstruujesz cały HTML ręcznie. W takim widoku dostępne są wszystkie dodane do formularza elementy i atrybuty samego formularza oraz view helpery - jest to standardowy szablon przetwarzany przez Zend_View.

Można to zrobić np. tak:
w metodzie init() formularza (albo konstruktorze, czy po prostu na obiekcie forma, bo metoda jest pubiczna) wywołujesz:

  1. //tu przykład wewnątrz init() formularza
  2. public function init() {
  3. $this->setDecorators(array(
  4. array('ViewScript', array('viewScript' => 'widok_formularza.phtml'))
  5. ));
  6. }


Powyższy kod zastępuje domyślne dekoratory formularza jednym, który używa do wyrenderowania formularza szablonu widok_formularza.phtml.

Ten szablon musi znajdować się w ścieżce, w której znajdzie go Zend_View; możesz też ustawić taką ścieżkę do własnego folderu, w którym trzymasz ten plik, wywołując metodę addScriptPath() obiektu Zend_View zwracanego przez Zend_Form::getView():

  1. //dalej przykład w metodzie init()
  2. $this->getView()->addScriptPath('tutaj/sciezka/do/folderu/z/plikiem/szablonu);


I teraz zostaje tylko utworzenie szablonu widok_formularza.phtml. Przykłady jak to robić:

http://framework.zend.com/manual/en/zend.f...tors.viewScript
http://www.karolnowicki.pl/zend-framework/...w-zend_form-se/

po więcej szukaj w google: zend_form viewScript

Przydatne materiały o dekoratorach formularzy są w manualu zenda i np. tutaj:
http://devzone.zend.com/1240/decorators-with-zend_form/

larson7221
dzięki smile.gif ale chyba zrobie to najprościej jak tylko można czyli w tym wypadku po prostu wstawię inputy i formy ręcznie do widoku . Ten sposób co opisałeś oczywiście tak lecz różni się od moich wcześniejszych dokonań jedynie tym , że cały formularz implementuje w oddzielnym pliczku co ma jedynie walory estetyczne . Całą resztę spokojnie mogę wywoływać na poziomie widoku więc jest mi to zbyteczne aktualnie . Natomiast mało tego przeszperałem konstrukcje dekoratorów Zend_Form_Element_MultiCheckbox oraz samą klasę Zend_Form_Element_MultiCheckbox i nie znalazłem w tym przypadku obiektu wyciągającego checkoboxy . Zdaje się że panowie z ZF potraktowali ten obiekt jako całą i nierozłączną klasę , sposób w jaki renderuje się ten obiekt nie pozwala chyba na oddzielenie tych elementów . No trudno nie ma rozwiązań doskonałych i tak formularz który będę tutaj implementował nie będzie powtarzany więc tylko trochę nagnę filozofię zend wink.gif)
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.