Results tagged “mt4beta”


このプラグインは、MT4.0での新機能のサンプルとして作成したものです。機能/性能的に実用に耐えるものではありません。あらかじめご了承下さい。

mt4をインストールして、一番最初に目に飛び込んでくる新機能といえば、ダッシュボード上に並んだウィジェットではないでしょうか。
これももちろんプラグインで追加出来ます。出来るはずです。作りました。作ってみました。

HatenaBookmarkWidget0.1.zip

今回の題材は、はてなブックマークでの、該当のブログ全体での被ブックマークを、タグやコメントも含めて最新20件(かな?)管理画面のダッシュボードにウィジェットとして表示するプラグインです。なんだかはてブのプラグインばかり作っているような気もしますが、気のせいでしょう。



やっぱり肝はレジストリでしょうか。諸情報をレジストリに追加することで動作します。

sub init_registry { 
    my $plugin = shift;
    $plugin->registry({
        applications => {
            'cms' => {
                widgets => {
                    'HatenaBookmark' => {
                        label => 'HatenaBookmark',
                        template => 'tmpl/widget.tmpl',
                        handler => \&_widget_handler,
                        set => 'sidebar',
                        singular => 1,
                        condition => sub {
                            my ($page, $scope) = @_;
                            return $page eq 'dashboard' && $scope !~ /system/;
                        },
                    },
                },
            },
        },
    });
}

大体、見たままで分かるかと思います。
setは、「main」「sidebar」が指定できるようです。画面の右側に表示するか左側に表示するか、ですね。
singularは、複数同時に表示可能とするか否か、です。
conditionには、現在のページでwidgetを利用可能とするかを判定するサブルーチンのリファレンスを指定します。サブルーチンは、引数として与えられた条件を元に、現在の画面でwidgetを表示するか否か、をブール値で返却します。

今回は、無駄に張り切ってややこしい処理をするものを作りましたが、簡単なメッセージ表示などのプラグインならconfig.yaml一発で出来そうです。

このプラグインはとりあえずの実験用なので、当面ベータ版扱いとしてください。そのうちキャッシュ機能や新着判定機能などをつけてきちんとしたものにするかもしれません。

追記: 公開からわずか半日後、はてなの障害?の巻き添えで管理画面が開けなくなる事態が発生。これは、このプラグインのテストにはてなが全力で協力してくれたと考える。

FaviconManager2.0b1.zip

以前のFaviconManagerプラグインとは別設計となり、互換性がありません。MT4beta4でのみ動作確認を行っております。ご注意ください。
また、(基本的にMT4が正式リリースされるまでは)ベータ版とさせていただきます。
MT4が正式にリリースされてから、再度調整や機能追加などを行い、リリースする予定です。

大きな違いは以下の点です。

7月25日追記: この記事中のコードだと現在のバージョンでは動かないようです。コメントでご指摘いただきました。ありがとうございます。

MT4での新しいtransformerに挑戦してみました。
DOMライクなインターフェイスが提供され、管理画面の特定の位置にコードを挿入することが非常に容易になりました。

こんな感じのコードで動きます。

package MT::Plugin::TransformerSample;
use strict;
use base qw( MT::Plugin );
our $VERSION = '1.0';
 
my $plugin = MT::Plugin::TransformerSample->new({
    name => 'TransformerSample',
});
 
MT->add_plugin($plugin);
MT->add_callback('MT::App::CMS::template_param.edit_entry', 9, $plugin, \&param_transformer);
 
sub param_transformer {
    my ($eh, $app, $param, $tmpl) = @_;
    die 'something wrong...' unless UNIVERSAL::isa($tmpl, 'MT::Template');
 
    my $host_node = $tmpl->getElementById('useful-links')
        or die 'cannot get useful-links block';
 
    my $node = $tmpl->createElement( 'TEXT', '<em>hello <b>MT4</b> transformer?</em>' );
    $tmpl->insertBefore($host_node, $node)
        or die 'failed to insertBefore.';
}
 
1;

エントリーの投稿/編集画面の右側、クイックリンク(useful-links)の上にチラッとhelloworldするだけのプラグインですが、何かの参考になるでしょうか。

自前でMT::Template::Nodeのインスタンスを作成する必要がある辺りが、ちょっと癖があるなと感じました。
innerHTMLメソッドなどを使うと、MTタグのコンパイルまでやってくれるっぽいので、その辺を使いこなせればよいのかな。
あと、HTMLタグはMTのテンプレートの構文解析の対象にならないので、HTMLタグのid属性などを基準には拾ってくることが出来ない見たいです。

その他、気づいたことや、各メソッドの使い方など、後でまとめてみたいと思います。

mt4のプラグイン作成上の新機能として、ExtensibleArchivesというものがあります。
それで、試行錯誤しながら作ってみているのですが、どうにも難しくて、段々、自分の問題なのかMTの問題なのか分からなくなってきました。
とりあえず感じたことを書きます。非常に分かりづらい内容の上、実際のプラグインの書き方などの実践的な内容もありません。また、気をつけてコードを追ったつもりですが、やたらややこしいので、根本的に自分がとんでもなく間違った理解をしている可能性もあります。あまり興味のない方は読み飛ばすことをおすすめします。

