Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Problem z Udekorowaniem elementu "file"
Forum PHP.pl > Forum > PHP > Frameworki
Sajrox
Witam,

Otoż chciałbym udekorować element file tak samo jak pole text czy textarea. Niestety w momencie dodania obiektu file do formularza otrzymuje błąd:

Kod
Warning: No file decorator found... unable to render file element in C:\wamp\www\library\Zend\Form\Element.php on line 1931

Gdy z typu pola zmienie z file na text to wszystko działa poprawnie. Na to wygląda że pole file nie przyjmuje mojego dekoratora

Cały kod
  1.  
  2. $this->setAction('')->setMethod('post');
  3. $this->setAttrib('enctype', 'multipart/form-data');
  4. $this->setName('select');
  5.  
  6. # Tworzenie pola title
  7. $this->addElement('file', 'photo', array(
  8. 'label' => 'Zdjęcie',
  9. ));
  10. # End
  11.  
  12. # Tworzenie przycisków
  13. $this->addElement('submit', 'save', array(
  14. 'value' => 'Zapisz',
  15. ));
  16. # End
  17.  
  18. // dekoratory - działa tylko gdy w formularzu nie mam pól typu file
  19. $this->clearDecorators();
  20. $this->addDecorator('FormElements')
  21. ->addDecorator('HtmlTag', array('tag' => 'div', 'class' => 'form'))
  22. ->addDecorator('Form');
  23.  
  24. $this->setElementDecorators(array(
  25. array('ViewHelper'),
  26. array('Errors', array('tag' => 'div', 'class' => 'element-errors')),
  27. array('Label', array('tag' => 'div', 'class' => 'element-label')),
  28. array('HtmlTag', array('tag' => 'div', 'class' => 'element-group'))
  29. ));
  30.  
  31.  
  32. return $this;


Jak w takim razie udekorować pole typu file ?
seth-kk
brakuje dekoratora File (Zend_Form_Decorator_File)
Sajrox
Faktycznie działa smile.gif Dzięki !
Rozwiązanie było proste i praktycznie w zasięgu ręki. hehe
Ikky
A ja mam takie pytanie co mi właściwie daje używanie dekoratorow nie mogę dać np setAttrib class coś ?
seth-kk
w uproszczeniu setAttrib() ma kontrole nad samym <input /> a dekoratory nad jego otoczeniem
Sajrox
Dekoratory to piękna sprawa, jeszcze piekniej by było gdyby wszystko działalo poprawnie w polu typu file.
MOżna powiedzieć że wszystko działa z takim wyjątkiem że zamiast jednego pola typu file na ekranie widze ich dwa :/

Moj dekorator pola file o nazwie photo

  1. $this->setDecorators(array(
  2. array('ViewHelper'),
  3. array('Errors', array('tag' => 'div', 'class' => 'element-errors', 'placement' => 'prepend')),
  4. array('Label', array('requiredSuffix' => '*')),
  5. array('HtmlTag', array('tag' => 'div', 'class' => 'element-group')),
  6. array('Description', array('tag' => 'div', 'class' => 'element-description')),
  7. array('File', array('tag' => 'div', 'class' => 'element-group'))
  8. ));



W tym przypadku na ekranie mam 2 pola file.

po usunięciu z dekoratora: array('ViewHelper'),
a dokładnie

  1. $this->setDecorators(array(
  2. // array('ViewHelper'),
  3. array('Errors', array('tag' => 'div', 'class' => 'element-errors', 'placement' => 'prepend')),
  4. array('Label', array('requiredSuffix' => '*')),
  5. array('HtmlTag', array('tag' => 'div', 'class' => 'element-group')),
  6. array('Description', array('tag' => 'div', 'class' => 'element-description')),
  7. array('File', array('tag' => 'div', 'class' => 'element-group'))
  8. ));
  9.  


Działa lepiej z tym wyjątkiem że dekoruje divem o nazwie class="element-group" tylko samego labela pomijajać pole input/file.
To powoduje że formularz nie wygląda tak jak powinien bo <div class="element-group"> powinien zawierać w sobie labela oraz pole input. Jednak tak nie jest sad.gif
Poprawia ten problem dodanie z powrotem: array('ViewHelper'), ale wtedy widze 2 pola input/file :/


Edit
--------------------------------------
OK znalazłem rozwiąznie smile.gif
  1. $this->setDecorators(array(
  2. 'File',
  3. array('Label',
  4. array('requiredSuffix' => ': *', 'optionalSuffix' => ':')),
  5. array('Description',
  6. array('tag' => 'div', 'class' => 'element-description')),
  7. array('Errors',
  8. array('tag' => 'div', 'class' => 'element-errors', 'placement' => 'prepend')),
  9. array('HtmlTag',
  10. array('tag' => 'div', 'class' => 'element-group')),
  11. ));

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.