Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] DOMDocument dodawanie elementów
Forum PHP.pl > Forum > Przedszkole
!*!
Napisałem klasę tworzącą formularz...

  1. class createForm extends DOMDocument
  2. {
  3. public $form;
  4.  
  5. public $data = array();
  6.  
  7. function __construct($version='1.0', $encoding='utf-8')
  8. {
  9. parent::__construct($version, $encoding);
  10.  
  11. $this->formatOutput = true;
  12. $this->form = $this-> appendChild(parent::createElement('form'));
  13. $this->form-> setAttributeNode(new DOMAttr('action', '#'));
  14. $this->form-> setAttributeNode(new DOMAttr('method', 'post'));
  15. //$this->form = $this-> appendChild(parent::createElement('fieldset'));
  16. }
  17.  
  18. function addElement($element, $data)
  19. {
  20. if($element == 'fieldset')
  21. {
  22. echo 'fieldset';
  23. }
  24. $label = $this-> createElement($element);
  25. $this->form-> appendChild($label);
  26.  
  27. // sprawdzam jaki typ pola
  28. if($data['type']){$label-> setAttributeNode(new DOMAttr('type', $data['type']));}
  29. // sprawdzam czy podano id
  30. if($data['id']){$label-> setAttributeNode(new DOMAttr('id', $data['id']));}
  31. // sprawdzam czy podano class
  32. if($data['class']){$label-> setAttributeNode(new DOMAttr('class', $data['class']));}
  33. // sprawdzam czy podano name
  34. if($data['name']){$label-> setAttributeNode(new DOMAttr('name', $data['name']));}
  35. // sprawdzam czy podano for
  36. if($data['for']){$label-> setAttributeNode(new DOMAttr('for', $data['for']));}
  37. // sprawdzam czy podano form
  38. if($data['form']){$label-> setAttributeNode(new DOMAttr('form', $data['form']));}
  39.  
  40.  
  41. if($data['value'])
  42. {
  43. if($element == 'button' || $element == 'label' || $element == 'legend')
  44. {
  45. $value = $this-> createTextNode($data['value']);
  46. $value = $label-> appendChild($value);
  47. }
  48. else{$label-> setAttributeNode(new DOMAttr('value', $data['value']));}
  49. }
  50.  
  51. } // end addElement()
  52.  
  53.  
  54. public function __toString()
  55. {
  56. return html_entity_decode($this->saveHTML());
  57. }
  58.  
  59.  
  60. }// end class createForm


przykład działania:

  1. $form = new createForm();
  2. $form-> addElement('label', array('for' => 'title', 'value' => 'Login:' ));
  3. $form-> addElement('input', array('type' => 'text', 'id' => 'title', 'class' => 'text', 'name' => 'title'));


Jednak nie wiem jak zrobić, aby dodać np element "fieldset" i aby każde elementy po nim, były wrzucane do niego, do czasu aż napotkają inny fieldset lub button.
luniak
Najprostszą metodą było by chyba dodanie zmiennej prywatnej do classy domyslnie pustej a jak otworzysz fieldset dajesz tam id fieldseta smile.gif
Potem poprostu sprawdzasz czy jest jakies id jak tak to appendujesz to co dodajesz do tego id i tyle smile.gif
a i warunek ze jezeli ktos wywola fieldset a zaisane jest id juz w tej zmiennej to czyscisz zmienna i tyle smile.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.