ド初心者です。
phpの練習としてカレンダーを作っています。
カレンダーの日付をクリックしたら、クリックされた日付から7日間分それぞれの時間枠(下の画像)を表示する様にしたいのですが…
1,クリック移動先のphp.ファイルを作る
2,for文内の変数$linkに aタグhref="作成したphpファイル" を記述
3,日付の値を送信できる状態にする
4,移動先phpファイルで値を受け取り、その日+6日間を表示する
みたいな感じかなと思い、もがいてみたのですが無理でした。
javascriptで取得すればいいかなと思いやってみましたが、ド初心者では最初の1しか取得できませんでした。
for文で出力し、クリックされた日付をどうやって取得するのか…できればもうちょっと先まで教えて欲しいです。
よろしくお願いします。
↓の★★★が日付(リンク)部分です。
コード // タイムゾーンを設定 date_default_timezone_set('Asia/Tokyo'); // 前月・次月リンクが押された場合は、GETパラメーターから年月を取得 if (isset($_GET['ym'])) { $ym = $_GET['ym']; } else { // 今月の年月を表示 $ym = date('Y-m'); } // タイムスタンプを作成し、フォーマットをチェックする $timestamp = strtotime($ym . '-01'); if ($timestamp === false) { $ym = date('Y-m'); $timestamp = strtotime($ym . '-01'); } // 今日の日付 フォーマット 例)2021-06-3 $today = date('Y-m-j'); // カレンダーのタイトルを作成 例)2021年6月 $html_title = date('Y年n月', $timestamp); // 前月・次月の年月を取得 // 方法1:mktimeを使う mktime(hour,minute,second,month,day,year) $prev = date('Y-m', mktime(0, 0, 0, date('m', $timestamp)-1, 1, date('Y', $timestamp))); $next = date('Y-m', mktime(0, 0, 0, date('m', $timestamp)+1, 1, date('Y', $timestamp))); // 方法2:strtotimeを使う // $prev = date('Y-m', strtotime('-1 month', $timestamp)); // $next = date('Y-m', strtotime('+1 month', $timestamp)); // 該当月の日数を取得 $day_count = date('t', $timestamp); // 1日が何曜日か 0:日 1:月 2:火 ... 6:土 // 方法1:mktimeを使う $youbi = date('w', mktime(0, 0, 0, date('m', $timestamp), 1, date('Y', $timestamp))); // 方法2 // $youbi = date('w', $timestamp); // カレンダー作成の準備 $weeks = []; $week = ''; // 第1週目:空のセルを追加 // 例)1日が火曜日だった場合、日・月曜日の2つ分の空セルを追加する $week .= str_repeat('<td></td>', $youbi); // <= (以下) for ( $day = 1; $day <= $day_count; $day++, $youbi++) { // 2021-06-3 $date = $ym . '-' . $day; ★★★★★★★★ $link = '<a class="day" ' . $date . '>' . $day . '</a>'; if ($today == $date) { // 今日の日付の場合は、class="today"をつける // ★このif文で各日付マスを作成している。<a>タグを付け足し、日付をクリックできるようにした。 // $week .= '<td class="today"><a href="index.php">' . $day ; $week .= '<td class="today cell-link" >' . $link . '</td>'; } else { // $week .= '<td><a href="index.php">' . $day ; $week .= '<td class="cell-link" >' . $link . '</td>'; } $week .= '</a></td>'; // 週終わり、または、月終わりの場合 if ($youbi % 7 == 6 || $day == $day_count) { if ($day == $day_count) { // 月の最終日の場合、空セルを追加 // 例)最終日が水曜日の場合、木・金・土曜日の空セルを追加 $week .= str_repeat('<td></td>', 6 - $youbi % 7); } // weeks配列にtrと$weekを追加する $weeks[] = '<tr>' . $week . '</tr>'; // weekをリセット $week = ''; } } ?> <style> .container { font-family: 'Noto Sans JP', sans-serif; margin-top: 10px; } a { text-decoration: none; } th { height: 30px; text-align: center; } td { height: 30px; } td:hover { background-color: yellow; } .today { background: orange !important; } /* th:nth-of-type(n) n番目の要素を指定できる この場合1番目のth(見出し文字色)とtd(列の背景色)を指定 */ th:nth-of-type(1), td:nth-of-type(1) { background-color:#ffe4e1; color: red ; } th:nth-of-type(7), td:nth-of-type(7) { background-color:#e0ffff; color: blue; } .cell-link { padding: 0; height: 0; } .cell-link a{ height: 100%; padding: 0px 5px; display: flex; align-items: center; } <?php if ( $week < strtotime(date('Y-m-d'))) { ?> a .day { pointer-events: none; } <?php } ?> </style> <div class="container"> <h3 class="mb-5" ><a class="tuki" href="?ym=<?php echo $prev; ?>"><</a> <?php echo $html_title; ?> <a class="tuki" href="?ym=<?php echo $next; ?>">></a></h3> <table class="table table-bordered"> <tr> <th>日</th> <th>月</th> <th>火</th> <th>水</th> <th>木</th> <th>金</th> <th>土</th> </tr> <?php foreach ($weeks as $week) { echo $week; } ?> </table> </div>
回答1件
あなたの回答
tips
プレビュー