popularプラグインの動作がおかしい?
今日の人気、昨日の人気を設置してみて気づいたのですが、
- 昨日の人気は今日の人気
で表示したページを優先してのページを元に表示するページを決定するようです。 - 昨日の人気で30ページの閲覧があっても今日の時点で3ページしか閲覧が無ければ「昨日の件○件」は「昨日の3件」と表示され3ページ分の閲覧件数情報のみ表示されます。
つまり今日の閲覧が0件の時、昨日の人気は何も表示されないということです。 - 今日の2時頃、21頃のスクリーンショット 21時の時点では昨日の上位ランキングページが全て閲覧されているので正常に表示されているように見えるが、変わるはずの無い昨日のランキングで2時と21時の内容が変わっている事から正しくない事がわかるかと思います。
分析
- 5件までを表示する設定
今日の5件 Perl(1) bbs(1) PukiWiki/plugin(1) PukiWiki/make/table_edit2.inc.php(1) experimental(1) 昨日閲覧の無いページ 昨日の5件 PukiWiki/make/table_edit2.inc.php(5) 昨日は2番目 bbs(3) ランク外 Perl(2) ランク外 diary/2006-08-15(2) 何故出てきたか不明 PukiWiki/plugin(2) ランク外
PukiWiki Plus! 質問箱/80のコメントより
- 環境によって動作が違うという事ですね。この事から私のサイトがPHP5.1.4が原因していると判断して、ちょっと調べてみました。
- 2006/10/27 0:10 のpopular内変数の値
- PHP5.1.4
$yesterday = 2006/10/25
$today = 2006/10/27- PHP4.3.11
$yesterday = 2006/10/26
$today = 2006/10/27- これはstrtotime関数が5.0.2 以降の PHP 5 では、"now" と他の関連する時刻は 誤って当日の真夜中から計算されます。 これは正しく現在時刻から計算する他のバージョンと異なります。にて計算しているからでは?と私は推測しました。taru 2006-10-27 (金) 00:14:24
- ここだと、5.0.2 までのってなっていますね。-- upk? 2006-10-27 (金) 01:22:32
- 「以降」と「まで」では全然違いますね まぁどちらにせよstrtotimeらへんがバージョンによって動作が変わるって事で理解しときますね^^;、一応修正案考えてみました。
私のサイトはこれで様子を見てみますね。taru 2006-10-27 (金) 02:10:21
0 1$today = gmdate('Y/m/d', $localtime); - $yesterday = gmdate('Y/m/d', strtotime('yesterday', $localtime)); + $yesterday = date('Y/m/d', mktime(0, 0, 0, date('m'), date('d')-1, date('Y')));
という事で今回の件は、上記内容で設定を変更して様子を見ています。