SOHO MIND

人気記事ランキングを表示

category: - シップ @ 2004/10/09 6:06:02 PM

ブログのどのエントリーが多く読まれているのか、ランキングを表示する方法です。
MT-MostVisitedというプラグインを使わずに、CGIとJavaScriptを使います。
こちらの利点は
1.Apacheのログが必要ない。
2.過去全期間のランキングを表示できる。
3.リアルタイムで順位が上下する。再構築の必要なし。

デメリットは
1.リンクがJavaScriptを利用して作るので検索エンジン対策にはならない
2.JavaScriptがOFFだと表示されない
3.CGIを設置しなければならない。

では設置方法を。
MT=Movable Typeのインストールディレクトリ

下記URLからRankerのスクリプトファイルをダウンロード(Movable Type用をDL)
http://computer.shipweb.jp/soft/ranker.htm

MT/ranker 解凍するとrankerフォルダ配下にファイルが作成されるのでMTフォルダに移動。

[ranking.cgi] 1行目のPerlのパスを書き換える。
52行目の$code = ‘euc’;の[euc]の部分をMovable Typeで使用している文字コードにする。
シフトJISの場合’sjis’、EUCの場合’euc’、UTF-8の場合’noconv’
[ranking.cgi]を置き換えた文字コードで上書き保存しなおす。

rankerフォルダをMTフォルダ配下にアップロード
パーミッション書き換え

[ranking.cgi] SuEXECの場合:744 そうでない場合:755
[ranking.js] SuEXECの場合:644 そうでない場合:666

サーバーによって違う場合もあります。

Movable Typeにログインし、Individual Entry Archiveテンプレートを開く。

<body>と</body>の間に以下のタグを挿入。

<img src="<$MTBlogURL$>ranker/ranking.cgi?name=<$MTEntryLink$>&num=PP&type=image&file=<$MTEntryTitle$>">

個別ページの再構築をする。

次に、Main Indexテンプレートを開く。
ランキングを表示したい場所にidがrankingbodyのdivタグを挿入

<div id=rankingbody></div>

以下のスクリプトをどこでも良いので挿入。最後の方が良いと思います。
<SCRIPT TYPE="text/javascript">
var FILENAME = new Array();
var NUM = new Array();
var NAME = new Array();
</SCRIPT>

<SCRIPT TYPE="text/javascript” SRC="<$MTBlogURL$>ranker/ranking.js"></SCRIPT>
<SCRIPT TYPE="text/javascript">

function ranking(s,e,d){
if (s==""){s=0;};
if(e==""){e=8;}
var StartN=s;var EndN=e;
if (StartN<0){StartN=0;}if(EndN>FILENAME.length){EndN=FILENAME.length;}
pagetext = “<div style=’text-align:center;’>";pcounter=1;
for(i=0;i<FILENAME.length;i+=8){
if (StartN==i){
pagetext+=" "+pcounter+" ";
}else{
pagetext+=" <a href=’javascript:ranking("+i+","+(i+8)+");’>"+pcounter+"</a>";
}
pcounter++;
}
pagetext += “</div>";
var texthead,textbody,textfoot,headtext;textbody="";
objrank = document.getElementById("rankingbody");
for(i=StartN;i<EndN;i++){
ntext = “("+NUM[i]+")"; //ヒット数を表示する場合。しない場合はntext = “";に置き換えてください。
textbody+=(i+1)+" <a href=’"+NAME[i]+"‘>"+FILENAME[i]+"</a>"+ntext+"<br>";
}
objrank.innerHTML = textbody+pagetext;
}
</SCRIPT>
<SCRIPT TYPE="text/javascript">ranking(0,8,"");</SCRIPT>

Main Indexテンプレートを再構築。

どれかのエントリーを表示してみます。
その後、ブログのトップページを表示してランキングが表示されれば成功です。

もしうまくいかない場合はコメント欄で質問してください。わかる範囲でお答えします。

MT-MostVisitedプラグインをつかった人気記事ランキングの表示は一色政彦さんが以下の記事で書いてくださっていますので参考になさってください。
MTで人気記事ランキングを作る