ちょっとTimeTypeの投稿が多すぎて、自分の投稿が埋もれてしまう感じだったので、別ブログに投稿先を変更しました。
自動投稿に負けないように毎日記事を書け、というツッコミは無しの方向でお願いします。
それでもって、折角のプラグインの表示が無くなっちゃうというのも寂しいので、MT4の新機能のcross-blog aggregationを使って、サイドバーに最新の数件の投稿を表示するようにしてみました。これですね。

10 Features that Help Make You a Better Blogger and Publisher - movabletype.org

# Built-in cross-blog aggregation: Publish pages that include data from some, all, or just one of your blogs

で、cross-blog aggregationの実際の利用方法なのですが、MTEntriesなどのタグのアトリビュートに、展開したいブログのidを指定すれば、指定したブログの内容が表示出来るようです。

データベーススキーマの変更は無い模様。特にトラブル無くb3に移行できました。
ダッシュボードの表示がカスタマイズ可能になっていて、ほんとにダッシュボードという感じになっていますね。
この展開は予想していなかったのでちょっとびっくり。

目立った更新として、管理画面全体が日本語化されていますが、文字化けも無く良い感じ。

と思ったらログレコードに色々文字化けを発見。いやしかしこの文字化けは以前からあった気もする。あまり気にしてなかったけど。
しかもよく見ると文字化けした検索は全て同じIPから行われている。
早速nslookupしてみると・・・

186.70.249.66.in-addr.arpa      name = crawl-66-249-70-186.googlebot.com.

へー、つまりタグクラウドをgoogle様が絨毯爆撃していたんですね。今更なネタですか。
しかしこれは、うざい。うざいからけど、やめてやめないで。
文字化けを(googleが)直すか、ログに表示しないかして欲しいですね。それpluで。

TimeLog 20070619

Memo

12:39:58 TimeType をアップデートしました。今までTemplateモジュールが無くて動かなかった環境でも大丈夫なはずです http://tinyurl.com/2af4nk

14:02:54 TimeType ちょっといじるだけでmt4でも動くようになるな。

14:03:27 実はTransformer以外の部分では、かなりの後方互換性があるらしい [mt4beta]

早速ちょこちょこと、実際の動作を見ています。
今日はコメント周りの新機能について触ってみました。

大きなアップデートとして挙げられるのは、次のような要素でしょうか。

  • Captchaに対応した
  • OpenIDによる認証機能が追加された
  • 内部的にツリー構造を持つようになった

それぞれについて、気づいたことなどメモしておきます。

一日ビール飲みながら、アップグレード諸々をしていました。
以前のテンプレートをあえて捨てて無理やりmt4のテンプレートを使ったので、ところどころ変かもしれません。
なにか、「こいつは我慢ならねえ」という点があったら教えてください。
あ、昼頃ずっとサイドバーが消えていたのは単なる自爆です。

TimeLog 20070613

Memo

01:03:07 KIRIN THE GOLDが旨い。ので飲んでしまう。

09:10:13 おはようございます!

09:45:37 TimeLogのAPIで自分のメモを取得した場合(my_msg.asp)、@付きの発言は取得しない(できない)・・・のかな。 [API][TimeLog][TimeType]

12:52:24 キャラメルコーン焼きチョコウマー

19:50:20 今日もイマイチはかどらず。何か方向を間違えている気がする。

19:50:42 逃げるように家に帰る

23:33:46 mt4beta2弄らねば・・・ [mt4beta]

Bookmark

01:06:04 「TrackBackはもうなかったことにしてはどうか?」とは? - Ogawa::Memoranda

02:10:13 ニコニコ動画(γ)‐ハートマン軍曹のオタ訓練学校 [フリー参加][キリンゴールドふいた][吹き死んだ]

14:30:21 【2ch】ニュー速クオリティ:当たり前の事を名言っぽく書くスレ

ボチボチとMT4の内部の構造が分かってきたです。
特に、プラグインはまったく新しい構造が導入されていて、色々と面白いことになっている模様。
プラグインはイコールComponentで、Registryなのです!(分かってない)

mt4beta1blogstat.png

MT4betaが出ましたね!早速お試しー。

しばらく、betaの動きや気づいたことなど、こまめにメモしていこうと思います。
まず、管理画面のダッシュボードに表示される「BlogStats」について。
上手く行けば、最近のコメント数などについて上のキャプチャ画面のような表示が出ます。
上手く行かないという場合は、以下のあたりを確認してみると良いかも。

1. ActivityLogに以下のエラーが出ている場合

Failed to create 'support' directory. (IP:xxx.xxx.xxx.xxx)

mt-staticディレクトリにsupportというディレクトリを作って、mtが書き込み出来るようにする

2.なにやら動いたが、小さく次のようなエラーが出る

Error: Can't get file name /support/...

mt-config.cgiの「StaticWebPath」をきちんと設定する。単に「mt-static」でも良いかも。
なぜかStaticWebPathを省略した場合は動かなかったので、デフォルトの値が変わっているのかもしれません。というか初期値の書き忘れのようにも見えます;-)
出来ればフルパスで指定したほうが良さそうです。

また、mt-staticディレクトリを移動する場合、「StaticWebPath」の変更に加えて、「StaticFilePath」という設定を追加して、以下のような形でサーバー内でのフルパスを指定する必要がありそうです。

StaticFilePath    /home/hogehoge/public_html/moved_static_dir

ちょっとよくわからない部分も多いので、もう少し調べてみよっとー