超簡易的なブログっぽいサイトが出来るスクリプト
ブログのように WEB 上から記事を書いて
サイトを更新していけるスクリプトを作ってみました。
管理画面これだけw
製作時間はちょうど24時間くらいでした。
タイトルと記事を書いてボタンを押すと
その記事のページが作成されてサイトに追加されます。
とりあえず適当に拾ってきた記事で、即席サイトを作ってみました。
まだタイトル画像もフッターも何もないスカスカの状態です。
さすがにこれ以上、黒に白抜きのデザインを続けると先生に怒られそうなので
今回はがんばって明るめの色にしました。
今回のスクリプトの特徴は、記事を書くと自動的に全てのページのリンクを張り直すところと、トップページに更新情報が出るところと、データベース無しで、サーバーにアップするだけで使えるところです。
マークアップとデザインは、base.html と css で調整します。
今後いろいろと機能を増やして、もっとブログっぽいサイトが素早く作成できる仕組みを目指します。
<?php print <<< html <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <style> *{ padding :0; font-size:14px; letter-spacing: 2px; } body { background:#000; color:#fff; padding:10px; } #wrap { width:900px; padding:10px; } #main { width:350px; float:left; padding:10px; } #subm { width:400px; float:left; padding:20px; border:1px #fff solid; } input { margin:0 0 20px 0; } </style> <title>管理画面</title> </head> <body> <div id="wrap"> <div id="main"> <form action="$PHP_SELF" method="post"> … タイトル …<br> <input type="text" name="title" size="40"><br> … 本文 …<br> <textarea name="honmo" rows="10" cols="40"></textarea> <br><br> <input type="submit" value=" 作成 " > </form> html; //////////////////////////////////////////////////////////////////// $site ="ネットでみつけたちょっといい話"; $count = 0; $max = 4; # 日時取得 date_default_timezone_set('Asia/Tokyo'); $nen = date("Y"); $gat = date("m"); $nic = date("d_His"); # POST $title = $_POST["title"]; $honmo = $_POST["honmo"]; # 本文が入力されていたら if ( $honmo ){ # ディレクトリ作成 if (!is_dir( "$nen" )){ umask(0); $rc = mkdir($nen,0777); if (!is_dir( "$nen/$gat" )){ umask(0); $rc = mkdir("$nen/$gat",0777); }} # 本文処理 $lines = explode("\n", $honmo ); foreach ( $lines as $lin ) { $lin = trim($lin); if ( $lin!="" ){ $hon .= "<p>$lin</p>\n"; }else{ $hon.="<br>\n"; }} # 一時処理 $html = "<title>$title</title><div id='honmon'>$hon</div><!-- honmon -->". "<div id='date'>$nen-$gat-$nic</div><!-- date -->"; # 一時データ作成 $ad_file = "$nen/$gat/".$nic.".html"; $inc = fopen( $ad_file,"w" ); fwrite( $inc,$html ); fclose( $inc ); # リンク表示 print "<a href=$ad_file target='_blank'>$nic</a><br>\n"; ########################### 各ページのリンク書き換え ########################### # リンクデータ作成 $v = 0; if ($dir1 = opendir("./")) { while (($aaa = readdir($dir1)) !== false) { if ($aaa != "." && $aaa != ".." && is_dir("./".$aaa)) { $aaa.="/"; if ($dir2 = opendir($aaa)) { while (($bbb = readdir($dir2)) !== false) { if ($bbb != "." && $bbb != ".." && is_dir($aaa.$bbb)) { $dir3 = opendir( "$aaa$bbb" ); while($fname = readdir($dir3)) if ($fname !="." && $fname !=".."){ # title取得 $ba = implode( "\n", file("$aaa$bbb/$fname")); $bb = explode( "<title>", $ba ); $bc = explode( "</title>", $bb[1] ); $link[$v] = "<li><a href='../../$aaa$bbb/$fname'>$bc[0]</a></li>\n"; $url[$v] = "$aaa$bbb/$fname\n"; $v++; } closedir($dir3); }} closedir($dir2); } }} closedir($dir1); } rsort( $link ); foreach ( $link as $vvv ){ $links .= $vvv; } rsort( $url ); foreach ( $url as $yyy ){ $urls .= $yyy; } $links = "<ul>\n<li><a href='../../'>トップページ</a>\n$links\n</ul>\n"; # 置換処理 $eee = explode( "\n" , $urls ); foreach ( $eee as $fff ) { if ($fff){ # 抜き取り $a = implode( "", file( $fff )); $b = explode("<title>", $a ); $c = explode("</title>", $b[1] ); $tit = $c[0]; $d = explode("<div id='honmon'>", $a ); $e = explode("</div><!-- honmon -->", $d[1] ); $honmo = $e[0]; $f = explode("<div id='date'>", $a ); $g = explode("</div><!-- date -->", $f[1] ); $h = explode("_",$g[0]); $date = $h[0]; # base.html 読み込み $lines = file("base.html"); $base=""; foreach ($lines as $lin) { $base .= $lin; } # 置換処理 $x = explode("<title>", $base ); $y = explode("</title>", $x[1] ); $base = $x[0]."<title>$tit</title>".$y[1]; $x = explode("<h1>", $base ); $y = explode("</h1>", $x[1] ); $base = $x[0]."<h1>$tit</h1>".$y[1]; $x = explode("<div id='honmon'>", $base ); $y = explode("</div><!-- honmon -->", $x[1] ); $base = $x[0]."<div id='honmon'>\n$honmo</div><!-- honmon -->".$y[1]; $x = explode("<div id='date'>", $base ); $y = explode("</div><!-- date -->", $x[1] ); $html = $x[0]."<div id='date'>\n$date</div><!-- date -->".$y[1]; $l = explode('<div id="link">', $html ); $m = explode('</div><!-- link -->', $l[1] ); # 相対パスリンク調節 $o = explode( "/" , $fff ); $p = "../../".$o[0]."/".$o[1]."/"; $q = explode( $p , $links ); $r = implode( "" , $q ); $html = $l[0].'<div id="link">'."\n$r</div><!-- link -->".$m[1]; # 更新履歴用データ作成 $count++; if ($count <= $max){ $rrr = str_replace("<p>", "", $honmo ); $rrr = str_replace("</p>", "", $rrr ); $rrr = str_replace("\n", "", $rrr ); $rrr = mb_strimwidth( $rrr,0,200,"… ","UTF-8" ); $rireki .= "<div class='hanp'>$date <h2>$tit</h2>\n<p>". $rrr."<a href='$fff'>続きはこちら</a></p></div>\n"; } # html作成 $inc = fopen( $fff,"w" ); fwrite( $inc,$html ); fclose( $inc ); }} ############################## index ############################################# # base.html 読み込み $lines = file("base.html"); $base=""; foreach ($lines as $lin) { $base .= $lin; } $x = explode("<title>", $base ); $y = explode("</title>", $x[1] ); $base = $x[0]."<title>$site</title>".$y[1]; $x = explode("<h1>", $base ); $y = explode("</h1>", $x[1] ); $base = $x[0]."<h1>$site</h1>".$y[1]; $x = explode("<div id='honmon'>", $base ); $y = explode("</div><!-- honmon -->", $x[1] ); $base = $x[0]."<div id='honmon'>\n$rireki</div><!-- honmon -->".$y[1]; $l = explode('<div id="link">', $base ); $m = explode('</div><!-- link -->', $l[1] ); $base = $l[0].'<div id="link">'."\n$links</div><!-- link -->".$m[1]; $base = str_replace("../../", "", $base ); # html作成 $inc = fopen( "index.html","w" ); fwrite( $inc,$base ); fclose( $inc ); } // 本文が入力されていたら print "</div><!-- main -->\n\n". "<div id='subm'><h2>$title</h2>\n$hon\n". "</div><!-- subm -->\n\n". "</div><!-- wrap -->\n". "\n</body>\n</html>";
base.html
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <link rel='stylesheet' href='../../style.css' type='text/css' media='screen,print'> <title></title> </head> <body> <div id="oosoto"> <div id="title"> </div> <div id="main"> <h1></h1> <div id='honmon'> </div><!-- honmon --> <div id='date'> </div><!-- date --> </div><!-- main --> <div id="pan"> </div><!-- pan --> <div id="link"> </div><!-- link --> <div id="foot"> </div><!-- foot --> </div><!-- oosoto --> </body> </html>