今回はhtmlファイル内にphpコードを記述する際に、すっきりキレイにさせる方法を書いていきます。
こちらの記事のソースコードを使用します。
htmlファイルとphpファイルを分ける
まずは、htmlファイルとphpファイルに分けましょう。
今回も保存先はC:\xampp\htdocs\testです。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHPでカレンダー作成</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<?php
require_once('common.php');
print_calendar();
?>
</body>
</html>
<?php
function print_calendar(){
/* 見出し(曜日)の配列を作成する */
$youbi = ['日','月','火','水','木','金','土'];
/* 今月頭の年月日を取得する */
$today = date('Y-m').'-01';
/* 表示するカレンダーの年月を表示 */
print date('Y年m月');
/* テーブルタグを表示 */
print '<table>';
/* 見出し含め、7行分ループ処理 */
for($i=0;$i<7;$i++){
/* テーブルのtrタグを表示(行) */
print '<tr>';
/* 一週間(7日)ループ処理 */
for($j=0;$j<7;$j++){
/* 見出し部分(最初の行)か */
if($i==0){/* $iが0の時は、先頭行なので、曜日を表示する。 */
/* 今表示するのは何曜日? */
switch($j){
case 0:/* 日曜日(クラス付与) */
print '<th class="Sunday">';
break;
case 6:/* 土曜日(クラス付与) */
print '<th class="Saturday">';
break;
default:/* その他 */
print '<th>';
break;
}
/* 曜日を表示 */
print $youbi[$j].'</th>';
}else{/* $iが0以外の時は、2行目以降なので、日を表示する。 */
/* 処理する日は今月か? */
if($today<=date('Y-m-t') && date('w',strtotime($today))==$j){
/* 今表示するのは何曜日? */
switch($j){
case 0:/* 日曜日(クラス付与) */
print '<td class="Sunday ';
break;
case 6:/* 土曜日(クラス付与) */
print '<td class="Saturday ';
break;
default:/* その他 */
print '<td class="';
break;
}
/* 今日は背景を黄色にする(クラス付与) */
if($today==date('Y-m-d')){
print 'Today';
}
/* 日を表示 */
print ' ">'.date('d',strtotime($today)).'</td>';
/* 次の処理用に年月日を+1日更新 */
$today = date('Y-m-d',strtotime($today.' +1 days'));
}else{
/* 今月外の場合は枠だけ表示 */
print '<td> </td>';
}
}
}
/* テーブルのtrタグ終わりを表示 */
print '</tr>';
}
/* テーブルの終わりを表示 */
print '</table>';
}
?>
ついでにCSSも分けましょう。
table,tr,td,th{ border: solid 1px black; border-collapse: collapse; }
.Saturday{ color:blue; }
.Sunday{ color:red; }
.Today{ background:yellow; }
一部コードが変わっていますが、これで別ファイルにphpコードを記述することができました。
整理すると、C:\xampp\htdocs\testの下に下記3つのファイルができました。
・study_calendar.html
・common.php
・style.css
できたら、xamppを立ち上げて、http://localhost/test/study_calendar.htmlにアクセスしてみましょう。
PHPカレンダーの解説
まずはhtmlから解説します。
元の記事で、bodyに直接phpコードを記述していましたが、今回は9行目~12行目だけになっています。
9行目と12行目は、ここはphpコードですよの記述です。
10行目は、common.phpを読み込んでいます。
今回はtestフォルダにcommon.phpを保存していますが、例えばtest/php/というパスならば、ここの記述はphp/common.phpとなります。
11行目でprint_calendarという関数を実行しています。
次にphpの解説です。
元の記事の、body内のコードをすべてこちらに移しています。
1行目と69行目は、ここはphpコードですよの記述です。
2行目でfunction print_calendar()というコードを追加してありますが、これは関数を定義していて、{}で囲まれた部分がprint_calendar()で実行されます。
逆にいうと、htmlファイル内でprint_calendar()を記述した箇所で、{}で囲まれた部分が実行されます。
3行目から67行目は、元の記事のbody内のコードです。
【おまけ解説】関数の名前は内容を連想させるように
今回作った関数の名前はprint_calendarでした。
ぱっと見て、”あぁ、calendarをprintするんだな。”というように、関数名をつける際は、名前だけでなんとなく何をするかわかるようにするのが基本です。
勉強用だと気にしませんが、開発規模が大きくなるにつれて、管理するのも大変になりますからね。
私は勤怠システムを作って、途中で自爆しましたので。(ちゃんと整理しました。)
関数名だけではなく、変数名もなるべくわかりやすいほうが良いです。
ただし、長くなりすぎてもコード自体の可読性が下がりますので、いい感じのところを見つけましょう。
私は名前を決める際には”動詞+名詞”としています。
(Get_hogehoge,Set_hogehoge等々。)