Movable Type 備忘録
Ajaxでアクセス・ランキングを表示する4
- Prev Page: Prototype でプログレスバーの表示 (jsProgressBarHandler.js)
- Next Page: prototype で Five Star Rating( Starbox )
[2009.03.20] 以下のページでご紹介してます最新の prototype 版ランキングスクリプトをご利用ください。
via: アクセスランキング・プラグイン(prototype.pagerank.js)こんばんわ^^
訪問者さんからのご要望で、以下の機能を盛り込んで欲しいとのことでしたので対応しました。
- ランキング結果だけを表示させたい。
- カテゴリや月別ページはランキングから除外したい。
1. の「ランキング結果だけを表示させたい。」に関しては、既に対応済みだったのですが、サーバ側の PHP スクリプトを変更する必要があったため、今回そこら辺を修正して、クライアント側( JavaScript )で対応するように修正しました。
ダウンロード
お好みに応じて、prototype 版、jQuery 版をダウンロードしてください。
[2008.02.02] rank_post.php の 10 行目、rank_view.php の 4 行目をそれぞれ以下のように修正しました。
require('rank_config.php');
また、ロリポップやチカッパなど PHP4 がインストールされてるサーバでも動作するよう flock を使わない方法で修正しています。
ロリポップ、チカッパをお使いの人は pagerank/ ディレクトリのパーミッションを 777 とすることでログ収集、ランキング表示されましたのでご確認ください。
ディレクトリ構成
prototype 版も jQuery 版も基本的なディレクトリ構成はいっしょです。
また、ここでは以下のようなディレクトリ構成として説明しますが、各自の環境に合わせて読み替えてください。
http://●●●.com/|+-- js/| +--- pagerank/| | +-- ajax-loader.gif| | +-- prototype.js( or jquery.js)| | +-- prototype.pagerank.js( or jquery.pagerank.js)| | +-- index.php| | +-- rank_check.php| | +-- rank_config.php| | +-- rank_post.php| | +-- rank_view.php
設置の仕方
まずスクリプト一式をアップロードします。
上記ダウンロードからお好みで prototype 版、jQuery 版をダウンロードして適当なフォルダに展開します。そして、上記ディレクトリ構成のようにアップロードします。
次に prototype.pagerank.js( or jquery.pagerank.js )を変更します。
以下の行を各自の環境に合わせて変更してください。
/***************************************************************************** Cookie有効/無効フラグ(0:無効、1:有効)* ※Cookieを無効にすると、ページにアクセスされるたびにカウントアップされます。* また、当然PHPスクリプトはその都度実行されます。****************************************************************************/var pagerank_enable_cookie = 1;/***************************************************************************** アクセスログを取りたいブログID* ※複数のブログの集計を行いたい場合には 0 を指定してください。0 というブログ ID は存在しませんので。****************************************************************************/var pagerank_blogid = <$MTBlogID$>;/***************************************************************************** アクセスランキングを表示するIDタグ名称****************************************************************************/var pagerank_view_box = 'pagerank_viewer';/***************************************************************************** ブログ URL(index.html がある場所)/アップロード先相対パス* ※pagerank_blog_url: トップページ(index.html)のURL* ※pagerank_home_url: アップロード先をトップページからの相対パス****************************************************************************/var pagerank_blog_url = '<$MTBlogURL$>';var pagerank_home_url = 'js/pagerank/';/***************************************************************************** アクセスログ保存/表示スクリプト/ローダーイメージ****************************************************************************/var pagerank_post_url = [pagerank_blog_url, pagerank_home_url, 'rank_post.php' ].join('');var pagerank_view_url = [pagerank_blog_url, pagerank_home_url, 'rank_view.php' ].join('');var pagerank_loader = [pagerank_blog_url, pagerank_home_url, 'ajax-loader.gif'].join('');/***************************************************************************** ランキング表示数* ※上位何位まで表示するか設定します。0を指定するとすべて表示します。****************************************************************************/var pagerank_ranking_max = 15;/***************************************************************************** ランキング表示形式(0:非表示、1:カウンタ表示、2:パーセンテージ表示)* ※カウンタの表示/非表示を設定します。****************************************************************************/var pagerank_ranking_type = 1;
青い字の部分を変更します。
pagerank_enable_cookie
Cookie の有効/無効を設定します。- 0 を指定した場合 Cookie は無効になります。
- 1 を指定した場合 Cookie は有効です。デフォルトは有効となってます。
Cookie を無効にするとページにアクセスされるたびにカウントアップされます。また、PHP スクリプトはその都度実行されます。
pagerank_blogid
ページアクセスを集計したいブログのブログ ID を指定します。
デフォルトでは <$MTBlogID$> となっていますが、直接ブログ ID に変更しても問題ありません。また、複数のブログのアクセスを集計したい場合には 0 を指定するといいです。
pagerank_blog_url
アップロード先の URL を指定します。デフォルトでは <$MTBlogURL$> となっています。
トップページ(index.html がある場所)の URL を指定してください。pagerank_home_url
アップロード先の相対パスを指定します。トップページからの相対パスを記述してください。
デフォルトでは js/pagerank/ となっています。
各自の環境に合わせて変更してください。pagerank_ranking_max
上位何位まで表示するかを設定します。デフォルトは上位 15 位まで表示されます。pagerank_ranking_type
ランキングのカウンタの表示形式を選択します。- 0 非表示
- 1 カウンタ表示
- 2 パーセンテージ表示
もう 1 つ、ページタイトルから任意のテキスト(たとえば、サイト名称)を削除する設定を行います。
var title = encodeURIComponent(document.title.replace(' - <$MTBlogName$>', ''));
青い字の部分を各自のサイトに合わせて変更します。
デフォルトでは、「Ajaxでアクセス・ランキングを表示する - Movable Type備忘録」のようなページタイトル名から ' - Movable Type備忘録' を削除するような設定になっています。以下に訪問者さんにアドバイスした例を記します。
「サイト名称:ページタイトル」の場合var title = encodeURIComponent(document.title.replace('<$MTBlogName$>:', ''));「カテゴリ名称:ページタイトル:サイト名称」の場合var title = encodeURIComponent(document.title.replace(/^.*:(.*):.*$/, "$1"));「ページタイトル - カテゴリ名称:サイト名称」の場合var title = encodeURIComponent(document.title.replace(/^(.+) - .*$/, "$1"));
ページタイトルは人それぞれ異なると思いますので、各自のテンプレートに合わせて変更する必要があります。
分からないことがあればご連絡いただければ削除の仕方をアドバイスいたします。次に rank_config.php を変更します。
以下の行を各自の環境に合わせて変更してください。rank_config.php
<?php/** ページ・アクセス情報を保存するファイル名*/$GLOBALS['RANK_DATA'] = 'data.txt';/** 更新履歴情報を保存するファイル名*/$GLOBALS['PERIOD_DATA'] = 'period.txt';/** 表示データ削除の周期を設定します* ★必ず以下の設定範囲内で設定してください。* ★未使用時は 0 を設定してください。*/$GLOBALS['PERIOD_MONS'] = 1;// 月:0~ 3の間で設定$GLOBALS['PERIOD_DAYS'] = 0;// 日:0~31の間で設定$GLOBALS['PERIOD_HOUR'] = 0;// 時:0~24の間で設定/** 指定 IP アドレスからのカウントを省きます* たとえば、自宅パソコンからはカウントに入れたくない場合などです* 複数の IP アドレス指定が可能です* ★ただし、あまり多くの除外 IP アドレスを指定すると、* その分表示速度に影響がでますのでご注意ください*/$GLOBALS['SELF_ADDR'] = array('0.0.0.0');
RANK_DATA
アクセスログファイル名です。任意のファイル名に変更してください。PERIOD_DATA
集計期間を保持しておくファイル名です。これも任意のファイル名に変更してください。PERIOD_MONS / PERIOD_DAYS / PERIOD_HOUR
集計期間を指定します。デフォルトは 1 ヶ月間となってます。たとえば、1 週間ごとにランキングをクリアしたい場合には以下のようにします。
1 週間分集計したい場合$GLOBALS['PERIOD_MONS'] = 0;// 月:0~ 3の間で設定$GLOBALS['PERIOD_DAYS'] = 7;// 日:0~31の間で設定$GLOBALS['PERIOD_HOUR'] = 0;// 時:0~24の間で設定
SELF_ADDR
自宅からのアクセスを除外したい場合に、自宅 IP アドレスを指定します。添付ファイル中の rank_check.php をブラウザから実行することで自宅 IP アドレスを知ることができます。
また、複数の IP アドレスを指定できます。たとえば、以下のようなかんじで。$GLOBALS['SELF_ADDR'] = array('23.24.25.26', '120.121.122.123');
一通り変更したら、pagerank/ フォルダごとサーバにアップロードします。
また、prototype.pagerank.js( or jquery.pagerank.js )中のブログ ID(pagerank_blogid) やブログ URL(pagerank_blog_url)に、MT タグを使用する場合は MT の管理画面からインデックステンプレートを新規作成して、prototype.pagerank.js( or jquery.pagerank.js )をコピー & ペーストして再構築すると、ブログ ID や URL などが自動的に割り当てられます。PHP スクリプトはお使いのサーバに合わせてパーミッションを変更します。
たとえば、さくらインターネットやロリポップでは 755、CORESERVER では 705 とします。また、pagerank/ ディレクトリのパーミッションを 755 としてください。次にアクセスログを集計したい、すべてのページに以下を追加します。
prototype 版の場合<script type="text/javascript" src="<$MTBlogURL$>js/pagerank/prototype.js"></script><script type="text/javascript" src="<$MTBlogURL$>js/pagerank/prototype.pagerank.js"></script>
jQuery 版の場合<script type="text/javascript" src="<$MTBlogURL$>js/pagerank/jquery.js"></script><script type="text/javascript" src="<$MTBlogURL$>js/pagerank/jquery.pagerank.js"></script>
最後にアクセスランキングを表示したいページ内のお好きなところに以下を追加します。
<div id="pagerank_viewer"><script type="text/javascript">pagerank_view();</script></div>
以上で設置完了です。ブラウザから表示確認してください。
そそ、大事なこと忘れてました。
Movable Type 4をお使いの人はテンプレート・モジュールの『ヘッダー』を以下のように変更してください。ブラウザに依存するのか、タイトル部分が改行されてログ出力されてしまうケースがあるようです。
対策は検討中です。
<MTIf name="entry_template"><title><$MTGetVar name="page_title"$> - <$MTBlogName encode_html="1"$></title><MTElse><MTIf name="main_index"><title><$MTBlogName encode_html="1"$></title><MTElse><title><$MTBlogName encode_html="1"$> - <$MTGetVar name="page_title"$></title></MTIf></MTIf>
出力されるタグについて
出力されるランキングのタグは以下のような構成になっています。
<ul id="page-rank" class="widget-list"><li class="widget-list-item rank-list-odd"><a title="●●●" href="http://■■■" target="_blank"><span class="right rank-list-1st">アクセス数</span>ページタイトル</a></li><li class="widget-list-item rank-list-eve"><a title="●●●" href="http://■■■" target="_blank"><span class="right rank-list-2nd">アクセス数</span>ページタイトル</a></li><li class="widget-list-item rank-list-odd"><a title="●●●" href="http://■■■" target="_blank"><span class="right rank-list-3rd">アクセス数</span>ページタイトル</a></li><li class="widget-list-item rank-list-eve"><a title="●●●" href="http://■■■" target="_blank"><span class="right">アクセス数</span>ページタイトル</a></li></ul><p style="text-align:right;">30日間ログを集計します。</p>
上記は rank_view.php ファイル内の 45 行目~ 87 行目で出力するタグを作成してます。
rank_view.php / 45 行目
$cnt = 0;$s = "<ul id='page-rank' class='widget-list'>\n";foreach ($count as $key => $val) {if ($cnt++ % 2) {$class = 'rank-list-odd';// 奇数番号の場合}else {$class = 'rank-list-eve';// 偶数番号の場合}if (3 < $cnt) {$rankclass = '';}else {if ($cnt == 1) {$rankclass = ' rank-list-1st';}elseif ($cnt == 2) {$rankclass = ' rank-list-2nd';}elseif ($cnt == 3) {$rankclass = ' rank-list-3rd';}}$s .= '<li class="widget-list-item '.$class.'"><a title="'.$title[$key].'" href="'.$url[$key].'" target="_blank">';if ($GLOBALS['TYPE']) {if (2 == $GLOBALS['TYPE']) {$val = sprintf("%3.2f%%", ($val / count($count) * 100));}$s .= '<span class="right'.$rankclass.'">'.$val.'</span>';}$s .= $title[$key].'</a></li>'."\n";// 指定された上位ランク数に達したら終了しますif ($GLOBALS['MAX'] && $cnt >= $GLOBALS['MAX']) break;}$s .= '</ul><p style="text-align:right;">14日間ログを集計します。</p>';
ざっと説明すると、
50 ~ 53 行目
リンクリストの背景をシマシマにするクラス名を処理してます。- .rank-list-odd: 奇数番リスト
- .rank-list-eve: 偶数番リスト
61 ~ 67 行目
ランキングの順番を差別化するクラス名を処理してます。- .rank-list-1st: 1 位
- .rank-list-2nd: 2 位
- .rank-list-3rd: 3 位
71 ~ 81 行目
リンクリストを作成しています。73 ~79 行目
アクセスカウンタの表示/非表示、パーセンテージ表示選択時の処理してます。
必要でしたらお好みでカスタマイズしてください ( ̄∇ ̄)/
任意のページのみランキング対象としたい場合
ここでは任意のページのみランキング対象とする方法を説明します。
ランキングから除外したいページの HTML ヘッダ(<head>~</head>)の間に以下を追加することで除外できます。
<script type="text/javascript">//<![CDATA[pagerank_exclude = 1;//]]></script>
また、トップページはデフォルトで除外されます。
カテゴリアーカイブと月別アーカイブの両方を除外したい場合には、以下の手順で除外できます。
ブログ記事リスト・アーカイブテンプレートを修正します。
<MTSetVar name="ranking_exclude_page" value="1"><$MTInclude module="ヘッダー"$>
赤い字の行を追加します。注意することは必ずヘッダ・テンプレートモジュールの前で追加してください。そうしないと、上記 ranking_exclude_page という変数が期待通りに適用されません。
ヘッダ・テンプレートモジュールを修正します。
<MTIf name="ranking_exclude_page"><script type="text/javascript">//<![CDATA[pagerank_exclude = 1;//]]></script></MTIf>
赤い字の部分を追加します。注意することは、必ず prototype.pagerank.js( or jquery.pagerank.js )の後で追加してください。そうしないとエラーします。
Trackback Pings(4)
- from
NSproduce | フリーのWEBデザイナー・HTMLコーダー・MTカスタマイズ
こちらのMovableType備忘録というサイトで、MovableType内でペ...
- from
Movable Type 備忘録
こんにちわ^^ 午前中は天気良くってテンション上がったので、午前中のうちに買い物行ってきました。 ついでに(いつものように)アイス買って公園で遊んでる子供...
- from
Kurashita's Page~WEBデザイン勉強中貧乏学生~
いやぁ~今回は途中で諦めそうになりました(´;ェ;`)ウゥ・・・でも、助けてもら...
- from
fifthluna
なかなか骨の折れる作業でした。根本原因は説明書を読まないこの体質だと思いますが。...




とても素早い対応ありがとうございます。
どうにか無事に動作しているようなのですが、
「任意ページ除外フラグ(0:カウント、1:除外)」を
var pagerank_exclude = 1;
に設定すると何も記録がされないようなのですが・・。
(カウントしたいエントリーの記事もカウントしません)
「0」にしても対象外のヘッダー部分に除外タグをいれたら大丈夫みたいです。
除外したいページの「<head>」部に
----
<script type="text/javascript" src="<$MTBlogURL$>js/pagerank/prototype.js"></script>
<script type="text/javascript" src="<$MTBlogURL$>js/pagerank/prototype.pagerank.js"></script>
<MTIf name="ranking_exclude_page">
<script type="text/javascript">
//<![CDATA[
pagerank_exclude = 1;
//]]>
</script>
</MTIf>
----
を入れると言う事で間違いはないでしょうか?
少し不安になりましたので、ご確認頂けたらと思います。
でもこれで希望通りの事ができるようになりました。
本当にありがとうございました。
>>1 rui さん
こんばんわ^^
はい。ヘッダ・テンプレートモジュールは rui さんの方法で問題ありません。
除外したいテンプレートの <$MTInclude module="ヘッダー"$> の前で以下の追加してあげれば、そのテンプレートは除外されます。
そのようにやってもすべてのページが除外されるとしたら、prototype.pagerank.js が古いことが考えられます。
今回の対応で prototype.ajax.js をバージョンアップしています。
以前の JavaScript だと除外設定はトップページのみでした。ですので、再度ダウンロードして差し替える必要があります。
差し支えなければ、rui さんのサイトを見せていただけるともっと的確にアドバイスできると思います。
こんにちはー。
いつもおせわになってます。
さらに便利になりましたね。特定ページを除外する機能待ってました。
ありがとうございますー。
ところで、デフォルトでトップページを除外するようになっているそうですが、
除外したくないときはどこかから設定するのですか?
以前のバージョンは設定がありましたよね。。。
質問ばかりですみません。教えてくださいませ。
よろしくおねがいしますー。
>>3 さじ さん
こんばんわ^^
> ところで、デフォルトでトップページを除外するようになっているそうですが、除外したくないときはどこかから設定するのですか?
Σ( ̄Д ̄;) ガーーン!!
そうきますか。
すいません、てっきりトップページはカウントしないものなんだと思ったのでデフォで除外してしまいました (; ̄∇ ̄A
> 質問ばかりですみません。教えてくださいませ。
いえいえ。さじ さんのニーズに対応したものをアップしまし。
具体的には prototype.pagerank.js内の以下の場所を追加/修正しました。
188 行目 変更 if (pagerank_exclude_top && (pagerank_blog_url == location || 0 <= location.indexOf(pagerank_blog_url+'index'))) {新たにダウンロードするか、上記のように修正してください。
その際、さじ さんの場合は pagerank_exclude_top = 0 とすることでトップページもカウントされます。
こんにちは!
さっそくの対応ありがとうございます。
ダウンロードしなおしました。
とっても助かりましたー。ありがとうございました。
>>5 さじ さん
こんばんわ^^
> とっても助かりましたー。ありがとうございました。
はい (●´∀`●) 今後ともよろしくですの♪
何度もありがとうございます。
ちゃんとprototype.ajax.jsを1.26にしてて、
今回も1.27にバージョンアップしてみたのですが、やはり同様のようです。
でも「任意ページ除外フラグ(0:カウント、1:除外)」を
var pagerank_exclude = 0;
にしたら、カテゴリーなどはカウントされずに、希望通りに出来て満足していますので、それで使用させて頂きます。
本当に何度もご親切にありがとうございました。
いつも「すごく詳しい情報があってありがたいサイトだな~」と思って拝見していましたが、こんなにご親切に何度も対応して頂き、感謝倍増です。
これからも参考にさせて頂きますので、宜しくお願いします
>>7 rui さん
こんにちわ^^
> ・・・カテゴリーなどはカウントされずに、希望通りに出来て満足していますので、それで使用させて頂きます。
あぁ~ (´Д`;) わたしの説明が下手っぴなばかりに・・・すいませんですの。
> これからも参考にさせて頂きますので、宜しくお願いします
はい。こちらこそよろしくですの (●´∀`●)
こんにちはー。
いつもお世話になってます。
たびたび質問ですみません。
さきほどアクセスランキングをMac Safari3.0.4で確認しましたら文字化けしてたんです。
WindowsのFirefoxとIE7はばけてませんでした。
MTのPublishCharsetをShift_JISにしているんですがその場合は、phpの文字コードもShift_JISにしないとだめなんでしょうかー?
もしわかりましたらお教えくださいませ。よろしくおねがいします。
>>9 さじ さん
こんばんわ^^
えと、ご質問は以下の 2 つですよね (; ̄∇ ̄A
うわぁ~Safari ですか (; ̄∇ ̄A 文字化けがらみの問題ありましたよねぇ。 わたし Safari ってインストールしてないので確認ができないのですが、こちらを参考にしてみてはいかがでしょ♪
Ajax は基本 UTF-8 ですが、1. の方法で対応すれば問題ないのではないでしょうか。
いずれもわたしのとこでは確認ができないので申し訳ないのですが、試してみてください。
ありがとうございます。
参考URLみてみましたー。
このfunctionをスクリプトのどこかに書いてあげればいいのかなー、
と思ったのですが、使い方がわからず、、です。。。なさけない。
Safariで調べてみるとだいたいここにぶつかりますねー。
ちょっとがんばって調べてみます。。。
とりあえず、ありがとうございましたー。
初めて投稿させていただきます。
サーバはロリポップで、prototype 版、jQuery 版共に、なるべく構成通りの設置を試みているのですが、以下のような Warning メッセージが出てしまって、うまく設置できずにいます。
Warning: flock(): supplied argument is not a valid stream resource in /home/sites/lolipop.jp/users/lolipop.jp-dp3XXXXXX6/web/js/pagerank/rank_view.php on line 123
Warning: fputs(): supplied argument is not a valid stream resource in /home/sites/lolipop.jp/users/lolipop.jp-dp3XXXXXX6/web/js/pagerank/rank_view.php on line 124
Warning: fclose(): supplied argument is not a valid stream resource in /home/sites/lolipop.jp/users/lolipop.jp-dp3XXXXXX6/web/js/pagerank/rank_view.php on line 125
もしこのメッセージから何か読み取れる修正点ありましたら、教えていただけると幸いです。
基本的に「rank_view.php」のファイルを特にいじらずのアップで、パーミッション755でいいんですよね?
それと2つの .js ファイルはパーミッションは特に設定しなくていいんですよね?
あと、「rank_config.php」の
$GLOBALS['RANK_DATA'] = 'data.txt';
$GLOBALS['PERIOD_DATA'] = 'period.txt';
は「任意のファイル名」ということは、特に変更しなくていいんですよね?
それとその場合、その名前の空ファイルとかを同ディレクトリに置く必要はあるのでしょうか?
質問ばかりで恐縮ですが、何か解決のヒントになるようなことがありましたら、よろしくお願いします。
>>12 traceraser さん
こんにちわ^^
> もしこのメッセージから何か読み取れる修正点ありましたら、教えていただけると幸いです。
残念ですが、ロリポップではスクリプト( rank_view.php )からファイルやディレクトリを動的に作成することができないんです。
何か方法があるのか模索してますが、現状ではいい解決策が見つかりません(つω-`。)
FTP ソフトを使って事前にファイルやディレクトリを作成しておけば、ランキング表示することはできますが、使い勝手が悪くなります。
ごめんなさい (m;_ _)mペコ
>>13 bzbell さん
> 残念ですが、ロリポップではスクリプト( rank_view.php )からファイルやディレクトリを動的に作成することができないんです。
そういうことでしたか、、がっくしという感じではありますが、ご丁寧にお答えいただき、ありがとうございました。
はじめまして、半年くらい適当にブログをやっているmocoといいます。
mtのランキングスクリプト、ありがたく使わせて頂きました。
今まで変なバナーを表示しないといけないダサいアクセスランキングを使っていたので、俄然助かりました!
広告も載せずにこんなに有益な情報を載せておられるので感動しています。
これから他のエントリーもチェックさせて頂きます。
これからも頑張ってください。
>>15 aimymoco さん
こんにちわ^^
> mtのランキングスクリプト、ありがたく使わせて頂きました。
ありがとうございます
> 広告も載せずにこんなに有益な情報を載せておられるので感動しています。
わたしも以前使ってたことあって、サイトのイメージにそぐわないのが気に入らなくって作ってみたんです。
> これからも頑張ってください。
はい。ありがとうございます。
至らないとこは多々あると思いますがよろしくですの
はじめまして、ランキングスクリプトありがたく使わせて頂いております。
一つお聞きしたいのですが、このスクリプトはページ毎のランキングを表示するものですが、ブログ毎のランキングを表示するようにすることはできますでしょうか?
現在、複数ブログのトップページと各エントリーに、カウント集計のタグを入れてありますが、各エントリーページからアクセスしても一つのブログのアクセスとして集計し表示したいと思っております。
宜しくお願いいたします。
現在(ページごと) 理想(ブログごと)
1位 ○○ブログ ××について 20 1位 ○○ブログ 30
2位 ○○ブログ △△について 10 ⇒ 2位 △△ブログ 5
3位 △△ブログ □□について 5 3位 □□ブログ 1
わかりにくくてすみません。
はじめまして、ランキングスクリプト使わせていただいております。
一つお聞きしたいことがあります。このスクリプトはページ毎のランキングを表示するものですが、ブログ毎のランキングを表示したいと思っております。
現在、複数ブログのトップページと各エントリーに集計用のタグを入れてあります。各エントリーページからのアクセスとトップページからアクセスを集約してひとつのブログのアクセスとして表示したいということです。
わかりにくくてすみません。
現在(ページ毎) やりたい事
1位 ○○ブログ AAAについて 50 1位 ○○ブログ 80
2位 ○○ブログ BBBについて 30 ⇒ 2位 △△ブログ 10
3位 △△ブログ GGGについて 10 3位 □□ブログ 5
わかりにくいと思いますが、宜しくお願いいたします。
>>17 bzbell さん
>>18 bzbell さん
こんばんわ^^
あれっ!? bzbell ってわたし
もしかして、Google での認証って bzbell で表示されちゃう!?
それはさておき、ご質問の件ですが理屈的には可能ですよ
でも配布してるスクリプトは、ブログ内のページアクセス集計を目的としてますのでダメですね。
平日は中々時間が取れないので無理ですが、お時間いただけるのでしたら週末にでもお作りしますよ
>>19 bzbell さん
早速、お答えいただきまして、ありがとうございます!!
すみません二回も投稿してしまいました
しかも投稿者がbzbellさんになっています。なんでかわかりませんが、すみません。
>平日は中々時間が取れないので無理ですが、お時間いただけるのでしたら週末にでもお作りしますよ
本当ですか!?
自分では、知識不足でどうにもならないので、作っていただけるなら是非宜しくお願いいたします。
急いではいませんので、いつになってもいいので待ってます。
これからも応援させていただきます!!
はじめまして。
唐突なんですが、このアクセスランキングスクリプトを使おうとしたのですが、どうもうまく動いてくれないんです。
js/pagerank/index.phpを読み込んでみたのですが、読み込みのGIFが一瞬でて、あとはスタイルで指定されている青い枠だけが残って、肝心なXHTML部分が反映されません。
私もチカッパなんでhttp://bizcaz.com/archives/2007/10/19-000703.php#r9と同じ症状かな?とか思ったんですけど、何回も導入しなおしたのですがうんともすんとも言いません。
prototype.pagerank.jsはちゃんとMT側でテンプレートをコピー&ペーストして作ったので、パスは間違いないと思うのですが。
弄ったところは「ページタイトルを削除する」所と「出力されるタグ」の部分だけなんです。
スミマセンがアドバイスが欲しいです、お願いします。
>>21 306 さん
こんばんわ^^
ご質問の件ですが、以下のことを確認してみてください
PHP4 だと flock というファンクションが使用できないので以下のファイルと差し替えて確認してみてください。
pagerank_lolipop.zip
pagerank/ ディレクトリの中にファイルを作成しますので、書込み権限が必要なんです。
わたしが知る限りロリポップでは間違いなく 1. が原因でした
なので恐らくチカッパも同様だと思われまする。
>>22
すばやい対応ありがとうございます。が、ダメでした。
PHPエラーメッセージさえ出ず、>>21と状況は変わりませんでした。
なんかややこしくてスミマセン
PHP4がダメということなら、5になればいいんですかね?
これ以上施しようがないなら、サーバー側のバージョンアップを待ってみますね
ありがとうございました。
>>23 306 さん
> すばやい対応ありがとうございます。が、ダメでした。
くやしぃですねーーーっ
!?
女の意地で原因を追究したいのですが・・・306 さんお付き合いしていただけますか
まず、pagerank/ ディレクトリのパーミッションは 755 になっているということでよろしかったですか!?
とりえあず、書き込み権限があるという前提で話を進めます。
他の人からもランキング表示できないとのご連絡を頂いてまして、たぶん同様に PHP4 によるものだと思うのですが、わたしの方では動作確認ができないので、以下のコメントで記したスクリプトを実行して確認していただいてます。
http://bizcaz.com/archives/2008/01/27-193535.php#c2861
良かったら 306 さんも確認していただけますか。
わたし意地でも解決してみせますっ
>>24
755ではいきませんでしたね。もしかしたらと思って777にしてみたら読み込めました。
>>25 306 さん
> 755ではいきませんでしたね。もしかしたらと思って777にしてみたら読み込めました。
えっ
!?
チカッパってフルアクセス(777)許可ですか !!
サーバによって違うんですね
そうすると、ページランキングも表示されます !?
>>26
いまだに沈黙を守ったままですね。何がいけないんでしょうかね
2個ディレクトリの上をいけばブログ見れますが、あんまり口外したくないので、コメントを掲載するときはアドレス消してくださるとありがたいです。
>>27 306 さん
ページアクセスされるとログファイルが作成されます。
作成されることを確認した上で、306 さんの場合はテンプレート内のランキング表示部を以下のようにすれば表示されるような気がします。
>>28
bzbell さん
ログファイルが作成されませんね。何度も試しましたが、js/pagerank 内には何も変化が現れませんね。
様子を見たほうがいいんでしょうか?
>>29 306 さん
なぜ
!?
明日まで待っていただけますか。
そしたら友人のロリポップをお借りして実際に試してみます。
先ほどの test.php では『ファイル作成: OK』と表示されたのですよね!?
>>30
bzbellさん お疲れ様です!
>『ファイル作成: OK』
はい、ちゃんとOK出ました。スミマセン、お手数かけます
>>31 306 さん
> はい、ちゃんとOK出ました。スミマセン、お手数かけます
いぃえぇ、こちらこそ余計な手間かけさせてしまってすいません
もしかすると、ロリポップ(チカッパも)では fclock というファンクション以外にも何か制約があるのかなぁ。
もう一つ気になることは記事中にも明記してますが、prototype.pagerank.js 内には MT タグが使用されてます。
本来は prototype.pagerank.js を再構築することで、ブログ ID、ブログ URL を自動生成するのですが、306 さんは再構築してますか!?
それとも、ただアップロードしただけですか!?
ただアップロードしただけだと、PHP に渡すパラメータに不正な値がわたってしまうのでロギングされなくなります。
ご確認いただけますか。
わたしの方も明日ロリポップで実際に試してみます。
>>32 bzbellさん
>本来は prototype.pagerank.js を再構築することで、ブログ ID、ブログ URL を自動生成するのですが、306 さんは再構築してますか!?
MT側で作ったので、MTタグは反映されているはずです。再構成オプションもつけているので、常に再構成されているはずです。
すみません、お願いします。
>>31 306 さん
ロリポップのサーバを借りて確認してみました。
require('rank_config.php');以上のことでロリポップでは ログ収集、ランキング表示されました。
修正したスクリプトを UP しましたので、お手数ですがダウンロードして再度確認してみてください
>>34
bzbellさん
朝早くからありがとうございます。やっと動作しました。
ご対応ありがとうございます。これからもこのサイトは活用させてもらいますね
ありがとうございました。
>>20 bzbell さん
こんにちわ^^
遅くなりましたが、各ブログ内で集計したアクセスログを、さらにブログ単位で集計して表示するためのスクリプトを作成しましたのでご確認ください。
■使い方
基本的には今まで通りページアクセスのログを集計してください。
rank_view_blogs.php を pagerank/ ディレクトリ内にアップロードします。
rank_view_blogs.php 内の 5 ~ 9 行目に一括集計したいブログの ID、名称を記入します。
上記はブログ ID=1, 5, 21 のブログのタイトル名称をそれぞれ入力した例です。
prototype.pagerank.js(or jquery.pagerank.js)内を以下のように修正します。
var pagerank_view_url = [pagerank_blog_url, pagerank_home_url, 'rank_view_blogs.php' ].join('');以上です
一応カンタンには動作確認しておりますが、長期的な確認は当然ですがしておりません。
長期的に使ったことで気になる点を以下に記しておきます。
ランキング表示する度に、各ブログのアクセスログを一括集計しますので気になるところではあります。場合によってキャッシュ機能、またはリアルタイム性を無視してパフォーマンス性を重視した方がいいかも、です
と、こんなところでしょうか。
重要なことは訪問者さんに負担(表示が重たい)にならないことだと思います。
)がお使いのサーバで cron が使えるようでしたら、それ相応のスクリプトに組み替えたほうがサーバにも易しいです
もし bzbell さん(ややっこしい
その時はご連絡ください。
>>36 bzbell さん
google#20です。
お忙しい中、早速作っていただきまして本当にありがとうございます。
ダウンロードして使用させていただきます。
また、気になる点などアドバイスもくださいまして本当に感謝しております。
これから設置して使ってみたいとおもいます。bzbellさんは、本当に優しいですね!!
>>37 bzbell さん
こんにちわ^^
> お忙しい中、早速作っていただきまして本当にありがとうございます。
どぉ致しまして
> これから設置して使ってみたいとおもいます。bzbellさんは、本当に優しいですね!!
はい。ご確認ください。
何かありましたらご連絡いただけたらと思います
>>38 bzbell さん
google#20です。
設置してみたのですが、うまくできませんでした。集計結果が何も表示されません。
まず、prototype.pagerank.jsの以下の部分を変更しました。
var pagerank_view_url = [pagerank_blog_url, pagerank_home_url, 'rank_view_blogs.php' ].join('');
それから、作っていただいたrank_view_blogs.phpの中に以下のものを書き込みました。
$blog_lists = array(
/*[0]*/'39' => '○○株式会社',// ブログID 39 => ブログ名称 ○○株式会社
/*[1]*/'9' => 'オフィス××',// ブログID 9 => ブログ名称 オフィス××
/*[2]*/'5' => '△△事務所',// ブログID 5 => ブログ名称 △△事務所
/*[3]*/'24' => ■■コンサルティング',// ブログID 24 => ブログ名称 ■■コンサルティング
/*[4]*/'17' =>・・・
/*[5]*/'25' =>・・・
/*[6]*/'5' =>・・・
/*[7]*/'6' =>・・・
以下 27個まで続きます。
こんな感じです。 MTで設定してあるブログ名称と合わせてあります。
ちなみに、集計コードは以前と同じく各ブログのトップ(index.html)と各エントリーアーカイブです。
カテゴリーアーカイブと日付アーカイブには付けていません。
知識不足でご迷惑かけてすみません。
宜しくお願いいたします。
>>39 bzbell さん
> 集計結果が何も表示されません。
以下の点について確認させてください。
お作りした rank_view_blogs.php を rank_view.php と同じ場所にアップロードしてますよね
各ブログの rank_post.php は同じ場所のものを使用してますか。
使用していればファイル名が異なった各ブログのログデータ作成されるはずです。
各ブログではアクセスログ収集されてますか。
(ログファイルは作成されてますか)
各ブログでロギングされないと、今回お作りしたスクリプトは何も表示されないので。
などが考えられるかな。
※既存のアクセスログが正しく集計できてる(動作してる)ことが大前提ですけど。
> 以下 27個まで続きます。
27 ブログですか
各ブログのログファイルのサイズによってはちょっと処理が追いつかないかも、です。
(わたしじゃない)bzbell さんがお使いのサーバでは cron 使えますか
cron を使用することで重たい処理を定期的(たとえば、2 時間に 1 回とか)に行って、その間は前回作った表示用ファイルを表示するようにすればパフォーマンス的にも、サーバ負荷的にも問題ないかと
>>40 bzbell さん
google#20です。説明下手くそですみませんが、宜しくお願いします。
> 1. お作りした rank_view_blogs.php を rank_view.php と同じ場所にアップロードしてますよね
同じ場所にアップしました。
> 2. 各ブログの rank_post.php は同じ場所のものを使用してますか。
> 使用していればファイル名が異なった各ブログのログデータ作成されるはずです。
はい、同じものを使用しております~。
ログデータですが、各ブログのファイルではなくて一つのファイルしか生成されませんでした。
デフォルトのページ毎ランキングと同じファイルで、ファイル名は「blog0data.txt」です。
> 3. 各ブログではアクセスログ収集されてますか。
> (ログファイルは作成されてますか)
> 各ブログでロギングされないと、今回お作りしたスクリプトは何も表示されないので。
「blog0data.txt」の中身は、ちゃんと各ブログのアクセスログが取れております。
上記ファイル中身の例
http://www.xxx.xxx/aaa/2006/10/post_8.html<>○○事務所: 勉強するということ。<>d125.FtokyoFL132.vectant.ne.jp<>http://www.xxx.xxx/aaa/2008/01/post_12.html
このような感じのログです。
使用しているサーバーは、cronは使えないみたいです。
>>41 bzbell さん
理解しました。
MT のブログ ID には 0 番はないので、そこからちょっと変かも、です。
各ブログのブログ ID でログが作成されると誤解してました。
各ブログのアクセスログが 1 つのファイルにまとまってしまうと、分析が困難です。
以上のことから、まずノーマルなアクセスログから設定する必要がありそうですね
スクリプト内に固定的にブログ ID を埋め込んでるから複数には対応できなかったですね。
わたし rank_view_blogs.php のテストしかしてなかったので、うっかりしてました
今はお仕事中なので作り直せませんが帰宅したら作ってみます。
> 使用しているサーバーは、cronは使えないみたいです。
そうですか。残念。
じゃぁ、別の方法を考えてみますね
>>42 bzbell さん
こんばんは、google#20です。仕事中なのにありがとうございます。
> 1.MT のブログ ID には 0 番はないので、そこからちょっと変かも、です。
0番は、「prototype.pagerank.js」のブログIDのところで、複数ブログの時は0番にするということで。0を設定しております。
> 2.各ブログのブログ ID でログが作成されると誤解してました。
> 3.各ブログのアクセスログが 1 つのファイルにまとまってしまうと、分析が困難です。
> 以上のことから、まずノーマルなアクセスログから設定する必要がありそうですね
> スクリプト内に固定的にブログ ID を埋め込んでるから複数には対応できなかったですね。
> 今はお仕事中なので作り直せませんが帰宅したら作ってみます。
仕事中なのに、お答えしていただきましてありがとうございます。
急ぎではないので、暇でしょうがない時とかでいいのでぜひ宜しくお願いいたします。
何度も何度もすみません
>>43 bzbell さん
> 0番は、「prototype.pagerank.js」のブログIDのところで、複数ブログの時は0番にするということで。0を設定しております。
あちゃ
わたしそれさえも忘れてました。ごめんなさい
> 急ぎではないので、暇でしょうがない時とかでいいのでぜひ宜しくお願いいたします。
はい。お言葉に甘えて少し考えてみます
はじめまして。
MT3.34 に jQuery 版を試用させていただいてます。
今のところ順調にロギングしてくれてますので、
14日分のログがたまればサイトにて公開できそうです。
ただ、cookieを有効にはしつつも有効期間を30分に設定したいのです。
jquery.ranking.js 1.05の141行目にて
now.setTime(now.getTime() + 1 * 24 * 60 * 60 * 1000);
と書かれています。
・これだと1日有効ということであってますでしょうか?
・30分に設定したい場合、
now.setTime(now.getTime() + 30 * 60 * 1000);
で問題ないでしょうか?
>>45 hiro さん
こんにちわ^^
> MT3.34 に jQuery 版を試用させていただいてます。
> 今のところ順調にロギングしてくれてますので、
> 14日分のログがたまればサイトにて公開できそうです。
ありがとうございます
ご質問の件ですが、hiro さんが明記された記述で問題ありませんよ。
チョビッとだけウンチク言うと、setTime にはミリ秒という単位で渡す必要があります。
上記を計算式にしたものになります。
余談でした
このスクリプト大変重宝しております。
感謝、感謝です。
色々実装してて思ったのですが、エントリーの概要を表示させたいのですが、可能でしょうか?
>>47 Real さん
こんにちわ^^
> このスクリプト大変重宝しております。
ありがとうございます
> エントリーの概要を表示させたいのですが、可能でしょうか?
う~ん、やったことないですが可能だと思います。PHP の機能を利用する。
PHP の機能として該当するページを読込んでメタデータを取得することができます。
メータデータ(たとえば、description)に、あらかじめ表示したエントリ概要を埋め込んでおけばできるかも、です
JavaScript からエントリ概要を渡してファイル保存
たぶん、一番手っ取り早い方法だと思います。
ページアクセス時のページ概要を JavaScript に渡して、それをサーバ側で保持(ファイル保存)するようにすればカンタンにできると思います。
拡張性はこちらに分がありそうですね
今別件(>>42)のご要望がありますので直ぐにはできないのですが、お時間いただけるのでしたらそちらが終わってから試しに作ってみますよ
>>48 bzbell さん
レス早いですね!
外出して戻ってきたら返信頂いたのでびっくりです!!
ありがとうございます。
>今別件(>>42)のご要望がありますので直ぐにはできないのですが、
>お時間いただけるのでした>らそちらが終わってから試しに作ってみますよ
是非2番の方法でお願いします。
デフォルトだとエントリーの本文に記事を書く(概要に記事はない)と、MTタグで「mt:entryexcerpt」は本分の何文字分かが表示されるように、このスクリプトでも同じような表現ができたら最高です。
ご無理を申しあげますが、よろしくお願いいたします。
>>49 Real さん
> 外出して戻ってきたら返信頂いたのでびっくりです!!
> ありがとうございます。
まるでわたしがすっごく暇人みたいじゃないですかぁ

てか、暇してますけど
たまたま、他の人のスクリプトを作ってたとこだったので。
> デフォルトだとエントリーの本文に記事を書く(概要に記事はない)と、MTタグで「mt:entryexcerpt」は本分の何文字分かが表示されるように、このスクリプトでも同じような表現ができたら最高です。
もちろんです
>>17 bzbell さん
>>18 bzbell さん
>>20 bzbell さん
>>37 bzbell さん
>>39 bzbell さん
>>41 bzbell さん
>>43 bzbell さん
わたしじゃない、bzbell さぁ~ん ( ̄∇ ̄)/
お待たせさせてしまってすいません。
>>36 のスクリプトを使用して、以下の方法で確認していただけますか。
各ブログ内に以下を追加します。
prototype.pagerank.js の記述直後に pagerank_blogid の設定を行います。
ログファイルが各ブログ単位で作成されることを確認します。
まずはご確認いただけますか。
基本プログラムをできる限り変更しないようにしたいので、お手数ですがよろしくお願いします
>>51 bzbell さん
こんにちは
googleのbzbellです。
>わたしじゃない、bzbell さぁ~ん ( ̄∇ ̄)/
!!
>お待たせさせてしまってすいません。
いえいえ、ぜんぜん待ってないですよ
ありがとうございます
>>>36 のスクリプトを使用して、以下の方法で確認していただけますか。
了解しました~!! 今日試してみます!!
返事遅くなりましてすみません。
>>51 bzbell さん
こんにちは
googleのbzbellですが、早速試してみたところ大成功しましたーーー!!
ありがとうございます
記事やカテゴリもちゃんと一つのブログとしてカウントされるようになりました!!
!!
bzbell さんには、いろいろ教えていただき、しかもスクリプトまで作っていただいて本当にありがとうございました
なにかお礼をしたいのですが、どうしたら良いでしょうか?
>>52 bzbell さん
>>53 bzbell さん
こんにちわ^^
> 早速試してみたところ大成功しましたーーー!!
やりましたねっ

でもまだ問題があります。長期的に使ってみることで負荷がどのくらいになるのか
たぶん今のままでは毎回各ログを解析してしまうので、何らかの対策が必要と思われまする
とりあえず、ロギングは成功したということで次のステップに進みますね
>>51 bzbell さん
googleのbzbellですが、すいません。今確認しましたら、ランキングのリンク先が全部トップのブログになってしまいます。どうしたらよいのでしょうか?すみません。
構造は
http://www.xxx.net/ ←メインのブログ(ランキングを表示するページ)
http://www.xxx.net/js/pagerank/prototype.pagerank.js (設置場所)
ちなみに、貼り付けるコードの一行目も
<script type="text/javascript" src="http://www.xxx.net/js/pagerank/prototype.pagerank.js"></script>
としてあります。
ランキングを集計したいブログのurl
① http://www.xxx.net/aaa/
② http://www.xxx.net/bbb/
③ http://www.xxx.net/ccc/
こんな感じです。
わかりにくくてすみません。宜しくお願いします。
>>55 bzbell さん
> ランキングのリンク先が全部トップのブログになってしまいます。
あっそっかぁ
すいません。
rank_view_blogs.php 内の 31 行目で各ブログのトップページの URL を取得してるつもりだったけど、これじゃドメイン(トップ)の URL になっちゃいますね
てか、ログから各ブログのトップページ URL を取得するのって難しいかもです
たとえば、以下のケース
(http://www.xxx.net/aaa/) ブログのカテゴリ (http://www.xxx/aaa/folder/) となってるはずなので、そこから (http://www.xxx.net/aaa/) を抽出するのって判別できない気がします
各ブログの URL を定義する必要がありそうですねぇ。
もぅ少し考えてみます。
>>56 bzbell さん
googleのbzbellです。
知識がなくてお願いしてばかりで、すみません
!!
これを機に本でも買って勉強したいとおもいます。
何かおすすめの本などありましたら教えてください。
>>57 bzbell さん
こんばんわ^^
> 何かおすすめの本などありましたら教えてください。
書籍購入して勉強したわけじゃないので、わたしがオススメなものちょっと分からないですね
ネットでも調べられるし、わたしで分かることならお教えします
で、スクリプトの件ですが、修正したrank_view_blogs.zipに UP しました。
7 ~ 9 行目を集計したいブログの情報を記入してください。
以下のようなフォーマットになってます。
上記項目の間は必ず半角コロン( : )で区切ってください。
例のごとくサンプルを明記してますので、その例にならって記入していただければと思います
>>58 bzbell さん
googleのbzbellです。おはようございます。
>書籍購入して勉強したわけじゃないので、わたしがオススメなものちょっと分からないですね
>ネットでも調べられるし、わたしで分かることならお教えします
ありがとうございます!!独学なんですか?
スクリプトありがとうございます!!
早速試してみました!!
スクリプトの記述は、 としました。何度もすみません。しかし、今度はランキングが真っ白で何も表示されなくなってしまいました。
>>59 bzbell さん
こんにちわ^^
すいません。
以下のようにブログ ID の後ろのスペースを削除してください
後ほどブログ ID の両端のスペースを削除するような処理を追加したものを UP します。
まずはご確認いただけますか
>>60 bzbell さん
googleのbzbellです。
上記の用に変えましたが同じく何も表示されませんでした。
すいません。
>>61 bzbell さん
こんばんわ^^
> 上記の用に変えましたが同じく何も表示されませんでした。
でも、今度は完璧ですよ
ダウンロードしてお使いください。
>>62 bzbell さん
googleのbzbellです。こんばんは
早速試してみました。
何度もありがとうございます!!
ランキングは正しく表示されました、しかしクリックすると飛ぶんですが、アドレスバーに
http://www.xxx.net/http
と表示されページが見つかりませんになります。
素人の意見で申し訳ありませんが、
の部分の httpの後のコロンが原因だと思いました。 でしゃばってすみません。本当に何度も何度もありがとうございます!!
>>63 bzbell さん
こんばんわ^^
> httpの後のコロンが原因だと思いました。でしゃばってすみません。
あっちゃぁ~
そぅですね、その通りだと思います
':' を ',' に変更したものを UP しました。
・・・。
今度こそ
>>64 bzbell さん
googleのbzbellです。おはようございます!!
完璧です!!できました!!
本当にありがとうございます。何度も何度も修正していただいて本当にすみませんでした!!
これからは、bzbellさん を見習って自分でも勉強して、出来るように頑張っていきたいとおもいます。
bzbellさんは、本当に優しい人ですね。これからも応援させて下さい。
これからもこのサイトを見に来ますので、宜しくお願いします!!
>>64 bzbell さん
またまたgoogleのbzbellです。こんにちは
一つお聞きしたいことがあります。
ランキング集計の期間なのですが、ブログ村みたいに一週間分(直近7日間)の合計値を集計して
ランキング順位を表示する事は可能ですか?
例 2月1日~2月7日までの集計をを2月8日に表示 次の日 2月9日には、2月2日~2月8日の集計を表示みたいな感じです。
カスタマイズしないと難しいでしょうか?
>>66 bzbell さん
こんにちわ^^
> ランキング集計の期間なのですが、ブログ村みたいに一週間分(直近7日間)の合計値を集計してランキング順位を表示する事は可能ですか?
一週間分のログを 1 日ずつシフトしながら表示・・・ということをやらないとダメなので、現状のスクリプトでは無理ですね
> カスタマイズしないと難しいでしょうか?
実現はできると思いますがチョビッと想像した限り、『はい。分かりました!!』とカンタンに、サクサクとは作れなさそうです
やるなら、カスタマイズじゃなくって新規作成ですね、別物です
!?
どぅしても欲しいですか
>>67 bzbell さん
返事ありがとうございます。
>一週間分のログを 1 日ずつシフトしながら表示・・・ということをやらないとダメなので、現状のスクリプトでは無理ですね
そうですかー
自分で勉強して、カスタマイズできる範囲ではないんですね。
残念です。
>やるなら、カスタマイズじゃなくって新規作成ですね、別物です
>どぅしても欲しいですか !?
もし作ってもらえるなら、ぜひほしぃぃです!!
今回、カスタマイズしていただいたばかりなのにこんなこと言ってすみません。
bzbell さんが暇になった時とか、作ってやるか!みたいな気分になった時でかまいません。
本当に何度も何度もすみません。
はじめまして、先ほどこちらのアクセスランキングを設置したくダウンロードさせて頂きまして、
prototype版の設置を試みたのですが、ログファイル(data.txt、period.txt)が作成されません。。。
基本、とくにいじった箇所はなく違う点といえば、prototype.jsを以前から使用しているため、
置いてある場所が違う+ヴァージョンが1.6.0_rc0なところです。
さらに、Adobe Spryやprototype.js等を利用して様々なエフェクトとかを仕込んであります。
prototype.pagerank.jsの方もそのままでして、テンプレートにて書き出しされるようにし
確認してあり、問題ないのですが。
js/pagerank/のディレクトリ属性は777にしてあります。
http://bizcaz.com/archives/2008/01/27-193535.php#c2861
にてテストしましたところ777でOKになりましたので。
js/pagerank/index.phpに直接アクセスすると、青いバーしか表示されず、
js/pagerank/ディレクトリの中にblog3period.txtというファイルが生成されてます。
そのファイルを開くと、2008030614と1行書かれています。
ブログの各エントリーにアクセスした場合は、このファイルは生成されません。
ちなみに、エントリーテンプレートには、
<script type="text/javascript" src="http://<$MTBlogHost$>/blog/import/prototype.js" charset="<$MTPublishCharset$>">
<script type="text/javascript" src="<$MTBlogURL$>js/pagerank/prototype.pagerank.js" charset="<$MTPublishCharset$>"></script>
と書いてあります。
・rank_view.php
・rank_post.php
・rank_config.php
・rank_check.php
も一切いじっておらず、属性は705,755で確認しましたが変化なしでした。
質問しておきながら申し訳けないのですが、構築していますブログは
外部からはアクセスできない社内オンリーなサイトでして、URLをお伝えできないのです。
こんな状態ですが、他何か思い当たる点等ありましたら、ご教授ください。
>>69 hide.co さん
こんばんわ^^
使っていただいてありがとうございます
ご質問の件ですが現象確認しました。
prototype.pagerank.js 内に不具合がありました。
218 行目で pagerank_post をコールする際、location というパラメータを渡しています。 先日この location パラメータを削除したので不要でした。
修正したものは UP しましたのでご利用ください
ページアクセスされると、アクセスログファイルを作成するのですが、排他制御として一時的なディレクトリを作成します。
そのディレクトリが存在してる間はずっと以降のアクセスは待ちに入ります。
ここでずっと待ちに入ってしまうようです。

てか、いつからこんな動作になったんだろ
以前確認したときは大丈夫だったんですけど・・・もしかして
とりえあず、以下のことを試してみてください。
以下はお使いのサーバの PHP バージョンによってはエラーしてしまいますが、本来の使い方です。
以上の修正を行うことで表示されることを確認しました。
また、2. の方法はサーバに依存してしまうのですが、別な排他制御を検討する必要がありますね
ご迷惑をおかけしてすいません。
>>70 bzbell さん
お世話になります、ご返信おそくなりましてすいません。
さっそく、ご提示いただきました1の手順で再アップしてみましたらところ稼動しました!
ありがとうございます!
一つ気になった点がありまして、
ページタイトルに「'」とか「"」がある場合、
例えば、I'm A Penとかがタイトルですと、
I¥'m A Penというように¥(バックスラッシュ)が挿入されてしまいます。
正規表現で&apos;とか&quot;に置き換えてもだめでした。
MacもWinも同じようになります。回避方法ありましたお教えください。
すいません、もう一つ。私Safari3ユーザなのですが、日本語の文字化け、
なんとかなりませんでしょうか?
http://kawa.at.webry.info/200511/article_9.html
が参考とのことですが、その関数をどこに貼り付ければいいのかがわかりません...
何度も恐縮ですが宜しくお願いします。
>>71 hide.co さん
> 例えば、I'm A Penとかがタイトルですと、
> I¥'m A Penというように¥(バックスラッシュ)が挿入されてしまいます。
そっかぁ、確かにタイトルに「'」、「"」使うサイトありますもんね
ということで、JavaScript 内に pagerank_espace という関数を追加しました。
その関数内で「'」、「"」などのコードを実体参照文字に変換するようにしました。
その修正版を UP しましたのでご確認ください
ただし、注意することは JavaScript に文字列(タイトルなど)を渡す前に、既に実体参照変換してしまうと同じことを 2 回やってしまうので、HTML 側は何にも変換せずに渡してください
> 私Safari3ユーザなのですが、日本語の文字化け、なんとかなりませんでしょうか?
はい。
たとえば、prototype.pagerank.js を例にすると以下のようになります。
以上で上記ページの Safari 向け関数を組み込むことができると思います。 ご確認くださいSafari 用文字コード変換関数追加
以下の関数を prototype.pagerank.js 内に追加します。
function get_response_text(req) { var text = req.responseText; if ( navigator.appVersion.indexOf( "KHTML" ) > -1 ) { var esc = escape( text ); if ( esc.indexOf("%u") < 0 && esc.indexOf("%") > -1 ) { text = decodeURIComponent( esc ); } } return text; }Ajax 実装部分を変更
prototype.pagerank.js 内の 217 ~ 224 行目を以下のように変更します。
new Ajax.Request(pagerank_post_url, { method: 'post', parameters: pars, onComplete: function(req) { // 確認用 // $(pagerank_view_box).innerHTML = get_response_text(req).responseText; } });上記はアクセス時の処理なので、ログ表示用の変更も行います。
182 ~188 行目を以下のように変更します。
new Ajax.Request(pagerank_view_url, { method: 'post', parameters: pars, onComplete: function(req) { var elem = $(pagerank_view_box); pagerank_show_ajaxloader(elem, false); elem.innerHTML = get_response_text(req); } });ありがとうございます!
バックスラッシュの件は回避できましたー!
ただ、Safariの文字化けですが、
カウントされなくなってしまいました....
new Ajax.Request(pagerank_post_url, { method: 'post', parameters: pars, onComplete: function(req) { // 確認用 // $(pagerank_view_box).innerHTML = get_response_text(req).responseText; } });↓new Ajax.Request(pagerank_view_url, { method: 'post', parameters: pars, onComplete: function(req) { var elem = $(pagerank_view_box); pagerank_show_ajaxloader(elem, false); elem.innerHtml = get_response_text(req); } });に上書きしたのですが.....>>72 bzbell さん
連発ですいません。
> 上記はアクセス時の処理なので、ログ表示用の変更も行います。
> 182 ~188 行目を以下のように変更します。
を見落としてました。。。
が、修正したもので確認しましたがだめです。化けちゃいました。
>>73 hide.co さん
>>74 hide.co さん
あっすいません
217 ~ 224 行目の修正ですが、正しくは以下のようにします。
new Ajax.Request(pagerank_view_url, { method: 'post', parameters: pars, onComplete: function(req) { // 確認用 // var elem = $(pagerank_view_box); // elem.innerHTML = get_response_text(req); } });アクセスログ時は何かページ上に表示する必要はないのでコメントにしちゃいます。
> 修正したもので確認しましたがだめです。化けちゃいました。
そうですかぁ、ダメですかぁ。
!?
わたし Safari は使ってないので未確認なのですが、上記ページの内容は 2005 年ってありますけど、確かなものなんですよね
ということは、未だに Safari は引きづってるってことですか
ちょっと Safari をインストールして確認してみます。
>>75 bzbell さん
お手数おかけしすいません。
217 ~ 224 行目付近に挿入する、
new Ajax.Request(pagerank_view_url 部分ですが、
pagerank_view_urlだとカウントしなくなってしまいます。
pagerank_post_urlだと動きますが。
Windows版Safariでもやはり文字化けしてしまいます。
>>75 bzbell さん
> わたし Safari は使ってないので未確認なのですが、上記ページの内容は 2005 年ってありますけど、確かなものなんですよね
↑2005年ということは、Safariのヴァージョンが…
現在配布されているのは、3でして。
もしやと思い、ちょっとver.2でも確認してみましたところ、2では化けません!
ということで、Safari ver.3では化けてしまうということが判明しました!
>>76 hide.co さん
>>77 hide.co さん
> Safari ver.3では化けてしまうということが判明しました!
ちょうど Safari をインストールして確認しようと思ってたとこなんです。
!?
そうなんですかっ
とりあえず、文字化けの件はクリアということですね
あとは、カウントの件ですか
Safari 用にスクリプト作りましたので、以下を試してみてください。
prototype.pagerank_for_Safari.zip
>>78 bzbell さん
Safari3での文字化け回避は、ヴァージョンアップを待つしかないようですね。。。
Safari用の件、ありがとうございます。
早速設置してみまし、index.phpにアクセスしたところ、
青罫ボックスの中に404エラーが表示されてしまいました。。。
「指定したアドレス(URL)にはファイルやディレクトリが存在しません」
となってます。。。
>>79 hide.co さん
> Safari3での文字化け回避は、ヴァージョンアップを待つしかないようですね。。。
ですね。
Firefox は遅すぎてお話にならないので Opera 使ってるんですけど、Safari は表示速いし、キレイだし結構気に入りました
> 青罫ボックスの中に404エラーが表示されてしまいました。。。
あちゃ
すいません、404 エラーがでるということはアクセス先がなかった場合です。
prototype.pagerank.js 内の 199 行目を以下のように変更してください。
new Ajax.Request(pagerank_view_url, {Safari 2 をダウンロードできるところ知りませんか
!?
>>78 bzbell さん
▼prototype.pagerank.js 内に記述。とりあえず、元に戻し、当初のbzbellの指示のようにしまして以下で問題なく動くようです。
function get_response_text(req) { var text = req.responseText; if ( navigator.appVersion.indexOf( "KHTML" ) > -1 ) { var esc = escape( text ); if ( esc.indexOf("%u") < 0 && esc.indexOf("%") > -1 ) { text = decodeURIComponent( esc ); } } return text; }▼prototype.pagerank.js 内217~224行目の修正。new Ajax.Request(pagerank_post_url, { //pagerank_view_urlをpagerank_post_urlにしました。じゃないと動かなかったので。method: 'post', parameters: pars, onComplete: function(req) { // 確認用 // var elem = $(pagerank_view_box); // elem.innerHTML = get_response_text(req); } });▼prototype.pagerank.js 内182~188行目の修正。new Ajax.Request(pagerank_view_url, { method: 'post', parameters: pars, onComplete: function(req) { var elem = $(pagerank_view_box); pagerank_show_ajaxloader(elem, false); elem.innerHTML = get_response_text(req); } });最後に、rank_view.phpをBOM付のUTF-8で上書き保存。 BOM付だと、Safari3でも文字化けは起こらないようです。pagerank_view_urlをpagerank_post_urlにしました箇所と、
BOM自体の意味もわからないのですが。
以上ですが、上記で何か問題ってあるのでしょうか?
>>80 bzbell さん
すいません、すれ違いのようで...
> prototype.pagerank.js 内の 199 行目を以下のように変更してください。
の件、ちょっと今から試してみます。
Safari2の入手先ですか…。ちょっとわからないです、ごめんなさい。
ただ、Mac OS10.4とかを中古で買うしかないかと思います。。。ってMacがないとだめですが。
Windows版は3からのリリースのため2は存在しないと思います。
>>81 hide.co さん
> pagerank_view_urlをpagerank_post_urlにしました箇所と、
BOM自体の意味もわからないのですが。
pagerank_view_url はランキング表示用 PHP スクリプトの URL になります。
pagerank_post_url はアクセス収集用 PHP スクリプトの URL です。
ですので、hide.co さんの修正で正しいです
BOM 付き!? というのがよく分かりませんが、とにかく文字化けもロギングも問題ないということですね。
よかったです
>>83 bzbell さん
> prototype.pagerank.js 内の 199 行目を以下のように変更してください。
> 確認しました。ちゃんと動作しましたー!
> BOM 付き!?
http://kawa.at.webry.info/200511/article_9.html
の最後に書かれたコメントに
そのように記載されていましたので、試しにDreamweaverでrank_view.phpを開き、
・コマンド+J 又は 修正→ページプロパティを選び、
・タイトル/エンコーディングを選択
・Unicode Signature (BOM) を含めるにチェックを入れてOK又は適用。
でいけました。
とにかく、本当にありがとうございました。長々と付き合っていただき非常に助かりました!
>>84 hide.co さん
> 確認しました。ちゃんと動作しましたー!
よかったですね
わたしも今回いろいろ勉強になりました。
BOM は調べてみます。
ありがとうございます
この前は、どうもです!
すいません、また質問なのですが…。
js/pagerank/index.phpにアクセスした場合は全件ランキングが見れて、
トップや各ページ等にしこんだAjaxでの表示では任意の順位までだけを表示
って事は可能でしょうか?
>>86 hide.co さん
こんにちわ^^
> js/pagerank/index.phpにアクセスした場合は全件ランキングが見れて、
> トップや各ページ等にしこんだAjaxでの表示では任意の順位までだけを表示
> って事は可能でしょうか?
はい。
index.php 内の 10 行目あたりに pagerank_exclude=1 という記述がありますね。その下辺りに以下を追加してください。
そうすると全件表示されます
>>87 bzbell さん
ありがとうございます!できました!
>>88 hide.co さん
> ありがとうございます!できました!
はい。
よかったです
こんにちは。 いつもテンプレートの使用や解説でお世話になっています。
今回、ランキングを実装しようと思い、上記解説を読みがんばったのですが、ギブアップです;;
アドバイスを頂ければ幸いです。
・MTバージョンは3.34 jquery版を使用
・パーミッションはサーバ推奨(レンサバ)のパーミッションでやってます
(ディレクトリ701・PHP600・js604)(bzbell様のテンプレ他、その他ツールもこれで動作しています)
・アップディレクトリは、http://www.○○○.jp/blog/mt-memo/js/pagerank
(mt-memo だけ解説とは違うところ)
こんな感じです。 まるっきり表示もされず、テキストファイルも生成できません・・・
変更した所は
var pagerank_blogid = <$MTBlogID$>;
var pagerank_blog_url = 'http://www.miaka.jp/blog';
var pagerank_home_url = 'blog/mt-memo/js/pagerank/';
です。(↑セキュリティ的に問題があったら削除して結構です)
試しに以前のコメントを参考に、パーミッションを777等いじってみましたが、現象変わらずです。
よろしくお願いします
蛇足で私が考えられる範囲の原因。。
・ブログIDの書き方、相対パスの書き方、var pagerank_blog_urlの書き方
このあたりだと推測できるのですが…。
>>90 みあっきー さん
こんにちわ^^
> 蛇足で私が考えられる範囲の原因。。
ですね。> ・ブログIDの書き方、相対パスの書き方、var pagerank_blog_urlの書き方
> このあたりだと推測できるのですが…。
まずブログ ID に <$MTBlogID$> を使用してますが、MT の再構築で jquery.pagerank.js を作成してますか
ただサーバにアップロードしただけの場合は、直接ブログ ID を記入してください。
ブログ URL と相対パスについてですが、以下のようにしてください。
たぶんこれでいけるのではないかと
ご確認ください
また何かありましたご連絡ください。
素早い返答ありがとうございます
2 については修正しました。
1 については確かにMT再構築でファイルを作成していませんでした。
しかし、「MT再構築で作成」の手順がよく分からないのと、<$MTBlogID$>の意味もよく分かりません…。
お手数ですが解説をよろしくお願いします
>>92 みあっきー さん
> 1 については確かにMT再構築でファイルを作成していませんでした。
> しかし、「MT再構築で作成」の手順がよく分からないのと、の意味もよく分かりません…。
はい。
<$MTBlogID$> はテンプレートを設置したブログのブログ ID を取得するための MT 固有のタグになります。
メインインデックスのテンプレートと同様に、新規でテンプレートを作成して、jquery.pagerank.js の内容をコピペして再構築すると、<$MTBlogID$> が 2 というように変換してくれます。
なので、>>91 の 2. でご説明した pagerank_blog_url についても <$MTBlogURL$> というタグに変更して再構築すると、そのブログの URL に変換されます。
ですが、必ずしも MT で再構築する必要はなくって、>>91 でご説明したように手書きでログ収集したいブログのブログ ID を明記すれば OK となります。
※たとえば、MT 以外のシステムを使用してる人などは手書きになります。
ちなみに、わたしのサイトではテンプレート以外にも JavaScript なども MT で管理するようにしてますの
メリットとしては、MT のデータベースをバックアップすると、それらの JavaScript などもいっしょにバックアップされるからです
さらに MT4 からはイメージファイルも MT で管理できるようになりました。
平たく言えば、すべてを MT で管理する方が何かと便利なので、わたしはそのような運用を行ってますの。
また MT で管理した JavaScript などの URL は MT のタグで取得することもできて便利ですよ
そそ、もし みあっきー さんが今のテンプレートを MT4 に対応して欲しいということであれば、作成しますのでその旨ご連絡頂ければと思います
うーん…ダメです
内容をコピペして再構築をして<$MTBlogID$>の変化を見て見ましたが、何も変化せずです…。
しかしながら、私のサイトのソースを眺めて比べていたら、どうやら<$MTBlogID$>は2だと分りました。
なので、<$MTBlogID$>を2に差し替えて再チャレンジしてみましたが、まだうんともすんとも言いません;;(タグクラウドと検索の間に設置したい)
他に原因があるような気がしてきました。
テンプレートの「メインページ」(index.php)のスクリプトのところに
<script type="text/javascript" src="<$MTBlogURL$>mt-memo/js/pagerank/prototype.js"></script>
<script type="text/javascript" src="<$MTBlogURL$>mt-memo/js/pagerank/prototype.pagerank.js"></script>
を入れる。(プロトタイプの方に変えました)
タグクラウドと検索の間の行に
<div id="pagerank_viewer"><script type="text/javascript">pagerank_view();</script></div>
を入れる。
これだけしかやってないのですが…。 とても謎です。
>そそ、もし みあっきー さんが今のテンプレートを MT4 に対応して欲しいということであれば・・・
それはとても嬉しいです!
自力で何とか動くまでに辿り着けましたが…実は、一箇所未だに分らない所があるんですよね^^;
bzbellさんの今使ってるテンプレートがとっても気に入っていて、手放せないでいるのです^^; あまりに好きなので、苦心してスタイルスイッチャーで色まで選べるようにした始末…。 これも相当てこずりました
検索の虫眼メガネアイコンです。
ソースを見る限りでは、スタイルを変える度にgifファイルの指定が出来ないように見えたんで、黒版の直指定なんです。 ですから、茶と桃ではアイコンが変わらずちょっと変に見えます(汗
私と違いbzbellさんはお忙しい方だと思いますので、MT4対応は、ゆっくりまったりしたときで結構ですよ。 とても気を使ってしまいます
しかし、対応版を出されたときはぜひ、使用したいと思っています!
話が反れてしまいましたが…よろしくおねがいします。
>>94 みあっきー さん
> bzbellさんの今使ってるテンプレートがとっても気に入っていて、手放せないでいるのです^^; あまりに好きなので、苦心してスタイルスイッチャーで色まで選べるようにした始末…。
あちゃぁ~
嬉しいですの!!
じゃ、週末から創作始めますね。一気には無理ですけど 1 つずつ作成してきます。
最初は何色がいいですか!?
> これだけしかやってないのですが…。 とても謎です。
まず、prototype 版はやめた方が良さそうです。
rico.js と競合してしまって JavaScript エラーしてます。
現状ではそれが原因と考えられます。
以下の jQuery 版をダウンロードして確認してみてください。
for_miaka-jquery.pagerank.zip
そして、pagerank/index.php をブラウザから表示してランキング表示されることを確認してください。
されなかった場合、みあっきー さんがお使いのサーバの PHP のバージョンを教えていただけますか。 PHP のバージョンによっては、PHP の内部処理で問題が発生することを確認してます。上記圧縮ファイルは一応 PHP5 が使えることを前提としたスクリプトにしてます。
また、上記圧縮ファイル中に site-search.png というイメージファイルを同梱してます。
これは虫めがねアイコンです。透過 PNG で作成し直したものですので、各テンプレート内の site-search.png と差し替えることで問題の現象は改善されると思います
- 追記 -
すいません。
よく見たら みあっきー さんのサイトでは prototype を使用してますから、prototype 版を使用してください。
for_miaka-prototype.pagerank.zip
夜分失礼します
何度も手ほどき、本当に感謝×2です。 早速やってみました。
まずは指示されたものをダウンロードし、pagerank/index.php にアクセスしてみました。
ロードgifと共に、青い枠(?)だけが目視できました。
この時点で嫌な予感がしてましたが、PHPのバージョンを調べてみると…
Php version 4.4.7
でした。。
レンサバのヘルプにも書いてありましたし、当サイトのアクセス解析ソフトにもその表示でした。
試合終了です;; bzbellさん、本当にお世話になりました!
当初の目的は、ブログコンテンツのアクセス数が知りたかった為なんです。

改めて人柄の良さを感じてしまいました。
カウンターはトップページのみにしか配置してないため、一体何人の人がブログを見ているかを知るためでした。
私のサイトはブログとwikiの閲覧が多いのは薄々感じてはいたのですが、カウンターには反映されないようにしているのです。
ならば、カウンターを置いてしまえばそれで済むのでは?と思うのが普通ですが、純粋なトップページのアクセス数だけ反映させたいこだわりがあって
そこで思い出したのが、貴方のサイトの「ランキング」機能でした。 カウンターとは意味も違うとは思いますが、まぁ大体人数程度が分ればいいかなって思ったんです。
しかし、PHPバージョンが不一致とのことで、私のブログにもカウンターが回るように設定しなおしました。
ですから、当初の目的は一応達成した(?)といえそうです
bzbellさんと試行錯誤したのはいい勉強になりました! 親身になって対応してくれて、ホントに嬉しかったです
>画像添付
ここまでして頂けるとは思わなかったです。 ただただ感謝です♪
ありがとうございます! 元々付属していたのがGifだったので、後日アドレスを変更して差し替えたいと思います
>MT4
サイトを見てもらえれば分ると思いますが、真っ黒ですしね(笑)
いやいや、あまり負担をかけたくないのでホントゆっくりでいいですよ
おそらくMT4にアップグレードする際、苦戦してなかなか出来そうにありませんし(笑)
MT3は安定していると聞いていますので、快適ですしね。
しかし、完成した際は挑戦してみようと思います!
好きな色は黒ですね。 最初はピンクが好きだったのですが、使ってるうちに、嗚呼私は黒が好きなんだなーと
長くなってしまいましたが、これからもbzbellさんのサイトの反映を祈って、終わります。 お疲れ様でした! 今日のブログにも書かせて頂きます
>>96 みあっきー さん
こんにちわ^^
そうですかぁ、ダメでしたかぁ。
PHP ってバージョン間の互換ってのを無視して、常にいいものをっ!! というスタンスらしんです
なので、すべてのレンサバ(PHP バージョン)に対応しようとするとそれなりに大変なのが分かったんですよね。
すいません、お力になれなくって
> いやいや、あまり負担をかけたくないのでホントゆっくりでいいですよ

はい。じっくり創作しながら作成していきます
好きな色は黒ですね、わたしも黒好きです。じゃぁ黒からとっかかります
今後ともよろしくですの
>bzbellさま
こんにちは。niicoと申します。
お世話になります。
今回、サイトにページランキングを設置することになり、いろいろぐぐってみたところ、こちらのページにたどり着きました。
…で、一応表示…はできたのですが、ページタイトルから任意のテキストを削除する設定がうまくいきません。 ページタイトルは 「ページタイトル:サイト名称」という形です。こちらの方法は特に難しい設定もなく、広告も出ず、デザインのカスタマイズも自由と、すばらしいですね。
var title = encodeURIComponent(document.title.replace(':<$MTBlogName$>', ''));ではダメでした。あと、rank_config.phpで集計期間を変更しても「14日間ログを集計します。」のままなんですが、なぜでしょうか?
いきなり質問で申し訳ありませんが、よろしくお願いします。
>>98 niico さん
こんばんわ^^
> ページタイトルから任意のテキストを削除する設定がうまくいきません。
はい。そこは各サイトで異なる部分となるので、個別に設定する必要があります。
niico さんとこのエントリページではどのようなフォーマットで HTML ヘッダ内の title を表示させてますか
デフォルトでは「エントリ名 - ブログ名」となっていた場合、「- ブログ名」を削除するようになってます。
> ・・・「14日間ログを集計します。」のままなんですが、なぜでしょうか?
はい。そこは自動的に変更させてないんです。
というのも、集計期間が人によって異なるため自動化するとちょっと大変なので、各自で変更をお願いしてるんですで
お手数ですが、rank_view.php 内の 72 行目を変更して頂けますか
>>99 bzbell さん
早速お返事ありがとうございます。 title部分は「エントリー名:ブログ名」です。var title = encodeURIComponent(document.title.replace(':<$MTBlogName$>', ''));ではダメでした。>> はい。そこは自動的に変更させてないんです。
>> お手数ですが、rank_view.php 内の 72 行目を変更して頂けますか
おーー。なるほど。
手動で変更しました。ありがとうこざいます。
>>100 niico さん
> title部分は「エントリー名:ブログ名」です。
えっ!? それでダメですか
!?
その変換方法で間違ってないと思います。
一つ確認したいのですが、prototype.pagerank.js( or jquery.pagerank.js )は再構築されてますでしょうか。
というのも、<$MTBlogName$> ファンクションタグを使用する場合、MT で再構築しないと正しくタイトルに変換してくれませんよね
上記 JavaScript を普通にサーバに UP しただけの場合には、JavaScript 内の以下の行を変更する必要があります。
上記 3 箇所を手修正します。
ご確認ください。
>>101 bzbell さん
niicoです。
今まで、prototype.pagerank.jsを普通にupしていたので、MTのテンプレートで作ってやってみました。 で、 258( or 227 )行目: ブログタイトル削除をすばやいお返事ありがとうございます~
var title = document.title.replace(' - <$MTBlogName$>', '');からvar title = document.title.replace(':<$MTBlogName$>', '');に変更してみましたが、ダメでした。var title = encodeURIComponent(document.title.replace(':<$MTBlogName$>', ''));も試しましたが、変わらず…FTPソフトでサーバ上のprototype.pagerank.jsを開いて確認すると、ちゃんとブログ名に変換されているんですが…
なぜなのでしょうか…
>>101 bzbell さん
たひたびすみません
あれから、休憩してから確認してみると、新しくランクインしたページのタイトルはちゃんとブログ名が削除されていました。
ブログ名が削除されたエントリータイトルと、ブログ名付きのエントリータイトルが混在しているという…
…うーーーん
時間がかかるのかな…?
もうちょっと様子を見てみます。
あと、rank_list_1st~rank_list_5thまで5位まで順位差別化クラスを入れたいな~と、rank_view.phpを見てみたんですが、こちらのページで説明されているものと、ダウンロードしたものとが若干違います。
49行目から81行目の部分がちょっと違ってます。
どのように直したら、5位までクラス名を入れることができるでしょうか。
またまた質問ばかりでスミマセン
よろしくお願いいたします。
>>102 niico さん
>>103 niico さん
こんばんわ^^
> ブログ名が削除されたエントリータイトルと、ブログ名付きのエントリータイトルが混在しているという…
あぁ~それは正しい動作です。
というのも、基本的にログファイルは JavaScript から渡されたタイトルを保持します。
なので、最初はブログタイトルが削除されなかったものをそのままログとして保持してしまいます。
途中から、正しくブログタイトルを削除するようにしたことで、混在することになります。
もし気になるようでしたら一度ログファイルを削除するといいと思います
1st ~ 5th の件ですが、rank_view.php を以下のように変更してください。
40 行目 $class_rankin = array(' rank_list_%dth', ' rank_list_%dst', ' rank_list_%dnd', ' rank_list_%drd'); 49 行目 $rankclass = sprintf($class_rankin[($cnt>3)?0:$cnt], $cnt);一応、今後 10 位までを差別化したい場合を考慮してみました。
ご確認ください
>>104 bzbell さん
毎々お世話になります。
>あぁ~それは正しい動作です。
なるほど~。
今朝見たら、ブログ名が削除されたタイトルだけになっていました。
>1st ~ 5th の件ですが、rank_view.php を以下のように変更してください。
ありがとうございます!
最初、4位と5位のクラス名がおかしくなってて、よく見たら、'rank_list_%dth'の頭にスペースが足りない。
修正してupしなおしたら、バッチリでした。
なにからなにまでありがとうございました~
お忙しい中、丁寧に対応していただき、本当にありがとうございます~。
これからも参考にさせていただきます!
ではでは
>>105 niico さん
> 最初、4位と5位のクラス名がおかしくなってて、よく見たら、'rank_list_%dth'の頭にスペースが足りない。
あちゃぁ
すいません。お手数おかけしました!!
今後ともどうぞよしなに
こんにちは。
お世話になります。
niicoです
その後、アクセスランキングは順調に動作しております。
ところで、不具合ではなくて、ちょっと質問なのですが…
うちのサイトでは、GoogleAnaliticsとfutomiのアクセス解析を併用しておりまして、その解析結果とこちらのアクセスランキングのページランキングをつき合わせてみると、若干ズレが生じております。
上位20位くらいで区切ると、ランクインしているエントリー自体はだいたい合っているのですが、順位にズレがあって、GoogleAnalitics等で見ると連日1位にランクインしているエントリーが「アクセスランキング」では8位とか…
なので、5位で区切って表示させていると、本当は1位のハズのエントリーが、「アクセスランキング」では表示されない…という事態に。
なぜなのでせう…
もしかして、今、集計期間を1日にしてるんですが、もうちょっと長く設定したほうがいいんでしょうか?
>>107 niico さん
こんばんわ^^
> GoogleAnaliticsとfutomiのアクセス解析を併用しておりまして、その解析結果とこちらのアクセスランキングのページランキングをつき合わせてみると、若干ズレが生じております。
まず「アクセスランキング」は厳密なものではないということと、アクセス解析が主旨じゃない( カウンタと同類のもの )ことをご理解いただいた上で、以下のことが考えられると思います。
GoogleAnalitics などのアクセス解析では、トラッキングコードをどこに貼り付けるかによって違ってくると思います。
たとえば、<body> 直後にトラッキングコードを貼り付けた場合、チョイ見でもカウントされちゃいますよね!? ( たしか )
でも、「アクセスランキング」の方はページが完全に表示しきってから 1 カウントします。なので、ちょと立ち寄ってすぐどっかいちゃった訪問者さんはカウントされないことになります。
※表示は即座に表示されます。
アクセス解析とカウンタとで主旨が異なります。
アクセス解析はちょっと立ち寄っただけでもログとしてデータを保持する必要があります。その上で、どのくらいの時間滞在したとか、その後どうようにページ移動したかなどの情報が得られるからです。
でも、アクセスカウンタは単純にその日にアクセスされた、重複しないもののみをカウントするだけです。
わたしのプログラムがおかしい。
すべての状況下で確認したわけじゃないので、ページビューがとてつもなく多いサイトだと問題がでるのかもしれません
といったところでしょうか
ランキングが大きく異なるのであれば 1. が怪しいように思います。
いずれにしても遊び、もしくは参考程度で考えておいてください
>>108 bzbell さん
どうもです。niicoです。
だいたい合ってるんだけど、特定の記事だけが妙に順位が低い…て感じなんですよね
トラッキングコードはbodyの一番最後に埋め込んでいるのですが、やっぱ 1. なんでしょうか?
順位がズレてる「特定の記事」は「チラ見」の人が多い…てことなんですかね?
ともあれ、些細な質問にも丁寧にお答えいただき、ありがとうございます
暑い日が続きますが、お体ご自愛くださいね
ではでは
>>109 niico さん
> 特定の記事だけが妙に順位が低い…て感じなんですよね
特定の記事だけ!? ですか
・・・断言はできませんけど、その特定ページってのは GoogleAnalitics だと 1 位なんですよね!?
う~ん
そうすると、短時間の間に頻繁にアクセスされたかどうか分かりますか!?
もしかしたらロギング漏れが発生してるのかも( >>108 の 3. にあたる )です。
できる限り処理を早く完了できるよう考えてはいるのですが・・・まだ足らないってことかなぁ
要因が特定できない以上対処のしようもないのですが、一応 PHP のコードを検討してみます。
bzbellさん、はじめまして。ちゃーりぃと申します。
いつも密かに参考にさせてもらっていますう♪
こちらのランキング表示、ありがたく使わせてもらいました。
コメント欄でのやりとりに、bzbellさんのプログラムにかける意気込みとこだわりを感じて、敬服しております。
ところで相談なのですが(笑)
今、Movabletypeをベースにサイトを作っているところなのですが、導入させていただいたランキング表示機能について、
表示されるアーカイブ名を、タグから引っ張ってきているようです。
titleタグはSEO的に押さえておくべき箇所なので、私のサイトの場合、余計な文言を付加してキーワードを埋め込みたいという
事情があり、長ったらしいものになっています。
しかし、ランキング表示の場合にはの内容がそのまま反映されるのが望ましいところです。。。
(ちなみにこんな感じです。まだ非公開なサイトなので、URL削除いただければ幸いです。)
構造上、で変数を取得するのは難しいと思いますので、私なりに思いつく方法としては、
1)別に変数を用意して参照するようにする。
2)特定の文字列(例えば「|」を含む以降の文字を除外する。
といった方法があるかと思うんですが、どの部分を変更すればいいでしょうか?
プログラムは素人なもので、アドバイスいただければ幸いです。
>>111 ちゃーりぃ さん
こんにちわ^^
> いつも密かに参考にさせてもらっていますう♪
ありがとございます。
至らないとこは多々あるかと思いますが、今後ともどうぞよしなに
ご質問の件ですが、おっしゃるようにページアクセスされるとページタイトル( title )からタイトル名称を取得してます。
そこでスクリプト中では title からサイト名称を削除する処理を追加してます。
具体的には jquery.pagerank.js 内の 227 行目になります。
たとえば、全角の「|」を含む以降のテキストを削除したい場合には上記行を以下と差し替えてください。
これにより「|」より前のテキストだけがページタイトルとしてログに残されます。 こんな回答でよかったでしょうかbzbellさん、ありがとうございます!
とりあえず言われるままにソースを書き換えてみましたが。。。
素晴らしいです!こんなに早く解決するとは思いませんでした!!
古いログはいったん消さないといけないんですね。早めに相談してよかったです。
サイト公開の暁には、宣伝させてもらいます^^
ソースを拝借したばかりか、カスタマイズにまでご協力いただいてしまって、本当にありがとうございました!!
>>113 ちゃーりぃ さん
> 古いログはいったん消さないといけないんですね。
はい。お手数ですがそのようにお願いします。
でした。
ちゃーりぃ さんのサイトとってもすてきんグーーーー
すてきんグーーーもろた
ワーイ♪
そしてbzbellさん、今度は別件で報告です(笑)^^;
僕のサイトのエントリーページでは、コメント欄を10ずつに区切って表示させるために、
MTPagenateというプラグインを使い、ページをphp化しています。
通常のリンクだと、
/hoihoi/
という形で指定したディレクトリ内のINDEXページを呼び出すようにリンクの設置をしているのですが、
phpでページ指定した場合には、
/hoihoi/index.php?page=4#comments
というリンクの指定になります(現段階での仕様として)。
これが、こちらのランキング表示機能を使うと、
/hoihoi/
と、
/hoihoi/index.php
は別のページとして認識してしまうようで、(?=以降のコマンド部分とアンカーリンク部分は問題ないようです)
別々にカウントしてランキングに出てしまっています。
ためしに別のページで、
/nyannyan/
と、
/nyannyan/index
で別々に数回リロードしたところ、やはり別々にカウントしてしまいました。
僕の場合は、いずれにしても.htaccessのリダイレクトとmod_rewriteを使ってURL表記の制御をする予定なので、
別の形で制御するイメージはついているのですが、他の利用者のみなさんにも同様の現象が出るはずです。
ということで、次回のバージョンアップでのヒントになると思い、報告させてもらいました。
ちなみにリンク先指定を /ディレクトリ名/ という形にしているのは、SEO対策上、
1)URLの表記は短いほうが好ましい
2)indexページファイルは重要視される
という事情によるものです。
長文失礼いたしました^^; ※今回の報告は、私個人としては、対応を必要とするものではありません。
bzbellさん個人的にとっても応援しています!僕でお役に立てることがあったらなんでも言ってくださいね!
---参考URL(抹消の上、掲載願います;)-------------------------------
■ランキング表示ページ
http://www.hancoin.net/indextest.html
■MTPagenateで分けられたページ例
http://www.hancoin.net/free/000007/index.php?page=4#comments
------------------------------------------------------------------
>>115 ちゃーりぃ さん
こんばんわ^^
返事が遅くなってすいません



> 次回のバージョンアップでのヒントになると思い、報告させてもらいました。
ありがとございます。確かに別物としてカウントしちゃいますね
というのも JavaScript の document.location.href からアクセスページを取得して、その URL を使用してるだけでして特に index ページの同一チェックは行ってないんです
同一チェックするにしても人によっては index.php だったり index.html、index.htm というように完全なマッチングができなさそうです。
かといって index だけで HIT させてしまうと、index_1.php などもマッチングされてしまうので、カンタンにはいかないかも
ちょと検討してみます。
こんばんは。
いつもものすごい勢いで参考にさせていただいてます^^;
このエントリのアクセスランキングjQuery版も愛用させていただいてます。
けれども、最近たとえばAjaxを利用してでHTMLファイルをDOM要素の中に反映させようとすると
どうしても動作しないんです。
全然詳しくないのですが、原因を探ったら、 jquery.pagerank.js を外すと動作するようになるみたいです。
いくつか同様のサンプルを(例:jquery.inc-5.js http://johannburkard.de/blog/programming/javascript/inc-a-super-tiny-client-side-include-javascript-jquery-plugin.html )試してみたのですが、どれも同じでした。
自分本位なことで大変恐縮ですが、一度見ていただければ幸いです。
お忙しいのにすみません。
>>117 sigeo さん
こんばんわ^^
> いつもものすごい勢いで参考にさせていただいてます^^;
ありがとございます。今後ともどうぞよしなに
> 最近たとえばAjaxを利用してでHTMLファイルをDOM要素の中に反映させようとすると
> どうしても動作しないんです。
今確認したところ、JavaScript によるエラーはでてないようです。
また、ロギングも正しく行われているようでした。
もしかして特定のページに限ったことでしょうか。
可能であれば動作してないと言われるページの URL を教えていただけますか。確認します。
>>118 bzbell さん
気が利かなくてすみませんでした。。。
http://web-marketing.zako.org/in-test.html
このページの右サイドバー一番下、
<p class="inc:recentPostsList_inc.html">※Javascriptが有効になっていません。有効にしてください。</p>
の部分が動作していない部分です。
そして
http://web-marketing.zako.org/in-test2.html
↑このページが下記コードを削除した場合のものです。
<script type="text/javascript" src="http://web-marketing.zako.org/js/pagerank/jquery.pagerank.js"></script>
知識が浅いもので、、 ご迷惑おかけしてすみません。。。
>ありがとございます。今後ともどうぞよしなに
2日に一度は見てます
こちらこそ、楽しみにさせていただきます
>>119 sigeo さん
おはよございます^^
世界は広いです。
さて、一点実験して頂きたいことがあります。 jquery.inc-5.js 内の 53 行目を以下のように変更するとどうなりますか。なるほど
勉強になりました
// $(function() { $(document).ready(function() {ご存知のように、上記コードは指定エレメントの準備でき次第処理されます。 現状だと即座に実行されちゃうわけですが、ちょとそこら辺が気になりました。 ※jquery.pagerank.js 内ではページ読込み完了次第 Logging Script が実行されるようになってます。 お手数おかけします>>120 bzbell さん
早速ありがとうございます。
ブログ見ていただいたんですね
お恥ずかしい点がたくさんありますが
早速テストしてみましたが、変化が見られなかったようです
ごめんなさい、面倒なことを丸投げしてしまっていて。
万一
分かったことがありましたらご報告させていただきます。
無知ですみません。。。
>>121 sigeo さん
> 早速テストしてみましたが、変化が見られなかったようです
あ~やっぱりそうですかぁ
そすると、実際に jquery.inc-5.js を使ってデバッグしてみないと分からないかなぁ。
単体だとそれぞれ問題ないんですもんね。
帰宅したら試してみます
>>122 bzbell さん
すいません、お手間かけさせてしまって
恐縮ですが、よろしくお願いいたします
>>123 sigeo さん
デバッグしたところ、jquery.pagerank.js 内のコンフリクトの記述が jquery.inc-5.js に影響してるようです。
結果、jquery.inc-5.js 内でエラーすることで処理が中断されてました。
sigeo さんが prototype と併用しない( てか、jQuery 使う人はあまり prototype と併用は考えないかな )のであれば、jquery.pagerank.js 内のコンフリクト処理を元に戻すことで正しくロードされることを確認しました。
以前はまだ prototype 全盛!? だったのでコンフリクトを考慮してたのですが、今どきは jQuery を使われる人も多いようなのでコンフリクトの記述をやめたバージョンをサーバに UP しました。
ですので、お手数ですが再度 ZIP ファイルをダウンロードして頂き、jquery.pagerank.js だけを差し替えていただけますか。
※sigeo さんがもし jquery.pagerank.js を再構築してるのであれば、テンプレートを差し替えて再構築してください。
てか、今どきならプラグイン化した方がいいかな。(時間があるときに TRY してみます。)
以上です。
ご連絡ありがとうございます。いろいろ勉強になりました
ご確認ください。
>>124 bzbell さん
体調悪いところに無理言ってしまって申し訳ないです
ありがとうございます。 動作するようになりました。
今だからいう話ですが、どうしてもbzbellさんのアクセスランキングが使いたくて
サーバー変える決心したので、jquery.inc-5.jsが併用できるようになってかなり嬉しいです
ちなみにすべてjQueryで統一しようと思っていたので今後便利なものを試しまくっていきます。
今後も良いものがあったら共有しますね。
本当にありがとうございました。 今夜は寝れませんw
>>125 sigeo さん
こんにちわ^^
> 体調悪いところに無理言ってしまって申し訳ないです
いいえぇ~とんでもないです。むしろご連絡いただけたことでわたしとしても助かりました。
動作確認できたようでよかったです
> 今後も良いものがあったら共有しますね。
ありがとございます
今後ともどうぞよしなに
bzbell さん
はじめまして、Mangoともうします。
いつもこちらのブログ、物凄ーく参考にさせて頂いてます。
今回アクセス・ランキングを使わせて頂き、設定、表示まではうまくいきましたが、
2点ほどどうしても解決できないことがあるので、質問させてください。
1、僕もCORESERVERを使っているんですが、pagerankディレクトリのパーミッションを
755にするとログファイルが作成されず、707にしてようやく動くようになりました。
これって問題ないでしょうか?
2、ログファイルの内容は正常に表示されるのですが、リスト一件目の上にどうしても
1行分くらいの空白ができてしまいます。CSSではこのスクリプトで出力される
class、idどちらともまだ何も指定していませんし、rank_view.phpの$sに余計な
改行や空白行が入っていないこともデバッグ文を入れたりして確認できました。
となると、あとはJavascriptの処理かな?と推測しましたが、そこら辺はどうにも
理解の範囲をこえていまして・・・。
なんとかこの空白を除去したいのですが、どうすれば良いでしょうか。
お手数おかけして申し訳ありませんが、以上ご教示いただけないでしょうか。
よろしくお願いします。
>>127 Mango さん
こんにちわ^^
ご質問の件ですが、
基本的にログファイルの書込みができさえすれば問題ないと思いますが、同じ CORESERVER で 755 でダメなんですか!?
ちょと気になりますね
あぁ~それはですねぇ、Mango さんさんとこのサイトの TITLE が改行されてませんか!?
以前 MT4 になったことで一時期問題にもなったかと思います。それが原因だと思われます。
対策としては現状だと TITLE を改行しないようにしてていただければと
改善されないようでしたらまたご連絡ください。
>>128 bzbell さん
お返事ありがとうございます。
>基本的にログファイルの書込みができさえすれば問題ないと思いますが、同じ CORESERVER で 755 でダメなんですか!?
>あぁ~それはですねぇ、Mango さんさんとこのサイトの TITLE が改行されてませんか!? なるほど、これが上記の説明文中にあったタイトルの改行の問題でしたか。 この部分だけちょっと理解できていなかったんですが、いまテンプレートのソースが このようになっているので問題ないかと思っていました。 また、出力されるHTMLソースは、bzbell さんの空白除去プラグイン等を使用させていただいて、余分な改行・空白は 一切無い状態になっています。 このテンプレートタグは何か問題ありますでしょうか?755にすると
Warning: mkdir() [function.mkdir]: Permission denied in /virtual/XXXXX/public_html/●●●.com/■■■/pagerank/rank_view.php on line 94
こんなエラーがでます。
data.txtとpeiod.txtの所有者がapacheになっているので、そのせいかなっと思ったんですが・・・。
一応動いているので、このまま行ってみようと思います。
よろしくお願いいたします。
>>129 Mango さん
こんにちわ^^
ディレクトリの所有者が「apache」の件
ディレクトリの所有者が「apache」のままだと自分でリネームや削除などができなくなってしまいます。 なので、管理メニューから所有者変更の依頼を行ってください。以下のページでもご紹介してます。
http://bizcaz.com/archives/coreserver/
TITLE の件
えっ!? そのタグだったら問題ないですね。
確認して頂きたいのですが、基本的にログファイル中のアクセスログは 1 行=1 アクセスデータとなっています。
それを前提として、Mango さんのログファイル中に 1 アクセス=複数行に跨るような(ちょとおかしいログ)などありますでしょうか。
通常ならキレイに並んでるので、おかしくね!? というのは見てすぐ分かると思います。
もしある場合、お手数ですがおかしなログの前後数行を抜粋してメールフォームからログを添付して頂けますか。確認しますので。
>>130 bzbell さん
こんにちは
1、ディレクトリの所有者が「apache」の件
これは知りませんでした。
ただ、ある程度時間が経ったら、勝手に2つのログファイルの所有者が自分になってたんですよね。
ファイルのパーミッションも707になってました。不思議です。
念のため、管理画面から「ファイル所有者の変更」ボタンをポチッとして10分ほど待ってみましたが、やはりpagerankディレクトリの
パーミッションは707じゃないとだめみたいです。755だとloader.gifが何時までもクルクル回ってます。
でもちゃんと動くので、こちらは問題ないと思います。
2、TITLE の件
全て1レコード1行になっています。
ただTrackwordからのアクセスだけアクセス元の出力が文字化けしていたので、念のためメールフォームで送ろうとしたら、
エラーが出て送れなかったみたいです。メールフォームのエラーはエラー内容が表示されていなかったので不明です。
文字化けログは以下の通りです
http://blog.esterchan.com/archives/2006/08/28181916.php>浅草サンバカーニバルで起きた嬉しいハプニング>xxxxxxxxx.xxxxxxxx..xxx.ne.jp>">http://www.trackword.biz/k/ミ+ݤ惕・>
ログに改行が含めれているわけではないし、このレコードだけ冒頭に空白ができる訳ではないので、関係無いかもしれませんが。
度々お手数おかけして申し訳ありません。
>>131 Mango さん
> ある程度時間が経ったら、勝手に2つのログファイルの所有者が自分になってたんですよね。
えっ!? そうなんですか!!
Firefox、Safari では他のリストと同様に表示されてるようです。
それは知りませんでした。じゃぁ気にすることないのかもですね
すいません。何か勘違いしてたかも・・・なので、確認させてください。
>>127で言われてます「リスト一件目の上にどうしても1行分くらいの空白ができてしまいます。」についてですが、どうも IE に限ったことのようですよ
ちょと Mango さんのサイトのコードを見させてもらったら、ページランキングのタイトル( dt タグ )の span が正しく閉じられてないようです
それが原因か分かりませんが確認してみてください。
>>131 Mango さん
ちょとだけ Mango さんの CSS みさせてもらいました。
気になった点をいくつか・・・。
- 元々サイドバーのコンテンツをメインコンテンツ内にレイアウトしてますが影響はないですか!?
- .side セレクタで padding の上下 15px に対して、.side の子にあたる ul タグなどの margin はどのようになってますか!?
ざっと見てちょと気になりましたたとえば、メインコンテンツ内の ul 属性とサイドバー内の ul とではスタイルが異なる(テンプレートによりますが)ことがあります。
たとえば他のサイドバーコンテンツに習って .side #page_rank li {margin: 0;} などとやるとどうなります!?
>>132 bzbell さん
>どうも IE に限ったことのようですよ
なるほど、そうですかぁ。
僕の環境ではFirefox、IE6、Operaとみんなどうしても空白ができてしまうんですよね。
ただ、ブラウザや環境によって違いが出るようなら、やはりCSSの可能性大なので、もう少し
そのあたりを掘り下げてみたいと思います。
ちなみにspanの件はbackgroundを指定したブロックの中にもう一回backgroundのイメージを
おくにはどうしたらよいか試している途中でした。実験中に席を立ってしまい、中途半端な
ソースが残ってました。紛らわしいことしてすみません。
あと、サイトを見て頂いたのでお気付きかも知れませんが、うちのブログって、bzbell さんの
記事やサイトのアイディアをパクリまくりなんですよね。
いつかちゃんとお礼を言いたいと思ってました。
今回の件もあわせて、本当にありがとうございます。
いろいろお手数おかけしてしまって申し訳ありませんでした。
>>133 bzbell さん
本当に、何度もすみません。
>1、元々サイドバーのコンテンツをメインコンテンツ内にレイアウトしてますが影響はないですか!?
sideセレクタですね。これを確認するためにclassごとはずしたり、セレクタをはずしたり、新しくセレクタを作ってみたり
したんですけど、変化が現れませんでした。
>2、.side セレクタで padding の上下 15px に対して、.side の子にあたる ul タグなどの margin はどのようになってますか!?
ちなみにログにAAA、BBBの2レコードがあるとして、rank_view.php79行目でhtmlを出力している部分を、 と2度連続にしてみると、> たとえば他のサイドバーコンテンツに習って .side #page_rank li {margin: 0;} などとやるとどうなります!?
空白が表れるのがリストの上部一回だけなので .side #page_rank li {margin: 0;} と .side #page_rank ul {margin: 0;} の両方で
試してみましたがこちらも変化がありませんでした。
→空白
AAA
BBB
AAA
BBB
となり、やはり冒頭にのみ空白が表れます。
取り急ぎ、ご報告まで。
>>134 Mango さん
やっぱり margin が関係してるようです。 以下のスタイルを追加してみてください。 わたしの方では Firefox、Safari、IE いずれも隙間なく表示できることを確認しました。 きっと Mango さんとこでも隙間が消えると思います.side #pagerank_viewer ul { margin: 0; }お試しください- 追記① -
何で margin を疑ったかというと、Mango さんとこ(小粋空間さんとこ)の .side に包含される ul などの margin がデフォルトだったためです。
- 追記② -
何で確認できたかというと、Mango さんとこのトップページのコードを少し拝借しまして、わたしの環境下で同一コードで表示確認できたからです。すいませんでした。
>>136 bzbell さん
何度もご親切にアドバイスをくださってありがとうございます。
ご指摘くださったmarginの件、.side #pagerank_viewer ul { margin: 0; } と試してみましたが、残念ながら空白は
消えませんでした。
ここで、原点に戻ってみようと、pagerankファオルダに同梱されているindex.php(pagerank/index.php)を調べてみました。
これならば、僕がいじったCSSとは無関係なので、原因が特定しやすいと思ったんです。
結果から書きますと、インストールしたままのindex.phpでも青い外枠とリスト最上段との間に1行分の空白が出ていました。
なにかが出力されているように思えたのでprototype.pagerank.js205行目のelem.innerHTML~の次の行にalertを入れてみたら、 の直前に何か入っていました。一見空白のように見えましたがバイナリエディタでしらべるとBOMでした。 BOMは3バイトなので2バイト文字列のUTF-8で全て除去する方法が思いつきませんでしたが(javascriptの知識が無いので)、 とりあえず上記205行目を以下のように変更して、1文字削ってみたところ今まで悩んでいた空白がなくなりました。 BOMを削るだけなら、もっとまともな方法があると思いますが、BOMは文字化け対策か何かで付加されているのですよね? そうすると安易に削ってしまうわけにもいかないし、でも空白は取りたいし、何か良い方法がありましたら 教えていただけないでしょうか?さらにFirefoxだと、マウスで選択してみると空白の左端が1文字分くらい選択できてしまいます。(IE6だと1行選択されます)
ホント、しつこくてすみません。
>>137 Mango さん
えーーーーっ!? BOM ですか!?
BOM っててっきりファイルの先頭にあるコードなだけだと思ってました。
確かに Safari の文字化け対策で BOM 付きのスクリプトにしてますけど、PHP から自動生成されるタグ中にも BOM って付けられるんですか!?
そうなのかぁ・・・知りませんでした
う~ん
BOM はスクリプトから付けたり/削除したりってのはできないはずですから、それが原因なら PHP のスクリプトを BOM なし UTF-8 で保存し直すしかないと思います。
※コード的には意図して BOM を付加するってことはやってないので。
ちなみにわたしのサイトでも以下のページ(jQuery 版)でも先頭に BOM は付いてないようです。
http://bizcaz.com/mt_memo/js/prototype/jquery/
> とりあえず上記205行目を以下のように変更して、1文字削ってみたところ今まで悩んでいた空白がなくなりました。
もしかして、Mango さんはエンジニアさんですか
!?
少しお聞きしますが、上記は必ず 1 文字目が BOM ってことでしょうか。
先頭に BOM が付く要因って分かりますか!? どうも BOM のコードが付加される理屈がよくわからなくって
- 追記 -
BOM を削除する方法っての教えてもらいました。
rank_view.php 内の 73 行目辺りに以下を追加してみてください。
if (ord($s{0}) == 0xef && ord($s{1}) == 0xbb && ord($s{2}) == 0xbf) { $s = substr($s, 3); }相変わらず出力するコードの先頭に BOM が付くっていう理屈は分かりませんが、確認してみてください。
>>138 bzbell さん
> もしかして、Mango さんはエンジニアさんですか
3年前までエンジニアでした。体を壊しドクターストップがかかってやめました。
ただ、事務処理系や工場制御系の仕事ばかりだったので、WEBアプリとかPHPとかjavascriptは未経験です。
今は一人でWEBの勉強を始めたところですが、bzbell さんもご覧の通り、CSSなんか素人丸出しです。
ですから独学でここまで高度なことを成し遂げてしまうbzbell さんはお世辞抜きで尊敬しちゃいます。
> 上記は必ず 1 文字目が BOM ってことでしょうか。
正確には1文字目ではなくinnerHTMLで挿入される文字列の先頭3バイトみたいですよ。バイナリエディタで見たら
先頭3バイトが EF BB BF になってました。
参考:http://www.atmarkit.co.jp/fxml/rensai/w3cread38/w3cread38_1.html
javascriptがわからないので、とりあえずネットで調べて、手っ取り早く1文字削って見ましたが、
本当ならバイト単位で削らないとですよね。今のやり方だと1バイトごみが残っちゃう様な気がします。
で、インストール直後から毎回空白行ができていたので、BOMは必ず付加されるみたいです。
> 先頭に BOM が付く要因って分かりますか!? どうも BOM のコードが付加される理屈がよくわからなくって
)
残念ながら僕の今の知識では全く調べ切れていません。
そこで、以下のような条件を仮定してみました(かなり独断と偏見に満ちてます
・最終的に出力される文字列(タグ)にBOMは必要ない(文字化け対策に関係ない)
・PHP側の処理でBOMは付加されていない(前々回のコメントで書いたとおりecho $s;を2度繰り返してもBOMがつくのは冒頭の1回のみ)
・jquery版の最終出力ではBOMは付加されていない。
・とするとBOMを付加しているタイミングはPHP側から文字列が返されたあとその文字列を処理している、かつjqueryとprototypeで大きく異なっている箇所
こんな感じでもう少しあたりをつけてみようと思います。
お役に立てず、しかも質問ばっかりで申し訳ありません。
>>139 Mango さん
> 3年前までエンジニアでした。体を壊しドクターストップがかかってやめました。
やっぱりっ
だって BOM って普通シロウト知りませんから(わたしもシロウトだけど PHP 勉強して始めて知りました)
> PHP側の処理でBOMは付加されていない(前々回のコメントで書いたとおりecho $s;を2度繰り返してもBOMがつくのは冒頭の1回のみ)
これすっごく気になりますね。
PHP 自体は jQuery 版も prototype 版も同じものなので結果は変わらないはずなんですよね。
試しに BOM なしで保存したバージョンを以下に置いておきます。お手数ですが PHP スクリプトだけ差し替えてご確認頂けませんか。
http://bizcaz.com/archives/shoco/js/prototype.pagerank_without_BOM.zip
ちなみに Mango さんがお使いの PHP は 5.2.5 ですか!?
また、PHP をモジュールとして動作させてますでしょうか!?
ご存知かも知れませんが、PHP はモジュールモードと CGI モードで動作可能なんです。それぞれメリット/デメリットがあります。
※CORESERVER ではデフォルトはモジュールモードになります。
ここら辺に関係してないか調べてみます。
- 追記 -
わたしはページアクセス、投票(Five Star Rating)の PHP スクリプトだけ CGI モードで動作させてます。他はモジュールモードです。
具体的には、pagerank/ ディレクトリの中に .htaccess を置いて、その中に以下を追加しています。
>>140 bzbell さん
今日は遅くまでお付き合いくださってありがとうございました。
以下の点確認しました。
1、rank_view.php 内の 73 行目辺りにBOM除去の処理を入れる
→変化ありませんでした。というかif (ord($s{0}) == 0xef ~ の条件分岐に引っかからない=echo前の$sの段階ではBOMがついていない?
2.PHPのバージョン
→5.2.5がはっきりわかりませんが、CORESERVERのサーバー仕様のページに5.2系と書いてありました。
3、PHPの動作モード
→モジュールモードです。ディレクトリ毎に記述してモジュールによってモードを変えるという発想はありませんでした。
これは目からうろこです。ありがとうございます。
4、PHP動作モードの変更
→変化ありませんでした。.htaccessを記述してcgiモードに変えてもBOMはついているようです。空白行も表示されました。
5、BOM無しPHPファイル(prototype.pagerank_without_BOM.zip)への差し替え
!!!。もちろん空白行は表示されません。
→BOMがつきませんでした
スクリプトファイルがBOM付で保存されていると、そこからの出力も自然BOM付きになってしまうということでしょうか?
BOMを除去するタイミングが難しいですね。
今日は一日振り回しちゃってすみません。
本当に感謝してます。
>>141 Mango さん
おはよございます。
> スクリプトファイルがBOM付で保存されていると、そこからの出力も自然BOM付きになってしまうということでしょうか?
そんなかんじっぽいですよねぇ
しかも同じ CORESERVER なのにってのが・・・。
ただ、わたしテストしてるときそんなこと一度もなかったし、使われてるサイトさんの一覧見てもそのような現象はなさそうだったのが気になるなぁ
違いと言ったらやっぱり PHP の動作モードになりますよねぇ。
まぁ元々 Safari 向けに BOM 付きにしたんですけど、今となっては JavaScript 側でコード変換してるからなくっても問題ないかも、ですね
勉強になりました。
今後ともどうぞよしなに
はじめまして。とても参考にさせていただいています。
MT 3.35を使ってこのアクセスランキングを表示させようと試行錯誤しています。
こちらのコメントでも何件かあがっていますがタイトルの削除についてです。
タイトルはテンプレートで<title><$MTEntryTitle encode_html="1"$> | <$MTBlogName$></title>
削除方法は#112を参考にさせていただいて
var title = document.title.replace(/|.*$/, '');
が当てはまるのかと思いjquery.pagerank.jsの222行目以下を
$(document).ready(function()
{
var title = document.title.replace(/|.*$/, '');
pagerank_post(pagerank_blogid, title, pagerank_blog_url, '');
});
に書き換えました。
しかし結果がおかしなことになっています。。。
タイトルが全て表示されてしまう上に、先頭に同じ番号がついています。
正しいタイトルの削除方法を教えていただけますでしょうか。よろしくお願いいたします。
>>143 meico さん
こんばんわ^^
> しかし結果がおかしなことになっています。。。
おっかしいですねぇ。
> タイトルが全て表示されてしまう上に、先頭に同じ番号がついています。
なんと不可解な
その正規表現で問題ないと思うんですけど・・・「|」は全角ですよね!?
半角の「|」だとマッチングされないのですが、間違いないですよね!?
ページタイトルを確認したいので、お手数ですが meico さんサイトの URL を教えていただけますか。
※コメントは公開しませんので URL は伏せます。
bzbellさんご回答ありがとうございます。
1日たってログが安定したのか(?)本日きちんと希望通りの形で表示されました!!お騒がせいたしました。
ところが……(汗)
今回、ブログ内検索用のscriptを使用している関係で、このランキングのscriptと競合してしまうようです。
(検索用のscriptを外すと表示されます。)
このscriptの競合を回避する方法がありますでしょうか…?
js/prototype.jsになります。
(ブログではprototype.pagerank.jsではなくてjquery.pagerank.jsを使用しています。)
また、もう一つ問題がありまして。年別のアーカイブというのをつくっていて
2008というフォルダが自動生成されます。
その結果、2008配下のインデックスページもランキングに含んでしまうようです。
このページをランキングに含めない方法はありますでしょうか?
サイトのURLをお知らせいたします。
作成途中のため、公開はご遠慮くださいますようよろしくお願いいたします。
もしお時間がありましたらご確認ください。
すみません、お手数おかけいたします。
>>145 meico さん
こんばんわ^^
解決してよかったです
以上ですこのscriptの競合を回避する方法がありますでしょうか…?
meico さんは jQuery でコードを書くことできますか!?
jQuery にコンフリクト( 衝突 )を防ぐ機能があるのですが、そちらで jqeury.pagerank.js を変更すれば大丈夫だと思います
具体的には 1 行目辺りに以下を追加します。
次に 177、178、181、182、185、215、217、223 行目の行頭にある「$」を「jQuery」に変更します。
このページをランキングに含めない方法はありますでしょうか?
はい。除外したいページに以下を追加することでそのページはカウントされなくなります。
たとえば、すべての月別アーカイブページを除外したい場合には、テンプレート内の HTML ヘッダ内に上記を追加すれば OK です。
また、meico さんが MT の MTSetVar タグなどを使いこなせるようでしたらもっと効率よくできると思います
おはようございますbzbellさん
ご回答ありがとうございます!
教えていただいたように修正したらできましたー!うまく動作しました!
ほんとーーにありがとうございます!!
script関係やPHPは私には難しくて一つつまずくと
もう前になかなか進めないのでかなり心身ともにブルーになってしまいます。。
でも今回はbzbellさんに素早く回答していただいてかなり心強かったです。
今後とも参考にさせていただきます。ありがとうございました。
>>147 meico さん
おはよございます^^
解決してよかったです
今後ともどうぞよしなに
はじめまして。
先日MT3.3にjQuery 版にてアクセスランキングを導入させて頂きました。
ログが貯まってきたのでそろそろ公開しようかと思うのですが、ページタイトルの表示で不都合(見栄えが悪い部分)がありまして質問させて頂きます。
コメントをクリックして個別ページへ移った場合、ページランキングの方で記事タイトルが「記事タイトル#AnchorComments#AnchorComments」という風に表示されてしまいます。
(テンプレートには <a href="<$MTEntryPermalink archive_type="Individual"$>#AnchorComments">コメント[<$MTEntryCommentCount$>]</a> と記述しています。)
pagerankのpv数は「記事タイトル」「記事タイトル#AnchorComments#AnchorComments」と別(二重)になることはなく、リンク先は個別ページのトップに正しく飛ぶのですが、
コメントから個別ページに飛ぶと、それまで「記事タイトル」だったものが「記事タイトル#AnchorComments#AnchorComments」に差し変わってしまいます。
私のテンプレートの書き方が悪いのかと思いますが、#AnchorComments#AnchorCommentsというのを表示させない方法がお分かりになればと思い質問させて頂きました。
「コメント数をクリックして開かれたページはカウントしない」という回避法でも構いません。
p.s 最近のコメントでコメント投稿者部分にもリンクを張り、その方のコメントへ飛ぶようにしているのですが、こちらも同様にpagerankの記事タイトルの表示が見苦しいことになってしまいます。
bzbellさんの所では問題ないですね。。。やはり私のテンプレートに問題がありそうですね。
>>149 ポニョ さん
こんばんわ^^
お返事が遅くなってすいません
> コメントから個別ページに飛ぶと、それまで「記事タイトル」だったものが「記事タイトル#AnchorComments#AnchorComments」に差し変わってしまいます。
確か以前にも同じような現象の人がいて、同じような質問されたことがあります。
でも何だったか思い出せなくって
可能であれば ポニョ さんのサイト( 現象 )を見させてもらえますか。
> コメントをクリックして個別ページへ移った場合、ページランキングの方で記事タイトルが「記事タイトル#AnchorComments#AnchorComments」という風に表示されてしまいます。
これもおかしぃんですよねぇ。
というのも、ページランクのスクリプト中ではロケーション( #AnchorComments )を削除して、普通の URL に変換するような処理が入ってるんです。
なので、ポニョ さんのような現象がでること自体ちょと問題なんですよね。
何れにしてもサイトを見せて頂ければ早期解決かと
>>150 bzbell さん
お返事ありがとうございます。
記事タイトルの表示に悩んでまだブログにはランキング表示をさせていないのですが、こちらのページで確認して頂けると思います。
http://●●●.jp/
続きを読むで個別ページに移っても#more#moreになってしまいますね。
上記のランキングは変動があって症状を確認できないといけないので、念のためテストページのアドレスもお知らせしておきます。
http://●●●.jp/test
(左サイドバーにランキング表示。デザイン調整中でお見苦しいですが)。
記述を変更した所と言えば、<ul><li>を<ol><li>に変えた事と、様子を見ながら集計期間を変更しようと思ったので「14日間ログを集計します」を消した事だけだったと思います。
他にはjquery.innerfade.jsでニュースティッカー風お知らせをつけているので、競合する部分があっておかしくなるのかな?と素人判断しておりました。
症状が解消されなければ「ブログには表示させずに一人こっそりランキングを見られればいいかな」と思い始めておりましたので、bzbellさんのお暇なときにでも検証して頂ければ幸いに思います。
>>151 ポニョ さん
こんばんわ^^
サイト拝見させてもらいました。
猫ちゃんたちかわいいですね
ウチにもわがままな娘が一匹します。もぅかわいくってしょうがないです
それはさておき、どうやら IE からのアクセスだとポニョ さんが言われる現象が発生するようです。しかも URL からロケーション( #xxx )が削除されてないのだと思ってたら、タイトルに #xxx がついてるんですね。
Firefox や Safari などのモダンブラウザでは問題ないようです。
なので、スクリプト的には問題なさそうなのですが、一応以下のスクリプトを試してみて頂けますか。
http://bizcaz.com/archives/shoco/js/jquery.pagerank_for_ponyo.zip
タイトル名がおかしい場合には、わたしが作った jquery.pagerank.js に問題があります
おかしくない場合、他のスクリプトにてページタイトルの変換!? みたいなことされてる可能性があります。
また、テストが完了したらそのスクリプト( jquery.pagerank.js )中の 22 行目~ 26 行目を削除すればそのまま使用可能です。その際テンプレート内のランキング表示部を少し変更する必要があります。
サンプルとして index.php を添付しますので参考にしてください
>>152 bzbell さん
bzbellさんの所も可愛いお嬢様がいらっしゃるんですね♪
うちはヤローばかりなので女の子は羨ましいです。
報告が遅くてすみません。
どうやら私得意の凡ミスをしている様で、bzbellさんに作っていただいたファイルに差し替えた所白紙状態になってしまったので、表示確認でき次第また改めてご連絡に上がります。
(色々試して現在はtest/js/pagerank/下にjquery.pagerank.jsとindex.phpを置いています。初心に返ってjQuery版を再ダウンロードし、私用にご用意下さったjquery.pagerank.jsとindex.phpと差し替えてサーバーにアップしてみましたが、data.txt等が生成されない状態です。差し換え用だからそういう仕様だったり?)
また、お詫びしなければいけない事が!
昨晩はCSSのデザイン調整をして、表示確認で普通に個別ページを見ておりました。
故に途中でページランキング部分が#AnchorComments#AnchorCommentsなしのタイトルになってしまった時間帯がございます。
bzbellさんが見に来られたら症状が確認出来ないじゃないの!とすぐに再現したのですが・・・タイミングの悪いことをしてすみませんでした。
ponyo/pagerank/で症状が出た状態にして確認すると、IE6でもFirefoxでも同じ表示になります。
(それにしても、症状が消えたり現れたりするので、次の方が記事タイトルをクリックでプレビューするとpagerankのタイトルは元に戻る(最新のものになる?)のでしょうかね???)
長々とすみません。明日もう一度ご用意下さったファイルで表示確認してみます。
>>153 ポニョ さん
こんばんわ^^
&gt; どうやら私得意の凡ミスをしている様で、bzbellさんに作っていただいたファイルに差し替えた所白紙状態になってしまったので、表示確認でき次第また改めてご連絡に上がります。
あっ!! ごめんなさい
JavaScript を差し替えただけだと白紙になっちゃいますね。
プラグイン化したので使い方が別物になってるの忘れてました
お渡ししたスクリプトを使う場合には、テンプレート内のランキング表示のコードをサンプルの index.php のようにする必要がありました。ちょと手間かかっちゃうかな
&gt; (それにしても、症状が消えたり現れたりするので、次の方が記事タイトルをクリックでプレビューするとpagerankのタイトルは元に戻る(最新のものになる?)のでしょうかね???)
お察しのようにランキングは URL で識別するのでページタイトルは最新のものが表示されます。なので、現象が出たり消えたりすると思います。
問題は、アクセスログファイル中に #AnchorComments#AnchorComments というページタイトルで保存されてしまうことなんです。
本来はそのような保存のされかたしないはずなんです。
わたしの環境で、データをイジくってみて同じ現象がでるか確認してみますね。
>>153 ポニョ さん
こんにちわ^^
原因が分かりましたよ。
ポニョ さんとこで貼り付けてる猫グッズの Amazie のスクリプトがページタイトル名を IE に限って書き換えてます。
たとえば、http://ponyo.com/xxx.php#auau などのように存在しないロケーション( #auau )をくっつけても同じ現象が発生します。
また、IE のタイトル名のところを見てると分かると思いますが、最初は正しく表示されてるのに、途中から #auau が追加されることが分かります。
きっと Amazie のスクリプトを外すと問題ないと思いますよ
今後も Amazie を使い続けるようなら、不具合としてご報告した方が良いように思います
以上ご確認ください
>>155 bzbell さん
お手数をおかけしました!&原因究明ありがとうございました!
他のjavascriptが競合しているのかもと、<MTIgnore>でひとつひとつ除外しながら検証していたのですが分からず、「こりゃ複数のjsでバッティングしてるのかな?」と思っていました。
デザイン変更でリニューアルしようと思っていた所なので「これまでのjsは全て捨てて一から作り直すかな...」と思った所でのbzbellさんからのお返事、とてもとても助かりました。
検証作業に大変なお手間を取らせてしまい申し訳ありませんでした。
(申し訳ないから検証はしていただかなくても大丈夫と書きに来た所でした)
Amazieに報告をし、改変が難しい様でしたら普通のAmazon商品リンクに差し換え様と思います。
bzbellさんのスクリプトには問題のないこと・関係のないことにまで丁寧にご回答下さいましてありがとうございました。
感謝にたえません。
>>155 bzbell さん
こんばんわ。はじめまして。
amazieを開発・公開していますAUSGANG SOFTです。
ポニョさんから、今回の問題をご指摘いただいて、調べた結果、原因がわかりましたのでこちらにもご報告させていただきます。
IE+Flash Player で Location Hash 使ったときにタイトルが変わる問題
http://d.hatena.ne.jp/nitoyon/20081209/ie_location_hash
原因は、ほぼ間違いなくIEです
で、対処方法としては↑のページで抜粋で示されているようなコードをsetIntervalで回してチェックすれば、解消できそうです。
この対処用のコードをどこが書くのかが悩ましいところなんですが
もし、可能でしたら、こちらのアクセスランキングのJSの中で、対処用のオプションとして取り入れていただけたらと思いご連絡差し上げました。
お手数ですが、よろしくご検討ください。
>>156 ポニョ さん
こんばんわ^^
> 検証作業に大変なお手間を取らせてしまい申し訳ありませんでした。
いいえぇ、どぉいたしまして
基本的に原因が分からないと嫌な性質なので気にしないでください。
最近は忘年会やら何たらパーティやらで帰りが遅い日もありますが、たまたま暇だったのでおせっかいしちゃいました
ステキなテンプレがんばってください
今後ともどうぞよしなに
>>157 AUSGANG SOFT さん
こんばんわ^^ & ご連絡頂けて感謝します。
そうですか、やっぱり IE ですか。
いろいろ検証してる中で IE だけに限った現象だったので十中八九 IE かななんて思ってました。
> もし、可能でしたら、こちらのアクセスランキングのJSの中で、対処用のオプションとして取り入れていただけたらと思いご連絡差し上げました。
ありがとうございます。
追加して試して確認してみます。
>>159 bzbell さん
お返事ありがとうございます。
組み込んでいただけるとのことで、感謝です。
ちょっとその後、対処を方法を考えてみたので蛇足ですが書きます。
↑で紹介した対処方法は、document.titleがおかしくなる問題を修正するスクリプトなのですが、アクセスランキングの集計に正常に現れる処理にとどめても良い気がしました。
IEでかつ、location.hashがあれば、
document.titleの末尾に、location.hashが含まれてないか
(Flashが複数貼られたページの場合、複数ついている可能性がある)
含まれていれば、#でsplitして本来のタイトルを取得する。
(本来のtitleに#が含まれていた場合の対処も)
という処理を、集計用PHPに送る前に挟めばよいのかなと。
アクセスランキングの仕組みを理解してないので、もしかしたら、
タイトルを送られてないのかもしれないですが。
ご参考までに。
>>159 bzbell さん >>160 AUSGANG SOFT さん
色々お騒がせ&お手数をおかけしてしまい申し訳ありません。
bzbellさんの方で対処策をご検討いただけるのですね♪
> この対処用のコードをどこが書くのかが悩ましいところ
頑張って自分で対処してみますとAUSGANG SOFTさんには言ってみたのですが、私には敷居が高くて。。。
自分の知識と技量が足りないのが悪いのだから、どれかを諦めることになっても仕方がないと思っておりました。
年の瀬も近いことですしご多忙でしょうから、ご無理のない範囲で作業をして頂ければと思います。
(ご面倒でしたらノータッチで構いません。少々見栄えが悪くたって私のブログなら支障なしですから。)
p.s IEに限って起こる現象という意味が分かりました。
Firefoxでも同じ表示になるなどと勘違いな事を申し上げてすみませんでした。
>>160 AUSGANG SOFT さん
> bzbellさんの方で対処策をご検討いただけるのですね♪
はい。現象が発生してもいいように対策は入れるつもりです。
困ったものです。
でも、ランキング・スクリプトでは Location Hash は使用してないのですが、他のスクリプトで使用されてた場合、現象が発生しちゃうんですよね
なので、AUSGANG SOFT さんがおしゃるように PHP 側にページタイトルを転送する直前で末尾の #xxx を無条件に削除してしまおうと思ってます。
幸いわたしのサイトでも Amazie のスクリプトを使わせて頂いてるので、FLASH に変更して動作確認してみます
>>161 ポニョ さん
こんばんわ^^
> bzbellさんの方で対処策をご検討いただけるのですね♪
はい。
手っ取り早く Ajax による転送直前でページタイトルの #xxx をすべて削除するよう対策してみます。
一応わたしの方でも確認しますが、できれば ポニョ さんにもお手伝いして頂けると助かります
ポニョさん向けのスクリプトを作成しましたので以下の ZIP ファイルをダウンロードして確認していただけますか。
http://bizcaz.com/archives/shoco/js/jquery.pagerank_for_ponyo.zip
お手数ですがよろしくお願いします
- 追記 -
一応カンタンにですが動作確認しました。
具体的には以下のような対策になります。
var name_split = document.title.split('#'); opt.page_name = name_split[0].replace('Movable Type 備忘録 - ', '');上記コードは以下のようなことをやってます。
以上です。
ご確認ください。
>>163 bzbell さん
大変遅くなりました!
私の凡ミスで只今おかしな集計をしているのですが、bzbellさんがご用意下さった「ページタイトル#xxx」の#xxxを削除するという動作は確認OK(動作良好)です。
(ブログ記事ページのアクセス数を集計するべき所、ページランクのindex.phpを集計してしまってますが、しかしこれは私の設置ミスなのでスルーして下さい。
ページランクのindex.phpにFlashとアンカーリンクを張って、IEでテストしました。)
年の瀬のお忙しい時期に煩わせてしまって申し訳ありませんでした。
助かりました♪どうもありがとうございました。
>>166 ポニョ さん
こんばんわ^^
改善されたようですね。良かったです
大したことできませんでしたが、今後ともどうぞよしなに
いつも拝見させてもらってますヽ( ´ ▽ ` )ノ
最近始めたばかりのド素人で
MovableTypeの世界で当たり前のこともよくわかっていません。
いつもなら半日近く調べてやっと解決できるんですが、
今回は自分の頭の中じゃわからないので・・・
サーバはチカッパ
MT4.23を使っています。
起こった問題は
リンクをクリックしてもカウントされないということです。
GoogleChromeは1回目のクリックには反応してくれるけど
それ以降は反応しません。
Firefoxは3回に1回のペースで反応してくれるだけです。
PHP・JavaScriptの知識は底辺なのでアドバイスをお願します。
よろしくお願します。
>>166 海の河童 さん
こんばんわ^^
まず、同一 IP アドレスによるページアクセスは 1 日 1 回に制限してます。
同じ人が同じページを何度もクリックしたのでは公正なアクセスログを取得できませんからね
で、海の河童 さんが言われてることはそういったことではないですよね!?
ロリポップが先日 PHP5 使えるようになったと聞いたので、チカッパでも PHP5 は使えますよね!?
アクセスランキングを設置したページの URL を教えていただけますか。
一度確認させてください
>>167 bzbell さん
URLは
http://successstory.jp/kurashitas_page/です。
>まず、同一 IP アドレスによるページアクセスは 1 日 1 回に制限してます。
>同じ人が同じページを何度もクリックしたのでは公正なアクセスログを取得できませんからね
そうですよねヾ(´▽`;)ゝ
自分のサイトはまだアクセス数が少ないので
自分でリンクを追ってテストするしかなかったのでエラーと勘違いしたのかもしれません。
今のところ正しく動作していますでしょうか?
あと、
var title = encodeURIComponent(document.title.replace(':', ''));のところがよくわかりませんでした。
現時点でタイトルが
アクセス数 サイトの名前 「記事のタイトル」という感じになっていますが、これを
記事のタイトル アクセス数にするためにはどうしたらよいでしょうか?
よろしくお願します。
>>168 海の河童 さん
こんばんわ^^
海の河童 さんとこのサイトを確認したところ、とりあえずログには書き込まれてるようです
やっぱりちょと変っ!! ていうのがありましたら再度ご連絡頂けたらと思います
しばらく様子を見てみてください
> 記事のタイトル アクセス数にするためにはどうしたらよいでしょうか?
はい。CSS でデザインする必要があります。 ダウンロードした圧縮ファイル中にサンプルとして index.php というのがあるかと思います。 そのファイル中に CSS を明記してますので参考にして頂けたらと思います。 たとえば、海の河童 さんのご希望の順番に表示したいのであれば以下のようになります。ul#page_rank li a span.right { padding: 0 .5em; float: right; ★これがポイント font-weight: 700; }>>169 bzbell さん
まずは、動作しているようでよかったです。
お忙しい中ありがとうございます。
あとですね~
ブログタイトルの両サイドに「」が付いているのですが、
どのようにしたら消せますか?
サイトのタイトルなら消せたのですがヾ(´ε`;)ゝ
これが出来れば完成します。
よろしくお願します!!
>>170 海の河童 さん
こんばんわ^^
> ブログタイトルの両サイドに「」が付いているのですが、
> どのようにしたら消せますか?
どうも 海の河童 さんとこのエントリページの TITLE 属性に「が付加されてるようですよ

なので、テンプレート中にそのような記述がされてるのではないでしょうか。
ご確認ください
>>171 bzbell さん
普通に「」をつけていましたヾ(´▽`;)ゝウヘヘ
お騒がせしました!!
これからもよろしくお願します。
>>171 bzbell さん
お疲れ様です。
ログが動かなくなってしまいました。・゚゚・(≧д≦)・゚゚・。
アクセス数が少ないので確かめられません。
一度、見ていただいていいですか( p_q)
>>173 海の河童 さん
こんばんわ^^
確かにロギングされてないようですね。
ソースを確認したところ、JavaScript エラーが出てるようです。
ブログ記事ページでは必ず mt.js を HTML ヘッダ内に記述するようにしてください。
また、ちょと気になることが prototype.js を重複して読込んでるようです。
Google のライブラリを読込んでるようなので、pagerank/prototype.js は不要です。HTML ヘッダから削除してください。
>>174 bzbell さん
こんばんは(*゚‐゚)
ブログ記事ページにmt.jsを読み込ませて
prototype.jsを削除しました。
重複したらダメなんですね。勉強になりました。
まだ調子悪いみたいです。(´;ェ;`)
>>175 海の河童 さん
こんばんわ^^
> まだ調子悪いみたいです。(´;ェ;`)
う~ん・・・困りましたね。
まず、海の河童 さんとこでは JavaScript エラーが発生してます。
その影響でページランキング用のロギングスクリプトが実行されてないと思われまする。
ですので、1 つずつ確認してエラーを取り除いてください・・・としか言えないのです
ただ、気になることがありまして、shadowbox の初期化コードを以下のようにやってみてもらえますか。
変更前 window.onload = Shadowbox.init; 変更後 Event.observe(window, 'load', function() { Shadowbox.init(); });prototype を使うなら上記のようなハンドラ登録の方がよろしいかと
>>176 bzbell さん
お忙しい中すみません
shadowboxのコードを変更しました。
非常に初歩的なことなんですが、
JavaScriptのエラーはどうやってわかるのですか?
Firebugで十分でしょうか?
Firebugではエラーなくなりました。
>>177 海の河童 さん
こんにちわ^^
海の河童 さんは Firebug による JavaScript のデバッグが可能なんですね!?
それでしたら話は早いです。ざっくり説明すると、
- prototype.pagerank.js 内の下の方( 258 行目辺り )にブレークを張ります。
- 適当なブログ記事ページを表示します。
- 正しく動作していればブレークを張ったコードがジャンプされます。
あとはステップ実行で実際にコードが正しいかどうかを確認することができます今わたしの方で確認したら、ロギングのスクリプトは実行されてます。
なのでログファイル中に記録されてると思いますよ
原因は >>176 の件だったのでしょうか。
あと、ブログ記事ページの HTML ヘッダ内に mt.js が消えちゃってますね
その影響で 1 つだけエラーしてますよぉ。
>>178 bzbell さん
ちゃんとカウントされてました
感動しちゃってもう(´;ェ;`)
Firebugは使いこなせてないんですけどねヾ(´▽`;)ゝ
mt.jsも読み込ませたはずが
出来ていませんでした。
これも全てbzbell さんのお蔭です。
自分もJavaScriptなどを猛勉強してbzbellさんのようなスキルを見につけたいです。
これからも参考にさせていただきます。
本当にありがとうございましたヾ(*ΦωΦ)ノ
bzbellさんこんにちは
ランキングで表示されるタイトルに日付やカテゴリー名も一緒に表示されてしまいます。
Line 22の opt.page_name = name_split[0].replace(' - ブログ名', ''); をいろいろいじっていても
自分ではよく理解できないのでご質問いたしました。
私のブログの場合タイトルが:
タイトル名 - 2009年03月12日 - カテゴリ名 - サイト名
となっております。具体的にどういう風に記述すれば日付などのを取り除くことができますでしょうか?よろしくお願い致します。
aki
>>180 aki さん
こんばんわ^^
aki さんのケースだとマッチングはムズかしいので以下のように変更してください。var title = document.title.split(' ')[0];これでタイトル名称だけを抜き出すことができます。ご確認ください
bzbellさん、こんにちは
試行錯誤しながらjQuery版を設置してみました。
トップページやアーカイブページを対象外にすること、ページタイトルだけを抜き出す事・・・等、ここに書かれているとおり、ひとつずつクリアしていって出来上がってゆくのに感激し、感謝しきりです。
おたずねしたいのは、複数ブログを対象にした時、
1 サイトのトップページには全ブログを対象にしたランキング表示
2 各ブログのトップページには当該ブログのみを対象にしたランキング表示
させたいことです。
http://***.net/(←サイトトップ)
http://***.net/book/ (~以下、階層下げて個別ブログ)
http://***.net/cinema/
(今は便宜上、bookブログにサイト全体のランキングを表示させ、cinemaには当該ブログのみのランキングを表示させています。)
最初はpagerankディレクトリを各階層(ブログ)ごとに追加で設置してやればいいかと思ったのですが、それでは追加したjquery.pagerank.jsの方が優先して当該(個別)ブログのランキング(カウント)には効くけれど、サイト全体のランキングにはカウントされず漏れてしまいます。
何か方法がありますでしょうか。
>>182 羊 さん
こんばんわ^^
> おたずねしたいのは、複数ブログを対象にした時、
> 1 サイトのトップページには全ブログを対象にしたランキング表示
> 2 各ブログのトップページには当該ブログのみを対象にしたランキング表示
> させたいことです。
実は以前にも同じことをご質問されました。
jQuery 版をお使いでしたら、以下のページでご紹介してるスクリプトを使っていただければ可能です。
http://bizcaz.com/archives/2008/10/04-002457.php
考え方としては、1 つのトラッキングコード( JavaScript )から全ブログ、個別ブログというようなログの解析は困難なため、全ブログ用、個別ブログ用というように 2 つのトラッキングコードを各ページに埋め込む・・・といったかんじになるかと思います。
以下のコードを各ブログのページに埋め込んでください。
<!-- ▼個別ブログ用トラッキングコード▼ --> <div id="book_pagerank"> <script type="text/javascript"> $('#book_pagerank').PageRank({ blog_id:1, blog_url:'http://***.net/book/' }); </script> </div> <!-- ▼全ブログ用トラッキングコード▼ --> <div id="grand_pagerank"> <script type="text/javascript"> $('#grand_pagerank').PageRank({ blog_id:0, blog_url:'http://***.net/' }); </script> </div>※行頭に全角スペースが入ってます。コードをコピーする際には行頭の全角スペースを削除してから使ってください。ポイントとしては、
表示先を #book_pagerank と #grand_pagerank というように分けていること。
PageRank のパラメータの blog_id を、それぞれ 1( http://***.net/book/ 用 )、0( 全ブログ用 )に分けていること。
※全ブログ用の #grand_pagerank は CSS にて非表示( display:none; )を指定することを忘れずに ( ̄∇ ̄)b
そうすれば個別ブログ用だけがランキング表示されます。
です。
ですが、実は先ほど jQuery 版に関しては最新のアクセス・ランキングスクリプト( ローテーションバージョン )を公開したばかりなんです。
http://bizcaz.com/archives/2009/03/15-174253.php
ついでですから、複数ブログのログを集計できるようカスタマイズしてみましょうか
今わたしが思いつく方法なら 1 つのトラッキングコードで、全ブログ用、個別ブログ用のログ収集が可能かも。
※とはいってもよく考えないとダメですけどね
>>183 bzbell さん、早速のご対応、ありがとうございます。
ランキング表示の解説ページは全て熟読したつもりで、ご指摘されたあたりかなあとは思っていたところです。
(同じ事に時間を割いていただき、すみません)
ただ、今回、プラグイン版とこのページ(その4)で説明されている方法と両方、試してみて、プラグイン版の方はうまくゆかず、こちらの方がうまく表示できたので、こちらで処理を進めていたところです。
今回のアドバイスもプラグイン版が前提となっているようですので、まず、そちらをもう少しよく調べてみたいと思います。
ちなみにプラグイン版の方で疑問になるのが、解説されているパスが
js/jquery/pagerank/ だったり
js/pagerank/ だったり
js/ だったりするのですが、これは私の考え違いでしょうか
>>ついでですから、複数ブログのログを集計できるようカスタマイズしてみましょうか
これ以上、お手を煩わせるのも気が引けますがそうしていただけると嬉しいです。
おそらく同じリクエストを持っている方は多いと思いますので・・・。
お時間のあるときにでも・・・。
まずはこちらで日をあらためて、もう少し頑張ってみます。
>>184 羊 さん
> ちなみにプラグイン版の方で疑問になるのが、解説されているパスが・・・
すいません、統一した方が誤解がないですね
だった場合、http:bizcaz.com/ からの相対パスを指定となると以下のようになります。要するにトップページから見た、pagerank/ フォルダまでの相対パスを指定して頂ければと思います。
たとえば、
> おそらく同じリクエストを持っている方は多いと思いますので・・・。
羊 さんが使われてるサーバでは cron というものは利用可能でしょうか。
利用可能な場合すっごく楽に全ブログのログデータを一覧することができます
>>185 bzbell さん
いつも早速のご対応、本当にありがとうございます。
いちユーザーにここまで親切に対応していただいて、頭が下がります。
サーバーでcronは使えますので、有効活用したいと思っていたところです。
羊はもう眠りにゆきますし、理解がすぐには追いつかないので、bzbell さんもお時間のあるときでかまいませんので、よろしくお願いします。
>>186 羊 さん
一応以下のページでカンタンに説明してますのでご確認ください。
http://bizcaz.com/archives/2009/03/16-013119.php#more
bzbell 様
参考にさせていただいて、なんとか自サイトにアクセスランキングを導入できました!
ありがとうございます!!
ちなみにお聞きしたいのですが、
ランキングに画像を使用することは可能でしょうか?
自サイトでは、<$MTBlogURL$><$MTCategory$>/<$MTEntryTitle$>/l.jpg という名前で、
共通のサムネイルを表示しています。
これをアクセスランキングで使用することは可能でしょうか?
お忙しいところ恐縮ですが、ご教授願えれば幸いです。
宜しくお願いいたします。
>>188 mopre さん
おはよございます^^
ランキングに画像を使用するのは可能です。
ただ、mopre さんがやろうとしてることは、ランキングの順位に限らずサムネイルを表示したい…ということだと思いますが正しいでしょうか。
それなら、以下のランキング・スクリプト( 最新版 )なら mopre さんのお好きなようにデザインすることができるのでもっと楽かも
http://bizcaz.com/archives/2009/03/20-220335.php
http://bizcaz.com/archives/2008/10/04-002457.php
上記では JavaScript 内で取得したランキングログをお好みでマークアップすることができます。
その際に mopre さんのサイトデザインに合わせてタグに ID、CLASS をつけてあげれば良いと思います。
わからないことがありましたらご連絡ください。
今後ともどうぞよしなに
>>189 bzbell さん
早速のご返信ありがとうございます!!
>ただ、mopre さんがやろうとしてることは、ランキングの順位に限らずサムネイルを表示したい…ということだと思いますが正しいでしょうか。
ページにて紹介されていたものをデフォルトで使用すると、
<a href="リンク">エントリータイトル名</a> という形でアクセス数順に吐き出されると思いますが、
希望としては、
<a href="リンク"><img src="<$MTBlogURL$><$MTCategory$>/<$MTEntryTitle$>/l.jpg"></a>
というかたちでアクセス順に吐き出してほしいと考えています。
この場合は、
Prototype
http://bizcaz.com/archives/2009/03/20-220335.php
で実現できますでしょうか?
たびたびのご質問でたいへん恐縮ですが、ご教授いただければ幸いです。
>>190 mopre さん
おはよございます^^
アクセスされたページとサムネイルの関連付け
一番てっとり早いのは、ログ保存時にサムネイルの URL もいっしょに保存してしまう。
修正ファイルは、prototype.pagerank.js と rank_post.php になります。
JavaScript と PHP のスクリプトの両方を変更する必要があります。
これが mopre さんの方でできれば実現できるのではないでしょうか
bzbell様
ご返答誠にありがとうございます。
> 1.アクセスされたページとサムネイルの関連付け
一番てっとり早いのは、ログ保存時にサムネイルの URL もいっしょに保存してしまう。
修正ファイルは、prototype.pagerank.js と rank_post.php になります。
JavaScript と PHP のスクリプトの両方を変更する必要があります。
これが mopre さんの方でできれば実現できるのではないでしょうか
やっぱり一筋縄ではいかなそうですね。
JavaScriptとPHPの知識がほぼ初心者なので、
今回はあきらめて、現状のアクセスランキングをうまくサイトに合わせる方法を考えてみます。
ありがとうございました。
お疲れ様です。

すいません、こちらでもお聞きします。
何故か急にランキングの中にIPアドレスがまぎれてしまうように
なったのですが、やっぱりサーバのせいでしょうか??
カスタムでも青色吐息でなかなか頭を抱えてしまいます・・・
でも、こっちは諦めないようがんばるつもりです
ご指導よろしくお願いします。
>>193 かお さん
こんばんわ^^
新しいバージョンのものは IP アドレスで保存してます。
変換などは行ってませんのでそれが正しい。何か問題ありますでしょうか。
>>194 bzbell さん
どうも!この間はありがとうございました。
すいません、文章が下手で
ランキングに直接IPアドレスがはいってるんです。
たとえば
ランキング
一位の記事
二位の記事
・
・
・
十位の記事
softbannk.2…
みたいなかんじで最後にひとつだけ
リンクと一緒に貼りこまれているんです。
それでデータをノートパッドでみると
飛び飛びですが改行がはいったデータがありました。
スクリプトは特にいじってません。
コメントをみても同じ人がいないので
他の何かが影響してるのでしょうか?
ご指導よろしくお願いします。
>>195 かお さん
それはおっかしいですね。
いってん確認しますが、かお さんのサイトの TITLE 属性は以下のようになってますでしょうか。
上記 TITLE 属性のテキストが既に改行されてる場合、そのような現象が発生すると思われまする。
※特に JavaScript 側で何の処理もしてませんので。
まずはご確認を。そして、改行されてる場合には改行しないよう対応して頂けたらと思います
>>196 bzbell さん
おお!
確かに改行されてます!!
デフォルト状態だったのですがMTタグの改行も改行されるんですねー。
とりあえずまっすぐにしてみました。
後は明日のお楽しみです・・・ドキドキ
これでおkだったらもしかして新しいバージョンも・・・
ありがとうございます!!
なおりました
最小限しか知識がないので本当に助かります。
お世話様でした。