kamenokoki.com

【12日目】リンクにPHP変数を埋め込んだ あるいは、PHPにHTMLのリンクを埋め込んだ

Posted:  Last Update:

お小遣いを稼げるサイトを目指して、12日目です。昨日はPHPで任意のファイルをページに読み込むことができるようになりました。

ロードマップ

ロードマップで進み具合を見ると、こんな感じです。

  • 準備 - サイトの全体像を決める
  • 使用するプログラミング言語を決めて環境を整える
  • サイトの基本構造を作って公開する
    • 大枠の作成
    • ヘッダの作成
    • フッタの作成
    • メイン部分の構成を作成
    • リンクを開いた時の動きを作成 ← 今ここ
    • ナビゲーションバーの作成
    • メインコンテンツの作成
    • 関連情報エリアの作成
    • 公開
  • 収益化に最適なサイトにアップグレードする
  • GoogleアドセンスとAmazonアソシエイトの申し込みをする
  • ローカルで簡単に入力ができるようにフォームを作る
  • フォローアップ - より収益化に向いたサイト構造に変更する

今日の計画を練る

昨日はなんとか目的のページをPHPで引き出すことができるようになったので、今日は昨日の計画通り下記の内容を作りたいです。

  1. if文の「$filename(ファイル名)が存在します」の部分にリンクを代入する
  2. 今までに作った構文をがっちゃんこして、5件表示できるようにする

作業に取りかかろうと検索を始めたところで、計画がおおざっぱすぎることに気付きました。もう少し細かくしないと私の鳥頭では追いつけない…。

というわけで新たな計画です。
  1. 今日の日付を呼び出して変数に格納する
  2. 1の変数をいれこんだファイルパスを作る
  3. 5個リンクを作るために、5回動作を繰り返すdo whileを作る
  4. 記事がない場合に探し続けないように、これ以上は見に行かないという日付を変数に入れる
  5. 日付に該当するファイルが存在するか判定をする
  6. PHP文内でリンクを表示できるようにする
  7. ファイルがあった場合にリンクを作って書き出す
  8. 1の変数を-1して日付をさかのぼれるようにする。
  9. ここまで来たら後は1~8をがっちゃんこして動かすだけ

1番から5番までは昨日作ってしまっているので、今日は6番からです。

PHP文内にHTMLのリンクを入れ込む

さっそく、「6.PHP文内でリンクを表示できるようにする」をやってみたいと思います。 これは昨日やったものを流用するだけで簡単にできました。「"」と「,」の組み合わせで、文字列と変数の切り替えができるんですね。

<?php
echo "<a href=" , $filename , ">" , $today , "の日記</a>";
?>

ファイルが存在するか判定して、リンクを呼び出す

「7.ファイルがあった場合にリンクを作って書き出す」に進みます。 これは「5.日付に該当するファイルが存在するか判定をす」と先ほどの「6.PHP文内でリンクを表示できるようにする」を組み合わせたものです。ファイルが存在しない場合には、今はとりあえず「存在しません」と帰すようにしておきました。

<?php
if (file_exists($filename)) {
echo "<a href=" , $filename , ">" , $today , "の日記</a>";
} else {
echo "$filename は存在しません";
}

?>

数値を文字列から日付に切り替える

「8.1の変数を-1して日付をさかのぼれるようにする。」 これ、苦労しました!$todayから一日引こうとしてもうまく動かない…。 日付の計算には「日時」の変数が必要なのに、$todayが「文字列」の変数になっているようです。ただ、ファイル名にも使っているので時間の変数に置き換えてしまうわけにも行かない…。というわけで、新たな変数$dateに一旦日付を格納して、一日引き、そこから$todayにもう一度値を渡すと言う面倒な処理をすることにしました。

一度に書くと混乱しそうなので、まずは$dateに一日遡った日付を入れられるようにしました。
<?php
$date = new DateTime('now');
$date->sub(new DateInterval('P0Y0M1D'));
echo $date->format('Y年m月d日');
?>

動いているか確認するためにこんな構文も書いてみました。 あとの画像の「8.1. 変数を-1して日付をさかのぼれるようにする。」です。

<?php
$date = new DateTime('now');
$date->sub(new DateInterval('P0Y0M1D'));
echo $date->format('Y年m月d日');
$date->sub(new DateInterval('P0Y0M1D'));



繰り返し

うまく動いているようなので、$todayから$dateに値を渡して-1日し、また$dateから$todayに値を渡すプログラムを書いてみました。

<?php
echo "最初に設定したtoday: ";
echo $today;

echo "</br>最初に設定したdate: ";
$date = new datetime($today);
echo $date->format('Y年m月d日');

echo "</br>ファイルバス: ";
$filename = "./blog/$today.txt";
echo $filename;

echo "</br>リンク: ";
echo "<a href=" , $filename , ">" , $date->format('Y年m月d日') , "の日記</a>";

echo "</br>新しい日付: ";
$date->sub(new DateInterval('P0Y0M1D'));
echo $date->format('Y年m月d日');

echo "</br></br>新しいtoday: ";
$today = $date->format('Ymd');
echo $today;

echo "</br>設定したdate: ";
$date = new datetime($today);
echo $date->format('Y年m月d日');



繰り返し

無事に動いてます!
2020.09.11 PHPの変数で日付が遡れるようになった

一日ずつ遡りながら、リンクを吐き出していくPHP

では、「9. ここまで来たら後は1~8をがっちゃんこして動かすだけ」に行きましょう。 順番に少しずつやっていきたいと思います。まずは5回繰り返すだけのPHPを書いてみました。

<?php
date_default_timezone_set('Asia/Tokyo');
$today = date("Ymd");
$Oldest=20200801;

$i = 1;
do {
$date = new datetime($today);
$filename = "./blog/$today.txt";
if (file_exists($filename)) {
echo "<a href=" , $filename , ">" , $date->format('Y年m月d日') , "の日記</a></br>";
$i = $i+1;
}
$date->sub(new DateInterval('P0Y0M1D'));
$today = $date->format('Ymd');


} while ($i < 6);
?>

なんとか動いた!試しに「9月7日」と「9月6日」のファイルを一時的に別の場所に移してテストすると、その日の文が抜けた形で認識してくれます。9月8日の次が5日になってます!
2020.09.11 繰り返し構文で日付が遡れるようになった

リンクの吐き出しを指定の日で止めるPHP

次に、日付のリミットを入れたいです。万が一、データが消えちゃったときとかにやたらと探しに行ってレスポンスタイムが長くなるのを止めてくれます。$Oldestを先ほどの構文に入れただけです。 試しに$oldestを9月9日に設定して動かすと、ちゃんと動きました。

<?php
date_default_timezone_set('Asia/Tokyo');
$today = date("Ymd");
$Oldest=20200909;

$i = 1;
do {

if ($today<$Oldest){
break;
}

$date = new datetime($today);
$filename = "./blog/$today.txt";
if (file_exists($filename)) {
echo "<a href=" , $filename , ">" , $date->format('Y年m月d日') , "の日記</a></br>";
$i = $i+1;
}
$date->sub(new DateInterval('P0Y0M1D'));
$today = $date->format('Ymd');

} while ($i < 6);
?>

実際の画像がこちら
2020.09.11 日付が遡りすぎないようにPHPで設定できた

これでリンクは完成です。たくさんコードを書いたせいか、今日は達成感のある日でした。

記事をシェアする

亀の子に連絡

ランキング参加中!ぽちっとしてね

F2cランキングアイコン 人気ブログランキング ブログランキング・にほんブログ村へ

広告