- 2008-01-06 (日) 5:39
- Yomi-Search(PHP)modified改造










アクセスランキングのトップ10とかトップページに表示するために関数を作りました。
ランキング関係のログ取得は少し複雑なので、これで簡単に表示できます。
一応、キーワードランキング以外は全て取得できます。
Yomi-Search(PHP)modifiedver1.3で動作確認してますが、先日公開されたver1.4.1でも動作すると思います。
Yomi-Search(PHP)modified Ver1.4.1
設置場所は、/function.php あたりにコピーしてください。Yomi-Search(PHP)modified1.3用リファラアクセスカウント関数を導入されている方は、referer_count.phpにコピーしてもいいです。
追記:YSPMサイトピックアップを公開したのでそちらを使用してください。
ランキングLOG取得関数
配列のみ返すので、デザインはListを使うなりTableを使うなり自由です。
PHP:
// ランキングLOG取得関数
// 書式:get_rank_logs($arg1,$arg2);
// 引数:$arg1=>モード
// ・rank 現在の人気ランキング
// ・rank_bf 前回の人気ランキング
// ・rank_rui 人気ランキング累計
// ・rev 現在のアクセスランキング
// ・rev_bf 前回のアクセスランキング
// ・rev_rui アクセスランキング累計
// $arg2=>取得件数
// 戻り値:logの配列+ pt(ポイント) rank(順位)
function get_rank_logs($mode,$best=10){
global $cfg, $db;
$table = (ereg("rev",$mode))?"rev":"rank";
$min = $cfg["{$table}_min"];
if(ereg("_rui$",$mode)){ //累計
$query = "SELECT l.*,t.{$table} AS pt FROM {$db->db_pre}log AS l,{$db->db_pre}rank_counter AS t WHERE l.id=t.id AND t.{$table}>= {$min} ORDER BY t.{$table} DESC LIMIT {$best}";
}else{
$time = time();
$kikan = $cfg["{$table}_kikan"];
if(ereg("_bf$",$mode)){ //前回
$start = $time - $kikan * 172800;
$end = $time - $kikan * 86400 + 1;
}else{ //現在
$start = $time - $kikan * 86400;
$end = $time;
}
$query = "SELECT l.*,count(*) AS pt FROM {$db->db_pre}log AS l,{$db->db_pre}{$table} AS t WHERE l.id=t.id AND t.time BETWEEN {$start} AND {$end} GROUP BY t.id HAVING pt>= {$min} ORDER BY pt DESC LIMIT {$best}";
}
$log_lines = $db->rowset_assoc($query) or $db->error("Query failed $query".__FILE__.__LINE__);
$log_count = count($log_lines);
//順位カウント
$pre_rank = 0;
$pre_point = 0;
for ($i = 0; $i <$log_count; $i++) {
if ($log_lines[$i]["pt"] != $pre_point) {
$pre_rank = $i + 1;
$pre_point = $log_lines[$i]["pt"];
}
$log_lines[$i]['rank'] = $pre_rank;
}
return $log_lines;
}
// 書式:get_rank_logs($arg1,$arg2);
// 引数:$arg1=>モード
// ・rank 現在の人気ランキング
// ・rank_bf 前回の人気ランキング
// ・rank_rui 人気ランキング累計
// ・rev 現在のアクセスランキング
// ・rev_bf 前回のアクセスランキング
// ・rev_rui アクセスランキング累計
// $arg2=>取得件数
// 戻り値:logの配列+ pt(ポイント) rank(順位)
function get_rank_logs($mode,$best=10){
global $cfg, $db;
$table = (ereg("rev",$mode))?"rev":"rank";
$min = $cfg["{$table}_min"];
if(ereg("_rui$",$mode)){ //累計
$query = "SELECT l.*,t.{$table} AS pt FROM {$db->db_pre}log AS l,{$db->db_pre}rank_counter AS t WHERE l.id=t.id AND t.{$table}>= {$min} ORDER BY t.{$table} DESC LIMIT {$best}";
}else{
$time = time();
$kikan = $cfg["{$table}_kikan"];
if(ereg("_bf$",$mode)){ //前回
$start = $time - $kikan * 172800;
$end = $time - $kikan * 86400 + 1;
}else{ //現在
$start = $time - $kikan * 86400;
$end = $time;
}
$query = "SELECT l.*,count(*) AS pt FROM {$db->db_pre}log AS l,{$db->db_pre}{$table} AS t WHERE l.id=t.id AND t.time BETWEEN {$start} AND {$end} GROUP BY t.id HAVING pt>= {$min} ORDER BY pt DESC LIMIT {$best}";
}
$log_lines = $db->rowset_assoc($query) or $db->error("Query failed $query".__FILE__.__LINE__);
$log_count = count($log_lines);
//順位カウント
$pre_rank = 0;
$pre_point = 0;
for ($i = 0; $i <$log_count; $i++) {
if ($log_lines[$i]["pt"] != $pre_point) {
$pre_rank = $i + 1;
$pre_point = $log_lines[$i]["pt"];
}
$log_lines[$i]['rank'] = $pre_rank;
}
return $log_lines;
}
関数の使い方
トップページ(/template/top.html)などの表示したい場所で使ってください。
リストで表示する
PHP:
テーブルで表示する
PHP:
echo "<table class='rank'>\n";
echo "<tr><td>順位</td><td>ポイント</td><td>サイト</td></tr>\n";
//人気ランク トップ5
$log_lines = get_rank_logs("rank",5);
foreach($log_lines as $log_data){
echo "<tr><td>{$log_data['rank']}位</td><td>{$log_data['pt']}</td><td><a href=\"{$log_data['url']}\">{$log_data['title']}</a></td></tr>\n";
}
echo "</table>\n";
echo "<tr><td>順位</td><td>ポイント</td><td>サイト</td></tr>\n";
//人気ランク トップ5
$log_lines = get_rank_logs("rank",5);
foreach($log_lines as $log_data){
echo "<tr><td>{$log_data['rank']}位</td><td>{$log_data['pt']}</td><td><a href=\"{$log_data['url']}\">{$log_data['title']}</a></td></tr>\n";
}
echo "</table>\n";
関連記事
Comments:0
Trackback+Pingback:0
- TrackBack URL for this entry
- http://blog.seo-so.com/archives/19/trackback
- Listed below are links to weblogs that reference
- Yomi-Search(PHP)modified トップページにランキングを表示する from SEO-SO blog