2012-02-25 8 views
2

私はPHPでHTMLフォームをプログラムで作成するフォームビルダーを作成したいと思いますが、オブジェクト指向にしたいと考えています。これはPHPのDOM拡張を見てくれましたが、DOMの部分ではなく、完全なHTML(およびXML)ドキュメントのコンセプトで動作するようです。PHPでDOMを使ってプログラムでフォーム(またはHTMLフラグメント)を作成する最も良い方法は?

したがって、PHPではオブジェクト指向の方法でHTMLを作成できますか?たとえば、次のように私の擬似コードが見えることがあります。

<?php 

$form = new HTMLElement('form', array('method' => 'post', 'action' => 'contact.php')); 

$fieldset = $form->addElement(new HTMLElement('fieldset')); 
$fieldset->addElement(new HTMLElement('input', array(
    'type' => 'text', 
    'name' => 'name' 
))); 
$fieldset->addElement(new HTMLElement('input', array(
    'type' => 'email', 
    'name' => 'email' 
))); 
// and so on... 

echo $form->asHTML(); 
+1

を、私はあなたができると思います[のDOMDocument](http://us.php.net/manual/en/class.domdocument.php)とし、 [DOMElement](http://www.php.net/manual/en/class.domelement.php)。 (注:私は最初のリファレンスを更新しました) –

+1

[DOMDocumentのチュートリアル](http://www.i-programmer.info/programming/php/864-object-oriented-html-generation.html?start=1) –

+0

実際に物を作るには、フォームビルダーに、HTMLやさまざまな入力インターフェースから読み込むことができる複数の入力ライブラリを含むあらゆる種類の出力用のレンダリングを持たせるべきです。 HTTPリクエストHTMLがどのように生成されるかはかなり面白くないし、レンダラーのためにかなり単純な仕事でなければならず、多くの "OO"は必要ない。 – hakre

答えて

6

をあなたはDOMDocumentを使用することができます(ところで、PHP 5が必要です):

<?php 

$html = new DOMDocument('1.0','iso-8859-1'); 
$html->formatOutput = true; 

$form = $html->createElement('form'); 

$fieldset = $html->createElement('fieldset'); 

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

$email = $html->createElement('input'); 
$email->setAttribute('type', 'text'); 
$email->setAttribute('name', 'email'); 

$fieldset->appendChild($name); 
$fieldset->appendChild($email); 

$form->appendChild($fieldset); 

$html->appendChild($form); 

echo html_entity_decode($html->saveHTML()); 
出力

http://codepad.org/sK0j6zD3

<form><fieldset> 
<input type="text" name="email"><input type="text"> 
</fieldset></form> 

さらに詳しい文書:

出力
<?php 

class br extends DOMElement { 
    function __construct() { 
     parent::__construct('br'); 
    } 
} 

$page = new DOMDocument(); 
$page->normalizeDocument(); 
$page->formatOutput = true; 

$html = $page->createElement('html'); 
$head = $page->createElement('head'); 
$title = $page->createElement('title'); 
$body = $page->createElement('body'); 
$form = $page->createElement('form'); 
$fieldset = $page->createElement('fieldset'); 
$name = $page->createElement('input'); 
$email = $page->createElement('input'); 
$submit = $page->createElement('input'); 

$title_text = $page->createTextNode('Page Title Here'); 
$title->appendChild($title_text); 

$head->appendChild($title); 

$html->appendChild($head); 

$name->setAttribute('type', 'text'); 
$name->setAttribute('name', 'name'); 

$email->setAttribute('type', 'text'); 
$email->setAttribute('name', 'email'); 

$submit->setAttribute('type','submit'); 
$submit->setAttribute('value','Submit'); 

$fieldset->appendChild($page->createTextNode('Name: ')); 
$fieldset->appendChild($name); 
$fieldset->appendChild(new br); 
$fieldset->appendChild($page->createTextNode('Email: ')); 
$fieldset->appendChild($email); 
$fieldset->appendChild(new br); 
$fieldset->appendChild($submit); 

$form->appendChild($fieldset); 

$body->appendChild($form); 

$html->appendChild($body); 

$page->appendChild($html); 

echo "<!DOCTYPE html>\n" . html_entity_decode($page->saveHTML()); 

​​

<!DOCTYPE html> 
<html> 
<head><title>Page Title Here</title></head> 
<body><form><fieldset>Name: <input type="text" name="name"><br>Email: <input type="text" name="email"><br><input type="submit" value="Submit"> 
</fieldset></form></body> 
</html> 
+0

HTMLに新しい行を作成する方法を説明できますか?動的HTMLを作成する私の最大の課題の1つは、ソースで表示する方法です。 – dcclassics

+0

特定の書式設定の方法論をお探しの場合は、[Tidy](http://php.net/manual/en/book.tidy.php)にHTML出力を提案します。空白をDOMクラスで処理する参照:http://codepad.viper-7.com/KqbLoZ –

関連する問題