Results tagged “plug-in”

Movabug 0.2

4.1以降に未対応です。手が回らないため、一時開発を停止しています。ご了承下さい。

先日公開したプラグイン開発援助プラグイン「Movabug」に、わずかながら修正と機能追加をしました。バージョン0.2として公開します。

blog.aklaswad.com: Movabug
Movabug0.2.zip

変更点は次の通りです。

  • TheSchwartzを実行する「run jobs」モードを追加した
  • 「run tasks」「force tasks」「run jobs」実行時にスプラッシュ画面にログが表示されるようにした
  • cookieを利用して画面遷移時に「display ids」「display classes」の状態が維持されるようにした

4.1以降に未対応です。手が回らないため、一時開発を停止しています。ご了承下さい。

movabug_screen.png

粗製濫造と言われかねないですね。また新しいプラグインです。今回は超マニアック、プラグインを自分で作る人以外は何のことだか分からない代物です。その名も「Movabug」!

Movabug
Movabug0.1.zip

昨日のMTHack-a-thonで少し手をつけていたのですが、とりあえず動くようになったので公開してみます。
将来的に、もういくつか使いやすい機能を付け加えられたら、と考えてます。

tagginghelper_screen.png
2chを見てむしゃくしゃして作った。プラグインなら何でもよかった。後悔はしていない。

TaggingHelper0.1.zip

しまった、2chのスレの人はMT3.35が指定だった。。。
これはMT4でしか動かないです。明日MT3.35に対応させる。今は反省している。

とりあえず3.3でも動くようにした。TaggingHelper0.2.zip

説明ページを作った

以前ベータ版として公開した、FaviconManagerプラグインのMT4対応版です。

やはり自分の方針として、MT4の機能をフルに活用したかったので(といってもたいしたことはしてませんが)、MT4専用となります。MT3.35以前のバージョンでは使えません。
今回のバージョンアップでは、ベータ版に比べて以下の改善を行っています。

  • ダイナミックパブリッシング用のphpファイルをMT4のアーキテクチャにあわせてplugins以下に移動した
  • ダイナミックパブリッシングで、必要の無いファイルに対して置換を行っていた問題を修正した
  • ローカライズを少し

よろしければお使いください。

Movable Type のプラグイン作りはそれはそれは楽しいのです。
しかし、作り始める時には中々腰が上がらないもの。
ディレクトリ作ってL10Nの雛形をコピペして。svnにimportしたらテスト用にMTインストールしてプラグインディレクトリに突っ込んで。
そうです。自分のコードを書き始めるその前の準備が面倒くさいんです。

そんなところに現れた救世主こそ、われらがCheebowさん作、MTPlugin-Starterスクリプトです。

これは素晴らしいです。雛形があっという間に出来るので、いきなりコードを書き始められます。This is good!

さて、残る大きな手間は、テスト用のMovable Type環境の用意と、作成したプラグインのテスト環境へのインストールです。ココの作業を簡略化できれば、もう怖いもの無しではないでしょうか。そこで、ちょっと工夫してみました。


このプラグインは、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属性などを基準には拾ってくることが出来ない見たいです。

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

TimeType 0.3

TimeType0.3.zip
そこはかとなくアップデート。

  • 自動投稿のエントリーの諸設定を、特定のエントリーの設定のクローンとして設定できるようにしてみた。設定のクローン元となる任意のエントリーのentry_idを、プラグインの設定画面から指定してください。カテゴリー、公開設定、改行設定、キーワード、コメントの許可、トラックバックの許可、の設定内容がクローン元エントリーからコピーされて、投稿されます。
  • メモ中のhttpから始まる文字列にリンクが張られるようにした
  • ブックマークにコメントをつけられるようにした。Timelogのブックマークレットでは、ブックマーク元のページのタイトルがメモに追加されますが、それ以降に、連続した半角スペースか、連続したセミコロン「;」を記入すると、以降がメモとして扱われます。

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

TimeType 0.2

TemplateToolkit が動かないという声が多かったので、HTML::Templateにテンプレートエンジンを切り替えた。むしゃくしゃしてやった。みんなのところでも動けば何でもよかった。テストはしていない。今はテストしている。

TimeType0.2.zip

IndexContext

アーカイブテンプレートなどで、一時的にインデックステンプレートと同じ振る舞いを実現するプラグインです。

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

Widget-Simpleでtumblr.yaml

