タグ「movabletype」が付けられているもの

PhotoShare用のActionStreamプラグイン書いた(MT)

  • 投稿日:
  • by
  • カテゴリ:

PhotoShareへアップした写真をブログで利用したくて、以前からスクレーピングして独自にRSS生成してたのだけどオフィシャルにフィードをサポートしないの?と masuidriveくんに聞くたびに「来週には公開します」とそば屋のように言っていたのでw 首を長くして待っていた。そしてついにリリース。

PhotoShare の Atom/JSON/JSONP Feed の正式発表

 PhotoShareの写真のFeedに関しては、少し前に実装が完了していたのだが、「サンプルをきちんと整えてから」などと考えているといつまでたっても発表できないので、とりあえずFeedのURLのみ発表してしまうことにした。

すでにブログのサイドバーに写真を並べてたりしたので特にやることはなかったけど、試しにMTのActionStreamで読み込めるようなプラグインを書いてみた。

PhotoShareActionStreams_1.0.zip

たとえばブログトップのサイドバーに出すとこんな感じで表示される。
PhotoShare ActionStreams

MT::Blog::clone()の罠

  • 投稿日:
  • by
  • カテゴリ:

仕事でMTをごにょごにょいじってる。バッチ処理中にMT::Blogのclone()を使ってガンガン作成しようとするとエラーが出た。

DBD::mysql::st execute failed: Column 'templatemap_template_id' cannot be null at /path/to/MT/extlib/Data/ObjectDriver/Driver/DBI.pm line 348, <> line 4.

管理画面のブログ一覧から「ブログの複製」を実行すると特に警告もなく終了する。もちろんログに何も出ていない。

いろいろ調査していくとMT::Blog::clone()で、え?と思う実装が。(以下ソースは 4.23 のもの)

        require MT::Template;
        $iter = MT::Template->load_iter(
            { blog_id => $old_blog_id, type => { not => 'widgetset' } }
        );
        my $tmpl_processor = sub {
            my ( $new_blog_id, $counter, $tmpl, $tmpl_map ) = @_;
            $callback->($state . " " . MT->translate("[_1] records processed...", $$counter), 'tmpls')
                if $counter && ($$counter % 100 == 0);
            my $tmpl_id = $tmpl->id;
            $$counter++;
            delete $tmpl->{column_values}->{id};
            delete $tmpl->{changed_cols}->{id};
            # linked_file won't be cloned for now because
            # new blog does not have site_path - breaks relative path
            delete $tmpl->{column_values}->{linked_file};
            delete $tmpl->{column_values}->{linked_file_mtime};
            delete $tmpl->{column_values}->{linked_file_size};
            $tmpl->blog_id($new_blog_id);
            $tmpl->save or die $tmpl->errstr;
            $tmpl_map->{$tmpl_id} = $tmpl->id;
        };
        $counter = 0;
        while (my $tmpl = $iter->()) {
            $tmpl_processor->($new_blog_id, \$counter, $tmpl, \%tmpl_map);
        }

パッチでも送りつけようかと思ったけど、とりあえず普通にCGI経由で使っていれば問題がないので(顕在化しない)ブログに公開する程度にする。

MT4 アップグレート+Redirect+Action Stream

  • 投稿日:
  • by
  • カテゴリ:

MT4が出たのは知っていたが別に必要がなかったのでほって置いたのに、なぜか昨夜火がついて 3.34 からのアップグレードを実施。

移行自体はあっけなく終了。テンプレート関係の問題もでず、そのまま再構築しても以前と全く同じデザインで再構築された。ついでに以前から気になってたデータベース charset が latin1 のままになっていた問題を解決して満足した。

あまりにもうまくいきすぎてつまらないので、テンプレート初期化を実行。あー、もうー。その後は結構面倒。標準テンプレートに戻ったわけなので、新規ブログを作るときのテンプレートデザインプロセスそのまま。

まず Widget Manager がオフになっているのでプラグイン設定画面でオン。次にWidget 関連のタグ変わってたので変更(WidgetManager -> WidgetSet)。widget関係の標準スタイル名が変更になっているので修正(module-XXX -> widget-XXX)。あとはウィジェットセットを新規に作成して、ウィジェットセットをサイドバーで読み込むよう include の記述をして完了。