kwLogではiddyのprofileの表示をサイドバーに表示していますが、これはphpの出力をJavaScriptにするという少々強引なドリブルでした。iddy本家の方でMovable Typeプラグインが公開されたのでまっとうなやり方に移行します。
iddy Movable Typeプラグイン
http://iddy.jp/blog/log/2007/04/000060.php
が、残念ながらphpダイナミックパブリッシングするとまたもや表示されません。眠い目をこすりながらphp用のpluginをつくってみました。
面倒だったのはTagごとにSmartyのファイルを作成しないといけなかったのと、’plugins/iddyMyProfile/data/data.cgi’のパスの指定。このファイル、Tagの出力を行うたびにWebAPIを呼び出すのはトラフィックの無駄なので、WebAPI呼び出しの結果をこのdata.cgiファイルに保存して使いまわすようになっています。(ちなみ使い回し期限は3分)
で、このファイルのパスの取得なんですが、perlのplug-inだと
my $path = $ENV{'SCRIPT_FILENAME'};
$path =~ s/mt\.cgi//g;
$path =~ s/\s//g;
my $file_data = $path.'plugins/iddyMyProfile/data/data.cgi';
と、なっていてmt.cgiからの相対パスになっちゃってます。。。
phpダイナミックパブリッシングしている場合は$_SERVER[‘SCRIPT_FILENAME’]はmtview.phpで階層的にいうと
mt本体/ -mt.cgi <--Perlのときの'SCRIPT_FILENAME'はここ -plugins/ --iddyMyProfile/ ---data/ ----data.cgi -php/ --plugins/ ---Smartyのプラグイン weblog出力先/ -mtview.php <-- phpのときの'SCRIPT_FILENAME'はここ
こんな感じ。
mt本体のディレクトリ名はユーザによって変更可能だから決めうちもできないし。しばし考えました。さすがにmt本体へのパスはあるだろうと思いつhttp://www.sixapart.jp/movabletype/manual/object_reference/archives/mt.html を見てました。
なんだ $mt->mt_dir でいけんじゃん。と思いつつ指定したところhttp://で始まるURIが返ってきて、ファイルの読み込みはできるがhttp指定でファイルの書き込みはできないので万事休す。ほしいのは/usr/local/www/…みたいなlocalhost上のファイルパスなんです。
でも、絶対にあるはずだ。と思い
mt本体/php/mt.phpを見ていたところ下記コードを発見。
// path to MT directory $cfg['MTDir'] = realpath(dirname($file));
これだ!
<?php
// Get iddy profile
function get_iddy($ctx) {
  $path = $ctx->mt->config['MTDir'];
  if (!preg_match('!/$!', $path))
    $path .= '/';
  $file_data = $path.'plugins/iddyMyProfile/data/data.cgi';
  $lines_content = @file($file_data);
  list($date_data,$accountname) = split(",", $lines_content[0], 2);
 
  $date_chk = strftime("%Y%m%d%H%M%S",time()-60*3);
  $blog = $ctx->stash('blog');
  $iddy_config = iddy_config($ctx);
  $an = ($iddy_config!=null) ? $iddy_config['id_usrname'] : "";
  if (($date_data < $date_chk) or ($accountname != $an)) {
    $url = 'http://iddy.jp/api/user/?apikey=2f81a9d399752350434f8df139c5652a36a14beb&type=all&accountname='.$an;
    $content_in = @file_get_contents($url);
    $date_now = strftime("%Y%m%d%H%M%S",time());
    $content_in = "$date_now,$an\n".$content_in;
    @file_put_contents($file_data,$content_in);
  }
  $content = @file_get_contents($file_data);
  $content = ereg_replace("\r|\n","",$content);
  return array($content,$an);
}
なんとかdata.cgiへの入出力ができました。
data.cgiへのアクセスをベースに各タグのファイルを以下にまとめました。とりあえずversion 1.01用patchです。解凍して普通にmt本体/phpへ上書きしちゃってください。
mt-iddyMyProfile-Plugin patch
plug-inのおかげでwidgetのtemplateの編集が直感的になりました。
<div class="module-iddy module"> <h2 class="module-header">PROFILE by <a href="http://iddy.jp/" target="_blank">iddy</a></h2> <div class="module-content"> <a href="<$MTIddyProfileurl$>" target="_blank"><img src="<$MTIddyImageurl$>" id="iddy-imageurl" alt="<$MTIddyAccountname$>'s Profile by iddy"/></a> <div id="iddy-account"><a href="<$MTIddyProfileurl$>" target="_blank" title="<$MTIddyAccountname$>'s Profile by iddy"><$MTIddyAccountname$></a></div> <p id="iddy-profile"><$MTIddyProfile$></p> </div> </div>