質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2143閲覧

PHP 月別アーカイブを自動で

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/03/20 06:15

編集2018/03/20 07:20

実現したいこと

月別のアーカイブを自動で表示されるようにしたく
基本的なところは下記のページと同じなのですが
https://teratail.com/questions/29204

2018年 1月 2月 3月 4月
2017年 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
2016年 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月

実現したいのは、上のように過去の年は下に表示し
上にあたらしい年が積み上がっているようにしたいです。
また、今の月の翌月まで表示させたいです

新しい年を上に出す方法がどうにもわかりません。。

いただいた回答を元に新しい年を上に表示することはできました。
リスト表示にしたいので、少し書き換えています。

$year = date('Y'); $yearFin = 2013; while($year >= $yearFin) { echo '<p>'.$year.'年</p>'; echo '<ul>'; for ($month = 1; $month <= 12; $month++) { if (sprintf('%04d%02d', $year, $month) <= date('Ym')) { echo '<li><a href="'.home_url().'/works/'.$year.''.sprintf('%02d',$month).'">'.$month.'月</a></li>'; } } echo "</ul>"; $year--; }

また

if (sprintf('%04d%02d', $year, $month-1) <= date('Ym')) {

このように変更すると1月多く表示できたのですが
毎年これで正しく動くのか、自信がありません。

ご教授いただけたら幸いです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kszk311

2018/03/20 06:23

コピペから少しずつ修正でもいいので、とりあえず自分でできるところまでやって見てください。分からないところは、何が分からないのか(何で悩んでいるのか)明確にしてください。
退会済みユーザー

退会済みユーザー

2018/03/20 06:29

上記ページのコードで何をしているのかは何となく分かるのですが、順番に表示させているのでそれを逆にする方法がどうにもわかりません。。
guest

回答2

0

以下のようなコードでいかがでしょうか。

php

1$ymax = date('Y'); # 表示年の最大値 2$ymin = date('Y')-2; # 表示年の最小値 3$mmax = date('n')+1; # 最新年における最大月 4 5# 年単位のループ処理 6for($year=$ymax; $year>=$ymin; $year--){ 7 print "{$year}年"; 8 # 月単位のループ処理 9 for($month=1; $month<=12; $month++){ 10 # 最新年の指定月以降を表示しない 11 if($year == $ymax && $month > $mmax){ 12 break; 13 } 14 print "<a href='#'>{$month}月</a>"; 15 } 16 print "<br>"; 17}

投稿2018/03/20 06:44

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/03/20 07:16 編集

減らしていく処理をすればよかったのですね。 1月多く表示させる方法も入れていただきありがとうございます! 「表示年の最小値」を指定しているところは、今の年(2018)-2ということですよね? となると毎年書き換えが必要になってしまいますよね?
guest

0

ベストアンサー

とりあえず参考ソースの方を少しだけ修正します。
変数$yearFinを追加しています。

php

1 <table> 2 <?php 3 $year = 2016; 4 $yearFin = date('Y'); 5 while($year <= $yearFin) { 6 echo "<tr><td>{$year}年</td>"; 7 for ($month = 1; $month <= 12; $month++) { 8 if (sprintf('%04d%02d', $year, $month) > date('Ym')) { 9 echo '<td>&nbsp;</td>'; 10 } 11 else { 12 echo '<td><a href="'.$year.'-'.sprintf('%02d',$month).'">'.$month.'月</a></td>'; 13 } 14 } 15 echo "</tr>"; 16 $year++; 17 } 18 ?> 19 </table>

上記ソースから、年だけを逆にした処理になります。
修正箇所は4箇所です。

php

1 <table> 2 <?php 3 $year = date('Y');//$yearFinと入れ替える 4 $yearFin = 2016;//$yearと入れ替える 5 while($year >= $yearFin) {//条件式を逆に 6 echo "<tr><td>{$year}年</td>"; 7 for ($month = 1; $month <= 12; $month++) { 8 if (sprintf('%04d%02d', $year, $month) > date('Ym')) { 9 echo '<td>&nbsp;</td>'; 10 } 11 else { 12 echo '<td><a href="'.$year.'-'.sprintf('%02d',$month).'">'.$month.'月</a></td>'; 13 } 14 } 15 echo "</tr>"; 16 $year--;//増やしているのを減らす 17 } 18 ?> 19 </table>

投稿2018/03/20 06:42

kszk311

総合スコア3404

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/03/20 06:58

なるほど!スタートの年まで減らしていけばよかったのですね。 参考にさせていただきます!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問