Japanese plugin dev 5 1

uehatsu edited this page May 9, 2011 · 6 revisions

リストアクションの追加

はじめに

これまでのドキュメントで、管理画面の修正方法をいくつか紹介してきました。

今回は「リストアクション」について解説します。

リストアクションとは?

リストアクションとはオブジェクトの一覧ページで「アクション…」と書かれているプルダウンメニューに追加される「プラグインアクション」を指します。

利用できる一覧ページは以下の管理画面になります。

  • ブログ記事一覧
  • ウェブページ一覧
  • アイテム一覧
  • トラックバック一覧
  • コメント一覧
  • コメントユーザー一覧
  • ユーザー一覧
  • ブログ一覧
  • サイト一覧
  • テンプレート一覧

今回は「ユーザー一覧」に新しいリストアクションを追加します。

リストアクションの追加プラグインの開発

仕様

  • 「システムメニュー」>「ユーザー一覧(ユーザーの管理)」ページのリストアクションに「プラグインアクション」を追加する
  • 選択したユーザーの使用言語を変更できる
  • 対応言語はMTが対応している物
    • 日本語、英語、ドイツ語、スペイン語、フランス語、オランダ語

config.yaml

id: MyPlugin15
key: MyPlugin15
name: <__trans phrase="Sample Plugin Add Action">
version: 1.0
description: <__trans phrase="_PLUGIN_DESCRIPTION">
author_name: <__trans phrase="_PLUGIN_AUTHOR">
author_link: http://www.example.com/about/
doc_link: http://www.example.com/docs/
l10n_class: MyPlugin15::L10N

applications:
    cms:
        list_actions:
            author:
                author_language_ja:
                    label: Language Japanese
                    order: 100
                    permit_action: administers
                    handler: $MyPlugin15::MyPlugin15::Actions::hndl_author_language_ja
                author_language_en_US:
                    label: Language English
                    order: 200
                    permit_action: administers
                    handler: $MyPlugin15::MyPlugin15::Actions::hndl_author_language_en_US
                author_language_de:
                    label: Language Deutsch
                    order: 300
                    permit_action: administers
                    handler: $MyPlugin15::MyPlugin15::Actions::hndl_author_language_de
                author_language_es:
                    label: Language Español
                    order: 400
                    permit_action: administers
                    handler: $MyPlugin15::MyPlugin15::Actions::hndl_author_language_es
                author_language_fr:
                    label: Language Français
                    order: 500
                    permit_action: administers
                    handler: $MyPlugin15::MyPlugin15::Actions::hndl_author_language_fr
                author_language_nl:
                    label: Language Nederlands
                    order: 600
                    permit_action: administers
                    handler: $MyPlugin15::MyPlugin15::Actions::hndl_author_language_nl

解説

id: MyPlugin15
key: MyPlugin15
name: <__trans phrase="Sample Plugin Add Action">
version: 1.0
description: <__trans phrase="_PLUGIN_DESCRIPTION">
author_name: <__trans phrase="_PLUGIN_AUTHOR">
author_link: http://www.example.com/about/
doc_link: http://www.example.com/docs/
l10n_class: MyPlugin15::L10N
  • 通常のプラグイン設定
applications:
    cms:
        list_actions:
            author:
  • ユーザー一覧のリストアクションのレジストリトップ
                author_language_ja:
                    label: Language Japanese
                    order: 100
                    permit_action: administers
                    handler: $MyPlugin15::MyPlugin15::Actions::hndl_author_language_ja
  • author_language_ja :リストアクション
    • label: Language Japanese :リストのラベル
    • order: 100 :リストのオーダー(並び順)
    • permit_action: administers :管理者のみ表示
    • handler: $MyPlugin15::MyPlugin15::Actions::hndl_author_language_ja :ハンドラの設定

これ以降、言語(英語、ドイツ語、スペイン語、フランス語、オランダ語)別の実装のため省略します。

MyPlugin15/Action.pm

package MyPlugin15::Actions;
use strict;

sub hndl_author_language_ja {
    my $app = shift;
    _set_author_language($app, 'ja');
}

sub hndl_author_language_en_US {
    my $app = shift;
    _set_author_language($app, 'en_US');
}

sub hndl_author_language_de {
    my $app = shift;
    _set_author_language($app, 'de');
}

sub hndl_author_language_es {
    my $app = shift;
    _set_author_language($app, 'es');
}

sub hndl_author_language_fr {
    my $app = shift;
    _set_author_language($app, 'fr');
}

sub hndl_author_language_nl {
    my $app = shift;
    _set_author_language($app, 'nl');
}

sub _set_author_language {
    my ($app, $language) = @_;
    require MT::Author;
    my @author_ids = $app->param('id');
    for my $author_id (@author_ids) {
        my $author = MT::Author->load($author_id);
        $author->preferred_language($language);
        $author->save;
    }
    $app->redirect( $app->return_uri );
}

1;

解説

package MyPlugin15::Actions;
use strict;
  • パッケージ名の宣言と use strict; しています。
sub hndl_author_language_ja {
    my $app = shift;
    _set_author_language($app, 'ja');
}
  • sub hndl_author_language_ja {} 日本語用のハンドラ関数です。
    • 内部関数 _set_author_language();$app'ja' を渡しています。

以下、多言語用のハンドラ関数のため省略します。

sub _set_author_language {
    my ($app, $language) = @_;
    require MT::Author;
    my @author_ids = $app->param('id');
    for my $author_id (@author_ids) {
        my $author = MT::Author->load($author_id);
        $author->preferred_language($language);
        $author->save;
    }
    $app->redirect( $app->return_uri );
}
  • sub _set_author_language {} 内部関数
    • $app$language を受け取ります。
    • $app->param('id') に選択したユーザーのIDが配列で渡されるので@author_idsに格納します。
    • 配列を回し $author_id をキーに処理を行います。
    • $author をロードし、言語( preferred_language )を設定します。
    • $author をセーブします。
    • すべてのユーザーを処理した後、元の画面に戻ります。

ファイルの配置

$MT_DIR/
|__ plugins/
   |__ MyPlugin15/
      |__ config.yaml
      |__ lib/
         |_ MyPlugin15/
            |__ Actions.pm
            |__ L10N.pm
            |_ L10N/
               |_ en_us.pm
               |_ ja.pm

プラグインダウンロード

MyPlugin15.zip(2.57KB)

まとめ

簡単にリストアクションが追加できる事を分かっていただけたでしょうか?

従来一つずつ設定を行っていた物を、リストアクションの追加で選択して処理を一度に行う事が出きるようになります。

ご自分の要求に合ったリストアクションを追加して、業務の省力化を試してみて下さい。

プラグイン開発ガイド インデックス

  1. プラグイン開発のためのファーストステップ
  2. レジストリ、YAMLについて
  3. 環境変数について
  4. プラグインのローカライゼーションについて
  5. テストドリブンでのプラグインの開発について
  6. グローバル・モディファイアプラグインの開発について
  7. ファンクションタグ プラグインの開発について
  8. ブロックタグ プラグインの開発について
  9. コンディショナルタグ プラグインの開発について
  10. プラグインのデバッグ
  11. プラグインの設定方法
  12. コールバックとフックポイント
  13. スケジュールタスクの開発
  14. MTオブジェクトの利用方法
  15. 独自オブジェクトの作成
  16. 新規アプリケーションの作成
  17. Transformerプラグインの開発
  18. 管理画面のメニュー修正
  19. リストアクションの追加
  20. 動作モードの追加とモーダルウィンドウの表示
  21. 外部Web APIとの連携
  22. 権限とロール
Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.