追記:2009/9/7
以下のカスタマイズは、MT4i Ver.3.0以降の場合となります。ver.3.0未満(テンプレートファイルが無いバージョン)の場合は、うごくひと2のマイページで取得したコードをほぼそのまま、mt4i.cgiに追加するのが宜しいかと思います。
******
Mt4i × うごくひと2 の動的での導入方法(iyahooi.com:blog様)
ご覧いただきまして、ありがとうございます。ご指摘いただいた過不足およびうごくひと2の解析画面でページタイトルを取得する方法に辿り着きましたので、前回不完全な物を公開してしまったお詫びと共に、訂正版をここに記させていただきます。
1.うごくひと2のマイページ⇒HTMLタグ発行からコードを取得
MT4iはperlで書かれていますので、「Perlのコード」を拝借することにします。
▼サンプル
use URI::Escape qw(uri_escape);
use CGI;
my $UH2q = new CGI;
my $UH2url = "http://b14.ugo2.jp/?u=XXXXXX&h=XXXXXX&guid=ON&ut=1&qM=".uri_escape($UH2q->referer()."|Az|".$UH2q->server_port())."|".uri_escape($UH2q->server_name())."|".uri_escape($UH2q->url(-absolute => 1))."|P|&ch=UTF-8&sb=".uri_escape("[page title]");
print '<img src="'.$UH2url.'" width="1" height="1" alt="携帯アクセス解析" border="0" />';※「XXXXXX」部分はユーザー・サイト毎に異なるので、ユーザー・サイト登録後、うごくひと2のマイページから取得した値の物を使用してください
2.「(MT4iディレクトリ)/mt4i.cgi」の編集
宣言に「use URI::Escape qw(uri_escape);」を追加する。具体的には、30行目付近にある
use strict;
use CGI;
use HTML::Template;
use Storable qw(lock_store lock_retrieve);
use FindBin qw($Bin);
use List::Util qw(first);
の後ろにくっつけて、
use strict;
use CGI;
use HTML::Template;
use Storable qw(lock_store lock_retrieve);
use FindBin qw($Bin);
use List::Util qw(first);
use URI::Escape qw(uri_escape);
こんな感じに。
3.(多分)3900行目付近にある「sub _tmpl_common {」内にコードを追加する。
##################################################
# Sub _Tmpl_Common - Fill the common parameter.
##################################################
sub _tmpl_common {
の箇所を探して、うごくひと2のマイページ>HTMLタグ発行から取得したコードを一部修正してここに貼り付けます。
my $UH2q = new CGI;
my $UH2url = "http://b14.ugo2.jp/?u=XXXXXX&h=XXXXXX&guid=ON&ut=1&qM=".uri_escape($UH2q->referer()."|Az|".$UH2q->server_port())."|".uri_escape($UH2q->server_name())."|".uri_escape($UH2q->url(-absolute => 1))."|P|&ch=UTF-8&sb=".uri_escape("[page title]");
print '<img src="'.$UH2url.'" width="1" height="1" alt="携帯アクセス解析" border="0" />';
まず上記の赤文字部分を削除して、
$tmpl->param(UH2 => encode("shiftjis",decode("euc-jp",$UH2url)));
を追加し、
return $tmpl;
の直前に挿入します。
# Emoticon
$tmpl = __emoticon($tmpl);my $UH2q = new CGI;
my $UH2url = "http://b14.ugo2.jp/?u=XXXXXX&h=XXXXXX&guid=ON&ut=1&qM=".uri_escape($UH2q->referer()."|Az|".$UH2q->server_port())."|".uri_escape($UH2q->server_name())."|".uri_escape($UH2q->url(-absolute => 1))."|P|&ch=UTF-8&sb=";
$tmpl->param(UH2 => encode("shiftjis",decode("euc-jp",$UH2url)));return $tmpl;
こんなかんじ。ついでに、赤文字の部分がどうも間違ってる臭いので、修正しておきます。同時に、携帯はShiftJISなのでパラメーター「ch=」の部分も変更しておきます。
# Emoticon
$tmpl = __emoticon($tmpl);use URI::Escape qw(uri_escape);
use CGI;
my $UH2q = new CGI;
my $UH2url = "http://b14.ugo2.jp/?u=XXXXXX&h=XXXXXX&guid=ON&ut=1&qM=".uri_escape($UH2q->referer())."|Az|".uri_escape($UH2q->server_port())."|".uri_escape($UH2q->server_name())."|".uri_escape($UH2q->url(-absolute => 1))."|P|&ch=SJIS&sb=";
$tmpl->param(UH2 => encode("shiftjis",decode("euc-jp",$UH2url)));return $tmpl;
これで多分OK。
4.ページタイトル取得用に新しいテンプレート変数を用意する
ここが今回訂正のキモです。これをやらないと、解析画面でページタイトルが表示されるハズもないし、セキュリティ的にも少々×でした。すみませんでした。
追加するのは3箇所です。まずは600行目付近の
########################################
# Sub Individual - 単記事ページの描画
########################################
を探します。この中をぐーっと探して800行目付近でしょうか。
$template->param(ENTRY_TITLE => encode("shiftjis",decode("euc-jp",$d_f.&conv_euc_z2h($entry->title))));
という記述がありますので、その直後に追加して
$template->param(ENTRY_TITLE => encode("shiftjis",decode("euc-jp",$d_f.&conv_euc_z2h($entry->title))));
$template->param(ENTRY_TITLE_E => uri_escape(encode("shiftjis",decode("euc-jp",$d_f.&conv_euc_z2h($entry->title)))));
とします。同じように、次は1000行目付近の
########################################
# Sub Comment - コメント描画
########################################
を探して、
# 結果を変数に格納
$template->param(ENTRY_TITLE => encode("shiftjis",decode("euc-jp",&conv_euc_z2h($entry->title))));
に追加して
# 結果を変数に格納
$template->param(ENTRY_TITLE => encode("shiftjis",decode("euc-jp",&conv_euc_z2h($entry->title))));
$template->param(ENTRY_TITLE_E => uri_escape(encode("shiftjis",decode("euc-jp",&conv_euc_z2h($entry->title)))));
最後に、1800行目付近の
########################################
# Sub CommentForm - コメント投稿フォーム
########################################
を探して、
# 結果を変数に格納
$template->param(ENTRY_TITLE => encode("shiftjis",decode("euc-jp",&conv_euc_z2h($entry->title))));
に追加
# 結果を変数に格納
$template->param(ENTRY_TITLE => encode("shiftjis",decode("euc-jp",&conv_euc_z2h($entry->title))));
$template->param(ENTRY_TITLE_E => uri_escape(encode("shiftjis",decode("euc-jp",&conv_euc_z2h($entry->title)))));
これで(多分...)mt4i.cgiの修正は完了です。
5.フッターテンプレートにコードを追加する
次に「(MT4iディレクトリ)/tmpl/footer.tmpl」を開き、「うごくひと」の画像が表示されても良いところに
<a href="http://ugo2.jp/m/"><img src="<TMPL_VAR NAME="UH2"><TMPL_IF NAME="MODE_INDIVIDUAL"><TMPL_VAR NAME="ENTRY_TITLE_E">%3a</TMPL_IF><TMPL_VAR NAME="BLOG_TITLE">"></a>
を挿入します。ソース全体は
<p>
<center>
Powered by<br>
<TMPL_UNLESS NAME="ADMIN_MODE"><a href="http://hazama.nu/pukiwiki/?MT4i"></TMPL_UNLESS>MT4i <TMPL_VAR NAME="VERSION"><TMPL_UNLESS NAME="ADMIN_MODE"></a></TMPL_UNLESS>
</center>
</p>
<p align="center">
<!-- ugo -->
<a href="http://ugo2.jp/m/"><img src="<TMPL_VAR NAME="UH2"><TMPL_IF NAME="MODE_INDIVIDUAL"><TMPL_VAR NAME="ENTRY_TITLE_E">%3a</TMPL_IF><TMPL_VAR NAME="BLOG_TITLE">"></a>
<!-- ugo end -->
</p></body>
</html>
こんなかんじ。
できあがった2つのファイルをそれぞれアップロードして、PCでアクセスします。フッターのイメージした位置に「うごくひと」の画像が表示されていたら、第一段階はクリア。次はページのソースを確認します。
フッター部分の「<img src="http://b14.ugo2.jp/?u=...」で始まるタグの末尾、「sb=」直後に「%」で始まるエンコード文字がズラズラと表示されていたらOKです。暫く時間を置いて、うごくひと2のマイページ⇒どこを見たか⇒入口ページを確認して、ページタイトルが取得できているか、文字化けしていないか等を確認してください。
長くなりますが、
<a href="http://ugo2.jp/m/"><img src="<TMPL_VAR NAME="UH2"><TMPL_IF NAME="MODE_INDIVIDUAL"><TMPL_VAR NAME="ENTRY_TITLE_E">%3a</TMPL_IF><TMPL_VAR NAME="BLOG_TITLE">"></a>
部分を
<a href="http://ugo2.jp/m/"><img src="<TMPL_VAR NAME="UH2"><TMPL_IF NAME="MODE_INDIVIDUAL"><TMPL_VAR NAME="ENTRY_TITLE_E">%3a</TMPL_IF><TMPL_IF NAME="MODE_INDIVIDUAL_RCM"><TMPL_VAR NAME="ENTRY_TITLE_E">%3a</TMPL_IF><TMPL_IF NAME="MODE_COMMENT"><TMPL_VAR NAME="ENTRY_TITLE_E">%3aCOMMENT%3a</TMPL_IF><TMPL_IF NAME="MODE_COMMENT_RCM"><TMPL_VAR NAME="ENTRY_TITLE_E">%3aCOMMENT%3a</TMPL_IF><TMPL_IF NAME="MODE_COMMENTFORM"><TMPL_VAR NAME="ENTRY_TITLE_E">%3aPOST%20COMMENT%3a</TMPL_IF><TMPL_IF NAME="MODE_COMMENTFORM_RCM"><TMPL_VAR NAME="ENTRY_TITLE_E">%3aPOST%20COMMENT%3a</TMPL_IF><TMPL_IF NAME="MODE_TRACKBACK">TrackBack%3a</TMPL_IF><TMPL_VAR NAME="BLOG_TITLE">"></a>
などとすれば、コメントページやコメント投稿画面などでも、閲覧ページ名が詳細に記録されるようになる...と思います。今度こそ。なんだか端的に説明できなくてすみません。







コメント (13)
教えてください。
当方は、MT3.3のブログに、MT4i(2.25)を使っています。
この場合、上記記事の
「1.うごくひと2のマイページ⇒HTMLタグ発行からコードを取得」の修正対象ファイル名は次のどれでしょうか?
mt4i.cgi,
mt4imgr.cgi
mt4icfg.cgi
同じ階層にあるmt4ilibフォルダ内の、
Config.pl
Func.pl
次に
「2.~3.」は、全て
「(MT4iディレクトリ)/index.cgi」が編集の対象でしょうか?ちなみにMT4i(2.25)には
(MT4iディレクトリ)もindex.cgiもありません。
「5.フッターテンプレートにコードを追加する」
これについても、「(MT4iディレクトリ)/tmpl/footer.tmpl」が見当たりません。
MT4i(2.25)ではカスタマイズできませんでしょうか?
投稿者: ナカムラ | 2009年9月 3日 18:30
日時: 2009年9月 3日 18:30
ナカムラさま
こんにちは。コメントありがとうございます。
まず、MT4iのver.2.25については当方見た事がありませんので、
根本的に違ってましたら申し訳ございません。
最初のご質問の、修正対象は「mt4i.cgi」です。2.~3.についても、全て「mt4i.cgi」の
修正になります。
「(MT4iディレクトリ)/tmpl/footer.tmpl」が無い、ということはやはり根本的に異なっている
可能性がありますが、どこかしらに、「header.tmpl」「footer.tmpl」が無いでしょうか。
無い場合、テンプレート構造が異なるようですので、根気よくフッター部分を書き出している
箇所を探す作業が必要になります。
たいしてお役に立てない回答となって申し訳ないですが、ご確認くださいませ。
また随時、ご遠慮なくご質問ください。
投稿者: 穂谷屋 | 2009年9月 3日 19:27
日時: 2009年9月 3日 19:27
追記になります。
記事中に「index.cgi」としているのは、「mt4i.cgi」を小生がリネームしたものであることを思い出しました。
後ほど、記事を修正致します。
投稿者: 穂谷屋 | 2009年9月 3日 19:32
日時: 2009年9月 3日 19:32
恐れ入ります。
具体的でアプローチし易いご回答を下さり、心強いものがありました。ありがとうございます。
mt4i.cgi
ということであれば、作業のメドも立ちました。
ところでウッカリ、
「4.ページタイトル取得用に新しいテンプレート変数を用意する」
の修正対象ファイルをお聞きするのを忘れてしまいましたが、これについてはいかがでしょう?
投稿者: ナカムラ | 2009年9月 3日 21:28
日時: 2009年9月 3日 21:28
ナカムラです。どうやら「4.」も同じくmt4i.cgiですね!
なお、「5.」の部分(フッタ)については、mt4imgr.cgiというファイルの最後に
############################################################
# フッタの出力
############################################################
sub hooter {
print "version $version";
}
というのがありましたので、この前後に、
%3a">
を追加することになりましょうか?
投稿者: 匿名 | 2009年9月 3日 21:57
日時: 2009年9月 3日 21:57
スミマセン。↑は私の投稿です。記入漏れご容赦ください。
また、「%3a">」
は「5.」で挿入すべきコードでした。
投稿者: ナカムラ | 2009年9月 3日 22:01
日時: 2009年9月 3日 22:01
ナカムラさま
こんにちは。ご推察いただいたとおりでございます。
説明が足りていなくてすみません。
無事動作されますように!
投稿者: 穂谷屋 | 2009年9月 3日 22:21
日時: 2009年9月 3日 22:21
ありがとうございました。うごくひと2の高機能版を使うには至りませんでしたが、基本機能をテンプレートに埋め込むことが出来ました。ひとまず、MT4iへのアクセスをカウントできるようになっただけでも、大成功です。
ご教示頂いた基本的な考え方をマスターできたので、これから同じように応用していくことができそうです。
なお、MT4iの最新版に移行できないのは、サーバーでHTML::Templateが使えないためです。でも、この記事のいくつかの部分は2.25でも応用できる部分がかなりありそうなことがわかり、もう少し発展させることが出来そうだと思っています。
ともかく、ありがとうございました。
投稿者: ナカムラ | 2009年9月 4日 08:11
日時: 2009年9月 4日 08:11
ナカムラさま
おはようございます。
>ML::Templateが使えないため
そういう事情があるのですね。なるほど、多分全然構造が違うっぽいです;
根気よくmt4i.cgiを追いかければ恐らく上級版の実装は可能でしょうね。
想像ですが、テンプレートに変数を渡さないのであれば、当件に関してはよりやりやすいんじゃないかと思います。
解決されますように!
投稿者: 穂谷屋 | 2009年9月 4日 09:26
日時: 2009年9月 4日 09:26
こんばんは。
徐々に、何をすればよいのかがわかってきているようですので、
おっしゃるようにmt4i.cgiのpearlをいじって改良してみます。
また、お聞きすることもあろうかと思います。
では、またよろしく。
投稿者: ナカムラ | 2009年9月 4日 23:11
日時: 2009年9月 4日 23:11
こんばんは。
トライしてみました。結果的にはまだ成功していません。
・v2.25のmt4i.cgiには、sub _tmpl_common { }
がありませんので、
MT4i最新版のmt4i.cgiからコピーして貼り付けて、上記記事のとおり
編集を加えました。
・同じく「(MT4iディレクトリ)/tmpl/footer.tmpl」がありませんので、
v.2.25のmt4i.cgiの
# Sub Htmlout - HTMLの出力
の1箇所に、
$data .= "<a href=\"http://hazama.nu/pukiwiki/?MT4i\">MT4i v$version</a><div style=\"display:none;\"><!-- ugo --><a href="http://ugo2.jp/m/"><img src="<TMPL_VAR NAME="UH2"><TMPL_IF NAME="MODE_INDIVIDUAL"><TMPL_VAR NAME="ENTRY_TITLE_E">%3a</TMPL_IF><TMPL_VAR NAME="BLOG_TITLE">"></a>
<!-- ugo end --></div>";
としてみました。ここは「うごくひと2通常版」
では現在うまくいっていましたので、これを
上記記事のコードで置き換えてみました。
以上やってみましたが、エラーになります。
ここに記載した範囲内で、明らかに変なところがあれば、ご指摘頂ければ幸いです。
投稿者: ナカムラ | 2009年9月 7日 00:33
日時: 2009年9月 7日 00:33
ナカムラ様
おはようございます。苦戦されてますね。
ざっくりとver.2.25のmt4i.cgiを見てみました。
記事中「3.」のコードを埋め込む場所は、3520行目付近からの
########################################
# Sub Htmlout - HTMLの出力
########################################
sub htmlout {
の中が適切かと思います。
その際、テンプレートに渡す変数が不要になるため、$dataの中に必要な要素を直接追加する形になるかと思います。具体的には
$data .= "<a href=\"http://hazama.nu/pukiwiki/?MT4i\">MT4i v$version</a>";
の後に、うごくひと2のマイページで取得したコードをほぼ「そのまま」追加することが、まず第一歩になるでしょうか。
$data .= "(取得したコード)";
その上で、[page title]の部分を、各ページのタイトルにする方法に移られるのが良いかと思います。
ver.3と全然違うので、今さら少々ビックリですw
投稿者: 穂谷屋 | 2009年9月 7日 11:00
日時: 2009年9月 7日 11:00
ご返信、ありがとうございます。
現時点では、通常版のコードを
$data .= "デフォルトのコードの後に(取得した通常版コード)";
という形で運用ができています。
$dataについては、このままでよいのですね?
そして、これに加えて、
sub htmlout {
の中に
my $UH2q = new CGIから、
decode("euc-jp",$UH2url)));
までを追加してみる、
ということで、もう一度トライしてみます。
ありがとうございます。
投稿者: ナカムラ | 2009年9月 7日 15:07
日時: 2009年9月 7日 15:07