PHPで簡易ブログを作ろう!

テンプレートの利用の章

PHP講座簡易ブログ構築スクリプト>テンプレートの利用
今回の目標:テキストエリアから受け取ったデータを編集して、テンプレートに合わせてファイルに保存する。

前回に引き続き、書いた記事をHTMLで保存する機能を実装します。

  1. ユーザーがフォームから記事を書いて送信
  2. テンプレートファイルを読み込む
  3. 読み込んだテンプレートファイルに記事を挿入しHTMLファイルを生成する

今回はさらにテンプレートファイルを読み込んで、記事を埋め込む処理を行いましょう。

サンプルスクリプト

new.htmlについては前回と同じです。

挿入・変更箇所は赤字で表示されています。

テンプレートファイル(template.php)
<html>
<head>
<title><%PAGETITLE></title>
</head>
<body>

<h1><%PAGETITLE></h1>

<h2>記事本文</h2>
<%PAGECONTENTS>

</body>
</html>
makefile.php
<html>
<head>
<title>ブログ作成</title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
</head>
<body>

<?php
$template = "template.php";	// ※1 テンプレートファイル名
$pagetitle = "私のページ";	// ※2 ページのタイトル

if ($_POST{"honbun"}) {
	$honbun = $_POST{"honbun"};

	// タグを除去する場合はコメントアウトを外す
	// $honbun = htmlspecialchars($honbun);
 
	// 文字コードをEUCに変換
	$honbun = mb_convert_encoding($honbun, "EUC-JP","AUTO");

	// ※3 改行を<br>タグに変換
	$honbun = nl2br($honbun);

	// クオーテーションマークを変換
	if(get_magic_quotes_gpc()) { $honbun = stripslashes($honbun); } 

	// 乱数を生成してファイル名に
	$filename = rand( 1000000, 9999999) . ".html";

	// ※4 テンプレートファイルの読み込み
	$contents = file_get_contents( $template);

	// ※5 タイトルと記事本文を挿入
	$contents = str_replace( "<%PAGETITLE>", htmlspecialchars($pagetitle), $contents);
	$contents = str_replace( "<%PAGECONTENTS>", $honbun, $contents);

	// ファイル生成&書き込み
	$handle = fopen( $filename, 'w');
	fwrite( $handle, $contents);
	fclose( $handle );

	// メッセージ表示
	echo $filename. "を生成し、書き込みを行いました。";
} else {
	echo "フォームから記事の内容を送信してください。";
}
?>

</body>
</html>

スクリプトの解説

$template = "template.php"; // ※1 テンプレートファイル名
テンプレートファイルは別ファイルに保存しておきます。

$pagetitle = "私のページ"; // ※2 ページのタイトル
各ページのタイトルです。本来はフォームから指定できるようにするべきですね。

// ※3 改行を<br>タグに変換
nl2br関数を使って改行文字(\n)を<br>タグに変換します。
例:echo nl2br("This is\n Sample.");
出力:This is<br>\nSample.

// ※4 テンプレートファイルの読み込み
テンプレートファイルを読み込んで変数に代入しています。ファイルの読み込みだけならば、fopen()を使うよりも file_get_contents()を使ったほうが高速です。念のために fopen()を使ったファイルの読み込みの例もあげておきます。

	// テンプレートファイルの読み込み
	$handle = fopen( $template, 'r');
	$contents = fread( $handle, filesize($template));
	fclose( $handle );

// ※5 タイトルと記事本文を挿入
これが今回の目玉です。テンプレートにある「<%PAGETITLE>」と「<%PAGECONTENTS>」という文字列をそれぞれ、ページタイトル($pagetitle)と記事本文($honbun)に置換しています。
ちなみにページタイトルはhtmlspecialchars()を使ってタグを除去しています。
str_replace( 置換前文字列, 置換後文字列, 置換対象文字列)


PHP講座簡易ブログ構築スクリプト>テンプレートの利用