デジットさんの生活便利サイトトップへ デジットさんの新着の自動表示(PHP)

トップページ > ホームページ作成 > 新着の自動表示

PHPを利用した「新着(NEW)」を指定した期間のみ、自動的に表示する方法です。日付計算をすれば、簡単に出来ます。

日付の計算方法

「PHP」には、日付を計算するのに便利なタイムスタンプに変換する「strtotime()」関数があります。タイムスタンプは、グリニッジ標準時の1970年1月1日0時0分0秒を基準にした秒数ですので、何日前何日後、何時間前などが簡単に計算できます。タイムスタンプを「yyyy/mm/dd」の様に表示したい場合は、「date()」関数を使います。
以下のファイルを用意しました。2つのファイルは同じディレクトリに置いています。

  1. 日付を含んだCSVファイル「array_data.csv」
  2. CSVファイルのデータの期間内に「NEW」を表示する「date_new.php」

新着「NEW」を表示するサンプルリスト

サンプルリストは次のとおりです。

データ用ファイル「array_data.csv」

二次元配列ソートで使ったCSVファイルと同じです。日付は、「yyyy/mm/dd」の形式で記載しておくと、タイムスタンプが使いやすくなります。

1,いち,2007/1/1
2,に,2007/1/2
3,さん,2007/1/3
4,よん,2007/1/4
5,ご,2007/1/5
6,ろく,2007/1/6
7,なな,2007/1/7
8,はち,2007/1/8
9,く,2007/1/9
10,じゅう,2007/1/10

新着「NEW」表示用実行ファイル「date_new.php」

新着「NEW」をつけるかどうか判定する実行ファイルのリストです。
「$std_date = strtotime("2007/01/10")」で基準の日付を定義しました。実際にホームページで定義する場合は、現在の日付を取得できるように、「strtotime("now")」とすればよいと思います。「$new_date = strtotime("-".$rng_date. " days",$std_date)」は、「NEW」を表示する期間(今回は「$rng_date = 6;」で、6日)から、「NEW」表示を開始する日付を計算しています。
「NEW」表示は、読み込まれた日付情報「$ch_date = strtotime($value[2])」と「$new_date」を比較し、それより前だったら""(nullデータ)後だったら"「NEW」"を「$c_new」にセットし、表示しています。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>PHP 新着「NEW」表示</title>
</head>
<body>
<p><strong>NEW表示</strong></p>
<?php
//基準の日付
$std_date = strtotime("2007/01/10");
//新着期間日数
$rng_date = 6;
//NEW表示日計算 $rng_date日前
$new_date = strtotime("-".$rng_date. " days",$std_date);
echo "基準日" .date("Y/m/d",$std_date). "から" .$rng_date. "以内は<font color='red'>「NEW」</font>表示<br/>";
echo "<font color='red'>「NEW」</font>表示は" .date("Y/m/d",$new_date). "からです。<br/>";
//CSVファイル
$fname = "array_data.csv";
//ファイルを開く
$file = fopen($fname,"r");
//データを二次元アレイに格納
while ($arry = fgetcsv($file,1000,",")){
$dcsv[] = $arry;
}
//ファイルを閉じる
fclose($file);
//ソート順を定義したソート関数を呼ぶ
usort($dcsv, "cmp");
//整列してプリント
while (list($key, $value) = each($dcsv)) {
//NEWの計算
$ch_date = strtotime($value[2]);
$c_new = (($ch_date - $new_date) >= 0) ? "<font color='red'>「NEW」</font>":"";
echo "<br>\$dcsv[$key]: " .$value[0]." " .$c_new. " " .$value[1]." ".$value[2] ;
}

//ソート関数の定義
function cmp($a, $b){
return strcmp($a[1], $b[1]);//バイナリでも使える文字列比較
}
?>
</body>
</html>

二次元配列ソートの結果

機関を指定した結果は、次のとおりです。期間内のデータに「NEW」が表示されました。

基準日2007/01/10から6以内は「NEW」表示
「NEW」表示は2007/01/04からです。

$dcsv[0]: 1  いち 2007/1/1
$dcsv[1]: 9 「NEW」 く 2007/1/9
$dcsv[2]: 5 「NEW」 ご 2007/1/5
$dcsv[3]: 3  さん 2007/1/3
$dcsv[4]: 10 「NEW」 じゅう 2007/1/10
$dcsv[5]: 7 「NEW」 なな 2007/1/7
$dcsv[6]: 2  に 2007/1/2
$dcsv[7]: 8 「NEW」 はち 2007/1/8
$dcsv[8]: 4 「NEW」 よん 2007/1/4
$dcsv[9]: 6 「NEW」 ろく 2007/1/6

これで、CSVファイルのデータを二次元配列に読み込んで、指定した配列のキーでソートすることが出来ました。
レンタルサーバーのロリポップでは、動作確認できています。

ホームページを公開するレンタルサーバーは、 ロリポップ! がお薦め、 PHP5を使うならPHP5から選ぼう。

関連ページ

ホームページ作成

PHP5を使う

アフィリエイトをする

PHPの使い方

デジットさんのホームページ入門に移行中

スポンサード リンク

Amazon.co.jpアソシエイト:
PHP&プログラミング

売れている順 新刊順

:%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%20php :php2_  :5

とことん!ホームページホームページ入門役立つサイトデジットさんのリストラ日記仮福真琴の精神科医はうそだらけ

2005-2010 Copyright © Digit-01 All Rights Reserved.