SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

XSLT変換でDreamweaverのテンプレート機能っぽいことを

phpではXSLT変換機能を簡単に導入できます。
php5ではconfigureに引数–with-xslを追加するだけです。

XSLとはXMLのスタイルシート。XSLT変換によって、XMLを、違う形のXMLや(X)HTML、CSVやプレーンテキストなど、たいていのものに変換できます。

phpでの変換方法はこう。

//dom
$doc = new DOMDocument();

//xsl
$xslPath = '/path_to_xsl/xsl.xsl';
$xsl = new XSLTProcessor();
$doc->load($xslPath);
$xsl->importStyleSheet($doc);

//xml
$doc->load('/path_to_xml/xml.xml');

//xslt変換
$result = $xsl->transformToDoc($doc);

一般的なホームページでは、ヘッダ、フッタ、サイドメニューなど共通部品が多く、各ページ固有のデータは割と少ないです。
そこで、各ページ固有のデータを下のようなXMLで表現して、XSLT変換で共通部分を追加して全ページ作成するといったことをしてみました。

<page>
	<title>タイトル</title>
	<menu>通常</menu>
	<contents>
		<h1>xxxのページ</h1>
		<p>コンテンツ部分はHTMLを手書きした</p>
	</contents>
</page>

このXMLファイルをサイトのHTMLの配置と同じようにディレクトリに配置して、あるディレクトリ以下のすべてのXMLを探して、別のディレクトリに同じ配置でHTMLを書き出すphpを書いて、実行するだけでHTML一式が全部作れるようにしました。

contents部分はタグを手書きしましたが、本文部分程度で量が少ないのと、私はいつも手書きしているということから、ここは苦になりませんでした。

共通部分の変更には、XSLの変更をしてXSLT変換を実行するだけで対応できます。

XSLT変換では条件分岐も可能なので、メニューなどが複数パターンあっても簡単に対応できました。

かなり柔軟性のあるテンプレート機能ができました。
私はDreamweaverのテンプレート機能よりこっちが好き。

関連するメモ

コメント