Widget::Simple使いなさいとつっこみをいただいた。なるほど。こんな簡単に出来るのですね。

link: http://www.tumblr.net/share
query:
  v: 2
  u: $args->{entry}->permalink
  t: $args->{entry}->title
content: Tumblr
  - module: Widget::Simple
    config:
      widget: tumblr

Plagger::Plugin::Widget::Tumblr

とりあえず作ってみました。
javascriptを起動するリンクが含まれているとGmailでリンクが削除されてしまうようなので、とりあえずjavascript無しです。
結果として、現状は範囲選択などは無視した動作となります。

PluginNameをL10Nしてはならぬ

Movable Type のプラグインを作成する場合に、プラグインの管理画面で表示されることを見越して、L10Nに対応した形でプラグインの登録をする場合も多いと思います。

@MT::Plugin::HogeManager::ISA = qw(MT::Plugin);
my $plugin = new MT::Plugin::HogeManager({
    name        => '<MT_TRANS phrase=\'HogeManager\'>',
    author_name => '<MT_TRANS phrase=\'aklaswad\'>',
    l10n_class  => 'HogeManager::L10N',
    system_config_template => 'config.tmpl',
    settings    => new MT::PluginSettings([
        ['moge'],
    ]),
});
MT->add_plugin($plugin);

そして、このプラグインの設定をMT::PluginSettingsを利用してデータベースに保存するとアッー!

mysql> select * from mt_plugindata\G
*************************** 1. row ***************************
    plugindata_id: 1
  plugindata_data: SERG
   plugindata_key: configuration
plugindata_plugin: <MT_TRANS phrase='HogeManager'>
1 row in set (0.00 sec)

ということで、どの程度実害があるかは分かりませんがnameはL10Nしないほうが良いようです。

ブックマークが気になりすぎて 仕事が手に付かなくなるのが好きだ
F5 キーで一分に何度も新着ブックマークをチェックしても 何も更新がないのは屈辱の極みだ
小野和俊のブログ:諸君 私はブログが好きだ

そんな人におすすめです。

AlertHatenaBookmark_20070308.tar.gz
AlertHatenaBookmark_20070308.zip


このプラグインをインストールすると、ブログのトータルはてブ数が増えた際にメールが送信されます。
Movable Typeのスケジュールタスク機能と被ブックマーク合計数取得APIを利用しています。

ちなみに、とある事情によりテスト不十分な状況です。誰かはてブしてください。
F5キーを押して新着をチェック。
F5キーを押して新着をチェック。
F5キーを押して新着をチェック。。。

transformerの使い方

一般(?)に広くtransformerと呼ばれる、MT3.3から導入された機能群。
プラグインから管理画面を変更する手段を提供することで、より高度なプラグインの作成が可能となります。
しかし、現在日本語では殆どドキュメントが用意されていない状況です。
興味本位でちょっと調べてみたところ、こんなことも出来るのか、という使い勝手の良い部分が、知られずに埋もれていると感じたので、まとめておきます。後でチョコチョコと追記するかもしれません。
妙に堅い説明口調になってしまったのは、何ででしょうね。。。

ちなみに、3.3前後のmtのプロジェクト名は、全てアニメのトランスフォーマーのロボットの名前から取られているそうです ;-)

CustomEditorButton、約0.23

  • Posted on
  • by

MT4に対応したCustomEditorButton2を公開しました!

CustomEditorButton_20070227.tar.gz
CustomEditorButton_20070227.zip

主な変更点は

  • ユーザー記述のコードの仕様の一部変更(後述)
  • システム管理者以外でも頑張ればボタンを編集できていた点を修正
  • IEで動作がおかしかった点を修正(副作用で、マウスオーバーした際の説明が表示されなくなった)

ユーザー記述コード部分の変更点

  • 選択範囲が無い場合でもcodeが実行されるようになった
  • 変数「txt」に値が代入されていると、textareaの全体をtxtで置き換えるようにした。

うーん、どうもjavascriptの知識不足を露呈してしまいまして、ユーザー記述コードの実行については弄れど弄れど理想の動作をしてくれません。まあ、手軽に任意のコードを挿入したり出来れば充分という気もするので、あまり張り切りすぎず、このままシンプルな仕様にしておこうと思います。

今後追加したい機能としては

  • ボタンのトグル機能のサポート
  • キーボードショートカット対応

等を考えてます。あれをやれとかこれはするなとか、フィードバック何でもください。