2015-04-28 1 views
1

, что им пытаются сделать, это загрузить форму и создавать элементы внутри него, но я в конечном итоге с чем-то вроде этого:PHP форма дом нагрузки и создать элемент внутри

<form id="form_54" accept-charset="utf-8"></form><input type="text" name="name"> 

outpot я смотрю на это:

<form id="form_54" accept-charset="utf-8"><input type="text" name="name"></form> 

это моя функция:

public function input($name, $attributes = array(), $type = 'text') 
{ 
    $form = new DOMDocument(); 
    $form->loadXML($this->doc->saveHTML()); 

    $input = $form->createElement('input'); 
    $input->setAttribute('type', $type); 
    $input->setAttribute('name', $name); 

    if(isset($attributes)) 
    { 
     foreach($attributes as $attr => $val) 
     { 
      $input->setAttribute($attr, $val); 
     } 
    } 

    $form->appendChild($input); 
    $this->doc->loadXML($form->saveHTML()); 
} 

Правильная функция благодаря Духу:

public function input($name, $attributes = array(), $type = 'text') 
{ 
    $form = $this->doc->getElementsByTagName('form')->item(0); 

    $input = $this->doc->createElement('input'); 
    $input->setAttribute('type', $type); 
    $input->setAttribute('name', $name); 

    if(isset($attributes)) 
    { 
     foreach($attributes as $attr => $val) 
     { 
      $input->setAttribute($attr, $val); 
     } 
    } 

    $form->appendChild($input); 
    $this->doc->appendChild($form); 
} 
+1

так в чем проблема? – Ghost

+0

Я отредактировал вопрос –

+0

Где вы добавляете 'form'? Это уже в 'DOM'? – Manwal

ответ

0

Скорее всего, вы добавляете к родительскому элементу вместо формы. Сначала попробуйте настроить таргетинг на форму, затем добавьте ее.

public function input($name, $attributes = array(), $type = 'text') 
{ 
    $dom = new DOMDocument(); 
    $dom->loadXML($this->doc->saveHTML()); 
    // target the form 
    $form = $dom->getElementsByTagName('form')->item(0); 

    $input = $dom->createElement('input'); 
    $input->setAttribute('type', $type); 
    $input->setAttribute('name', $name); 

    if(isset($attributes)) 
    { 
     foreach($attributes as $attr => $val) 
     { 
      $input->setAttribute($attr, $val); 
     } 
    } 

    $form->appendChild($input); 
    $this->doc->loadXML($form->saveHTML()); 
} 
+0

Ваше решение не работает. однако getElementsByTagName ('form') -> item (0); что вы упомянули, это то, что мне нужно. поэтому я закончил с правильной функцией, и добавил к моему вопросу. Спасибо! –

+0

@ jailbird.phoenix oh да, я забыл, что экземпляр вашего объекта был внутри '-> doc', в любом случае рад, что это помогло – Ghost