2007年9月13日木曜日

PEAR::HTML_Page2を使う

PEARにHTML_Page2という、HTMLページを作成するためのパッケージがある。HTML_Page2については、PEARのサイトにHTML_Page2のドキュメント(日本語)があって、このドキュメントを見れば特にこの先の話は必要ではないかもしれないが、初めてHTML_Page2を使う人向けに簡単な例を書こうと思う。

まず、HTML_Page2の基本的な使い方は以下の通り。

  • オブジェクトの作成(newする)
  • ヘッダー関連を設定する
  • ボディコンテンツの追加
  • HTMLの出力

オブジェクトの作成

newのパラメタ(すなわちコンストラクタのパラメタ)にいくつかの情報を設定することができる。
まず、この文章を読んでいる人たちは、languageを"ja"にしたいと思うだろう。Windowsだったら、改行コードを"\r\n"にしたいと思うだろう。 という設定をしてインスタンスを生成するには、以下の通りにする。

require_once 'HTML/Page2.php';
$attributes = array(
 'language' => 'ja',
 'lineend' => 'win',
);
$page = new HTML_Page2($attributes);

ヘッダー関連を設定する

まずはHTML的にtitleタグが必須であるので、タイトルを設定する。あと、HTML_Page2でHTMLを生成すると、"Generator"をいうメタタグを設定するのであるが、これをなくしたいと思うとすると。以下の通りにすればよい。

$page->setTitle('ページのタイトル');
$page->setMetaData('Generator', NULL);

あとは、スクリプトやスタイルシートの設定などについては、PEARのドキュメントに詳しく書いてある。

ボディコンテンツの追加

あとは、ブラウザに表示されるコンテンツを追加していけばよい。このとき、HTML_Page2::addBodyContent()というメソッドを使う。このメソッドの引数にHTMLのタグを含む文字列(String)を追加していけばよい。 また、このメソッドは、文字列だけでなく、オブジェクトも追加することができる。このときこのオブジェクトにtoHTML()もしくはtoString()というメソッドを実装しておくと、HTML_Page2がHTMLを生成するときに、それぞれのオブジェクトのこれらのメソッドを呼び出し、その結果を取り込み出力する。
さらにHTML_Page2::addBodyContent()は、文字列やこのようなオブジェクトを含む配列(array)も渡すことができる。このときは、配列に含まれる順番に追加されていく。

ちなみにPEARに含まれるHTMLのパッケージ群は、toHTML()が実装されているので、オブジェクトのまま追加することができる。PEARのパッケージを使わなくても自前クラスでtoHTML()を実装して、HTML_Page2::addBodyContent()に渡すというやり方がHTML_Page2の多い使い方ではないかと思う。

HTMLの出力

ボディコンテンツを全て追加した後、HTMLとして出力する。

$page->display();

この例では標準出力に吐き出すが、文字列として結果を得るにはHTML_Page2::toHTML()を使う。また、HTML_Page2::toFile()というメソッドがあるが、これは引数にファイル名を与えるとそこに出力するというものである。

HTML_Page2の派生

上記のオブジェクトの生成で、"language"や"lineend"のパラメタを毎回コンストラクタに渡したりするよりは、クラスを派生したほうがよっぽどエレガントであると思われる。

require_once 'HTML/Page2.php';
class MyHTMLPage extends HTML_Page2 {
 function __construct($attributes = NULL) {
  if ($attributes != NULL) {
   if (!array_key_exists('language', $attributes)) {
    $attributes['language'] = 'ja';
   }
   if (!array_key_exists('lineend', $attributes)) {
    $attributes['lineend'] = 'win';
   }
  }
  else {
   $attributes = array('language' => 'ja', 'lineend' => 'win');
  }
  parent::__construct($attributes);
  $this->setMetaData('Generator', NULL);
 }
}

もちろん、これ以外のヘッダ関連の設定などを追加したほうが便利なことが多いだろう。

0 件のコメント: