前回に引き続き、書いた記事を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( 置換前文字列, 置換後文字列, 置換対象文字列)