前回に引き続き、書いた記事をHTMLで保存する機能を実装します。
今回はさらにテンプレートファイルを読み込んで、記事を埋め込む処理を行いましょう。
new.htmlについては前回と同じです。
挿入・変更箇所は赤字で表示されています。
<html> <head> <title><%PAGETITLE></title> </head> <body> <h1><%PAGETITLE></h1> <h2>記事本文</h2> <%PAGECONTENTS> </body> </html>
<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( 置換前文字列, 置換後文字列, 置換対象文字列)