8件のコメント

  1. こんにちは。
    自分とこでは、MT-MostVisitedの設置が出来ない事が判明して、ググりまくって、やっとこさここに辿り着きました。ありがとうございます。

    なんとか設置は出来たのですが、どうにも文字化けして困ってます。
    自分のMTはUTF-8なので、ここの説明通りに作業しました。

    考えられる原因として、OSやブラウザに関係しているのではなかろうかと疑ってます。
    FireFoxでアクセスした時のログは文字化けしてないのですが、IEでアクセスした時のログを見ると文字化けしていました。
    解決策があれば教えて下さい。

    Comment by ちゃっぴー - 2005/3/9 Wednesday @ 16:38

  2. ちゃっぴーさん、はじめまして。コメントありがとうございます。

    文字化け、私も困っています。仰るとおりIEでアクセスするとばけてしまうんですよね。。
    私は化けたときは「ranking.js」をダウンロードして、正しく編集して、アップロードするという手順を踏んでいます。
    このタイトルは一回アクセスして、化けずに書き込まれればその後は化けないので、最初にエントリーしたときにFireFoxでそのエントリーを表示させてタイトルを「ranking.js」に書き込んでしまえば大丈夫だと思います。

    また何かあったらご連絡ください。

    Comment by シップ - 2005/3/9 Wednesday @ 17:41

  3. 早いお返事ありがとうございます。

    そうなんですかぁ。。。まさか手作業で直してたとは(笑

    とりあえず、メモを残しておきます。

    jcode.plがUTF-8に対応してないって事で、UTF-8に対応しているJcode.pmを使ってみました。

    Jcode.pmをダウンロードしてきて、同フォルダにアップロード。
    修正可所:
    ・57行目あたり
    require ‘./jcode.pl’;

    use Jcode;

    ・75行目あたり
    &jcode’convert(*p,$code);

    &Jcode’convert(*p,$code); #小文字を大文字に修正

    以上。

    文字化け直らず(泣

    あれこれ試してるので、何か成果がありましたら、またご報告にあがります。

    Comment by ちゃっぴー - 2005/3/9 Wednesday @ 19:47

  4. FireFoxとIEで結果が違うなんて、まったく困ったものです。
    自分はFireFoxを使ってるんで、何事もなく設置出来たと喜んでたのもつかのま。
    IEで表示しようとすると、何も表示されませんでした。
    どうやら、おかしなコードが入ったファイルはIEでは処理出来ないようで、スクリプトエラーなる警告マークがブラウザの左下に表示されてました。
    最初は、ranking.cgiの修正でなんとか出来ないものかと、あれこれ試したのですが、良い結果が得られませんでした。
    そうこう頭を悩ませてると、ひらめきました。

    FireFoxでは、きちんとUnicode(UTF-8)で送信してくれるけどもIEでダメなら、、、
    ブラウザに問題があると断定して、調査をしてみる事に。

    IEのインターネットオプション→詳細設定に

     □常に UTF-8として URL を送信する(再起動が必要)

    こんな項目がありました。しかし既にチェックが入ってる状態。うーん。

    そういえば、
    「URLに日本語を入れてはダメで、URLエンコードして入れなければならない」って事を今更ながら思い出した。
    そういえば、googleの検索結果のURLはURLエンコードされてたっけ。

    てことで、ブラウザー内であらかじめURLエンコードした値をセットしとけば良いのでは?との結論に達しました。

    テストページをこさえてから、そのページにranking.cgiのタグを埋め込んで見ました。
    こんな感じ↓
    <img src="http://www.x.x/ranker/ranking.cgi?name=www.x.x/x.html&num=PP&type=image&file=%A5%C6%A5%B9%A5%C8″>

    ※「%A5%C6%A5%B9%A5%C8」は「テスト」をURLエンコードした文字列

    IEでテストページを表示してみる。おーー!ranking.jsの中身は文字化けしてません!
    結果オーライです。やった。(ガッツポーズ)

    当然MTには、URLエンコードするタグはあるだろうと勝手に決めつけてました。
    やっぱりありました。さすがMTです。

    なんやかんや、長々と講釈をたれましたが、結論は以下。

    Individual Entry Archiveテンプレートに挿入するタグをちょっと修正するだけ。

    < $MTEntryTitle$ > これを
       ↓

    < $MTEntryTitle encode_url="1″$> に修正。

    あーよかった。

    Comment by ちゃっぴー - 2005/3/10 Thursday @ 18:03

  5. ちゃっぴー さんありがとうございます。
    もうMT使っていないので、情報ありがたいです。

    直ったようで何よりです。

    私の方も早く直さないと。。手作業はやはり面倒(笑
    あとはログ削除機能をつけたいですね?。今のままでは蓄積されるだけだから、昔の記事がどうしても上位に入ってきてしまうので。

    Comment by シップ - 2005/3/10 Thursday @ 21:31

  6. 記事とシップさんとちゃっぴーさんのコメントを参考にさせていただきました。
    多分正常に動いているみたいです。
    MT-MostVisitedがうまくいかなかったので大変助かりました。
    ありがとうございました?

    Comment by すぺふん - 2005/7/26 Tuesday @ 17:55

  7. すぺふんさんはじめまして?
    使っていただいて嬉しいです。
    また何か問題ありましたら遠慮なくどうぞ♪

    Comment by シップ - 2005/7/26 Tuesday @ 18:32

  8. ありがたくダウンロードさせていただきました。
    ajaxっぽいのですごく好きです。ありがとうございました!

    Comment by つちや - 2006/3/20 Monday @ 21:21

このコメントの RSS

Leave a Comment

ごめんなさい、現在コメントを付けることは出来ません

26 queries. 0.064 seconds. Powered by WordPress ME