カウンター交換

プログラムのことphp, WordPress, プラグイン, 自宅サーバー

アクセスカウンター側が更新がないならカウンターを交換すればいいという事で
MT時代では出来なかったWordpressならではの柔軟なプラグインを利用してみた。
MTでもプラグインはあるんだが、外部からインストール必要と管理が面倒である。
Wordpressはダッシュボード上からプラグイン検索→インストールと出来るので簡単なのである。

というわけで、アクセス解析としても使えるCounterize IIっていうアクセスカウンターを使うことに。
phpのテキストベースカウンターなので動作が軽いらしい。

インストールするだけで後はウィジェット化するなりして使いたい所に貼り付けるだけ。
ウチではページごとに貼るのが面倒なので、以前のカウンターと同様にウィジェットにPHPのコードが書けるプラグイン
Executable PHP widgetを使ってウィジェット化してサイドバーにつけてます。

だけどこのままだと以前のカウンターと同じだけの機能を持っていないので
以前のカウンターと同様に、トータル、今日、昨日、閲覧中の表示ができるようにします。

何か長くなったので追記に。

元々からトータルと今日と、閲覧中の表示は出来るので、昨日のカウントを出来るように編集。
こちらのサイトの改造を参考に

「Returns amount of hits today.」のコメントを検索して、その関数の下に

# Returns amount of hits yesterday.
function counterize_gethitsyesterday()
{
$today = date(“Y-m-d");
$yesterday = date(“Y-m-d",strtotime(“-1 day"));
$sql = “SELECT COUNT(1) FROM “.counterize_logTable()." WHERE timestamp >= '$yesterday’ AND timestamp < '$today’ “;
$wpdb =& $GLOBALS['wpdb’];
return $wpdb->
get_var($sql);
}

を追加したいところですが、最近のバージョンではソースの書き方が変わっており
そもそもコメントが「#」から「//」に変わっててそのままだと検索すら引っかからないかも知れない。
というわけで、「// Returns amount of hits today.」を検索して、出てきた関数の下に

// Returns amount of hits yesterday
function counterize_gethitsyesterday()
{
global $wpdb;
$today = date(“Y-m-d");
$yesterday = date(“Y-m-d",strtotime(“-1 day"));
$sql = “SELECT COUNT(1) FROM " . counterize_logTable() . " WHERE timestamp >= '{$yesterday}’ AND timestamp < '{$today}'";
return $wpdb->
get_var($sql);
}

を追加します。変数の型の宣言から変数へのプッシュですら表記が変わっていると思います。
っていうか、この関数単純な話todayの関数に$yesterdayの行が追加されたのと、$sqlのsql文が変わっただけ。
「当日」が分かんないと前日のカウント数の引用もできないから当然だけど。

これで無事に前日のカウントも出来るようになりました。

これで終わりにしたいところですが、以前のカウンターと同様にするにはカウンターの数字をイメージにしないと元通りにはならないので
ここで更に数字に画像を使うように改造します。

このサイトを参考にソースそのものを用意します。

ソースはこちら
<?php
function counterizeii_graphic_digit($count)
{
$digit = array(“0.gif", “1.gif", “2.gif", “3.gif", “4.gif", “5.gif", “6.gif", “7.gif", “8.gif", “9.gif");
$count_digit = sprintf(“%1$05d", $count);
$digit_str = “";
$str_tmp0 = “<image src= \"/ホームページのルート/gif画像までのパス/";
$str_tmpe = “\"height = \"34\" alt=\"\" />";
for($i = 0; $i < strlen($count_digit); $i++){
$d = substr($count_digit, $i, 1);
$digit_str = $digit_str.$str_tmp0.$digit[$d].$str_tmpe;
}
return($digit_str);
}
?>

サイトではアクセスカウンタのCounterize IIの追加プラグインEXTENSIONを追加していますが
極力シンプルにしたいのでこれを使わずにウィジェットのPHPコードから呼び出すようにします。

とはいえ、やることはサイトのソースを使うことは変わらず
counterizeii-graphic-digit.phpとして保存することも変わりませんが、
保存ディレクトリはExtensionではなくcounterizeii本体のディレクトリに保存。
後はPHPコードを書いてカウンターを呼び出す部分で

合計:<?php echo counterizeii_graphic_digit(counterize_getamount());?>
今日:<?php echo counterizeii_graphic_digit(counterize_gethitstoday());?>
昨日:<?php echo counterizeii_graphic_digit(counterize_gethitsyesterday());?>
閲覧中:<?php echo counterizeii_graphic_digit(counterize_get_online_users());?>

とすれば、数字を画像にする関数を呼び出しつつ、カウンター表示ができるようになります。

このままだと全部のカウンターが5桁で表示されてしまうので、先ほどのcounterizeii-graphic-digit.phpの中身である

$count_digit = sprintf(“%1$05d", $count);

%1$05dという部分を%1$06dにすれば6桁になります。
以前のカウンターだとトータルが6桁、日別・閲覧中カウンターは3桁だったので
ウチではトータルは6桁表示にしたcounterizeii-graphic-digit.phpで表示し
日別・閲覧中カウンターは表示を3桁にしたcounterizeii-graphic-digit3.phpという安直なファイルを用意して
function counterizeii_graphic_digit($count)を
function counterizeii_graphic_digit3($count)にして

呼び出し側も
今日:<?php echo counterizeii_graphic_digit(counterize_gethitstoday());?>
今日:<?php echo counterizeii_graphic_digit3(counterize_gethitstoday());?>

と呼び出す関数を変えて3桁表示するようにしています。

あと、このカウンターは初期値を設定することが出来ないので
以前からのカウンターの値を引き継ぐ場合は、表示部分で無理やり数字を継ぎ足すしかありません。
ウチだと大体221000だったので、それをトータルのカウンター呼び出し部分に追加し

合計:<?php echo counterizeii_graphic_digit(221000+ counterize_getamount());?>

といった感じで取得関数に初期値をプラスして表示するようにしただけです。

相変わらず無理やりな実装である。動けば良いのだ。
重要なアクセス取得部分には手を加えていないのでこの改造でカウンターがバグることはないし。