MT4.xプラグイン作成/管理画面のメニューに独自項目を追加する http://www.ark-web.jp/sandbox/wiki/300.html

MT4.xプラグイン作成/管理画面のメニューに独自項目を追加する

[edit]

やりたいこと

MTの管理画面には「システムメニュー」、「新規作成」、「一覧」、「設定」、「ツール」といった、マウスをフォーカスすると下層のメニューが表示される仕組みがあります。これらのメニューに任意の項目を追加することを行います。

[edit]

方法

Pluginファイルのinit_registry()メソッドで設定することができます。
Pluginの作成に関してはMT4.0プラグイン作成?の他のコンテンツを参照してください。

メニューを追加するには、以下のようにします。

sub init_registry {
    my $plugin = shift;
    $plugin->registry({
        :
    'applications' => {
        'cms' => {
            'menus' => {
                'manage:hoge' => {
                   label => 'Hoge',
                   order => 10000,
                   mode => 'list_hoge',
                   view => "system",
                },
            },
            :
        },
    },
    :
  });

これで、Hogeというメニューがシステム管理画面の[一覧]の中に並びます。また、Hogeには__mode=list_hogeへのリンクが張られます。

manage:[当該メニューのkey] => {
   label => [メニュー表示ラベル],
   order => [表示順],
   mode => [リンク先__mode],
   view => [表示先。systemならシステム管理画面、blogならブログ管理画面],
},

といった形です。他にも system_permissionで管理者だけにアクセスを許すといった設定が可能です。

[edit]

メニューIDのルール

[登録先メニューkey]:[当該メニューのkey]で指定します。

登録先メニューのkeyは以下のように定義されています。

keyメニュー(日本語表記)
create新規作成
manage一覧
designデザイン
prefs設定
toolsツール
systemシステムメニュー

従って、新しくkey=hogeのメニューを新規作成配下に追加する場合は

create:hoge

というIDを指定することになります。

メニューIDは全メニューを通してユニークである必要があります。

(メニューIDと呼称していますが、正しくはなんと呼べばいいのかわかりません^^;)

また、独自のkeyを追加することもできます。

         # Hogeというkeyを作り、その配下にlistを追加する。
         'hoge' => {
           label => 'Hoge',
           order => 10000,
         },
         'hoge:list' => {
           label => 'List of Hoge',
           order => 100,
           mode => 'list_hoge',
         },
[edit]

orderの指定

orderは数値が大きいほど下(または右)に表示されます。

[edit]

viewの指定

viewに指定できる値と挙動は次の通りです。

viewの値挙動
systemシステム管理画面のメニューに表示される
blogブログ管理画面のメニューに表示される

また、viewを指定しない場合、システム管理画面、ブログ管理画面の双方のメニューに表示されます

[edit]

permissionの指定

ユーザのロールに応じたアクセス権を設定できます。
アクセス権限を持たないユーザに対してはメニューのリンクがデッドリンクになります。

これによって、例えば「テンプレートの管理」の権限を持つロールのユーザしかアクセスできないメニューなどを定義できます。

ロールの各権限とその権限を持つユーザにアクセスを許可するためにpermissionに指定する値の関係は以下の通りです。

権限permissionに指定する値
administer_blogブログ管理者
edit_configブログの設定
set_publish_paths公開パスの設定
edit_categoriesカテゴリの管理
edit_tagsタグの管理
edit_notificationsアドレス帳の管理
view_blog_logログの閲覧
create_postブログ記事の作成
publish_postブログ記事の公開
send_notifications通知の送信
edit_all_postsすべてのブログ記事の編集
manage_pagesウェブページの管理
rebuildブログの再構築
edit_templatesテンプレートの管理
edit_assetsアイテムの管理
uploadファイルアップロード
save_image_defaults画像に関する既定値の設定
commentコメントの送信
manage_feedbackコメント/トラックバックの管理

複数の権限に対して許可を与えたい場合は「,」で区切って以下のように設定します。

# ブログ記事の作成とコメントの送信の権限を持つロールにアクセスを許可
permission => 'create_post,comment'
[edit]

system_permissionの指定

ユーザのシステム権限に応じたアクセス権を設定できます。
アクセス権限を持たないユーザに対してはメニューのリンクがデッドリンクになります。

これによって、例えば「ブログの作成」のシステム権限を持つユーザしかアクセスできないメニューなどを定義できます。

各システム権限とその権限を持つユーザにアクセスを許可するためにsystem_permissionに指定する値の関係は以下の通りです。

システム権限system_permissionに指定する値
administerシステム管理者
create_blogブログの作成
view_logログの閲覧
edit_templatesテンプレートの管理
manage_pluginsプラグインの管理

複数の権限に対して許可を与えたい場合はpermissionと同様に「,」で区切って設定します。

[edit]

その他のプロパティ

メニューIDに指定できるその他のプロパティには調べた範囲では以下があります*1

[edit]

args

メニューのリンクに引き渡すQueryStringのパラメータを指定します。例えば、

mode => 'hoge',
args => { _type => "blog" },

と指定した場合、メニューに指定されるリンクは

__mode=hoge&_type=blog

となります。

[edit]

condition

permission(およびsystem_permission)の判断をTrue(1) or False(0)を返すメソッドによって指定することができます。より複雑な権限設定を行いたい場合に便利です。

例えば、以下のようにします。

condition => sub { &permission_routine() },

sub permission_routine {
  my $app = MT->app;
  # スーパーユーザなら無条件でアクセス可(True)
  return 1 if $app->user->is_superuser;
  # パラメータでブログIDが指定されていて
  if ( $app->param('blog_id') ) {
    # 当該ユーザがブログ記事の作成、またはウェブページの管理権限を持っている場合もアクセス可(True)
    my $perms = $app->user->permissions($app->param('blog_id'));
    return 1 if $perms->can_create_post || $perms->can_manage_pages;
  }
  # それ以外はアクセス不可(False)
  return 0;
}

権限判定のメソッドはMT::PermissionオブジェクトのAPIを利用できます。基本的にはpermissionプロパティに指定する値にcan_をつけたメソッド名になっています。例えば、ブログ記事の作成権限を示すcreate_postをそのユーザが持つかどうかは、当該ユーザのMT::Permissionオブジェクトを取得した後、そのMT::Permissionオブジェクトのcan_create_postメソッドをコールします*2

[edit]

dialog

リンク先をモーダルダイアログで表示したい場合にmodeの代わりに指定します。指定する値はmodeプロパティに指定する値と同様、表示したい画面をあらわす__mode値です。

 # __mode=hogeの画面をモーダルダイアログで表示する
 #mode => 'hoge',
 dialog => 'hoge',

参考:How to Create a Modal Dialog

投稿者進地 | パーマリンク

| append.gif

*1 Creating Menu ItemsMovable Type Registry Referenceには全てのプロパティが網羅されていないようです(2008/06/12現在)そのため、ソースコードを直接確認して洗い出したプロパティが含まれます。system_permissionは既にその一例になっています
*2 $app->userからコールしているis_superuserやpermissionsメソッドは2008/06/13現在、APIドキュメントには記載されていないので、使わない方がよいのかも^^;

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-06-12 (木) 10:58:08 (4176d)

アークウェブのサービスやソリューションはこちら