Skip to content

Japanese plugin dev 4 4

uehatsu edited this page May 13, 2011 · 12 revisions

管理画面のメニュー修正

はじめに

前章ではTransformerプラグインを使って管理画面の修正を行う方法を解説しました。

今回はレジストリを利用して管理画面のメニューの修正を行う方法を解説します。

管理画面のメニューとは?修正とは?

管理画面には「システムレベル」「サイトレベル」「ブログレベル」のそれぞれの左側にメニューがあり、右上に新規作成メニューがあります。

これらはPerlやテンプレートで制御されているのではなく、レジストリで管理されています。

メニューの修正はレジストリの修正で対応できるため、config.yamlの修正で実現できます。今回はメニューの修正を行います。

管理画面のメニュー修正プラグインの開発

仕様

  • 管理者以外は「ツール」メニューを見せなくする
    • 検索置換も管理者以外に使って欲しくない場合を想定
  • ウェブサイトメニューからブログ記事メニューを見せなくする
    • ウェブサイトに直接ブログ記事を表示させたくない場合を想定
  • 親メニュー「新規メニュー」を作成し、そこに「ダッシュボード」メニューを作成する
    • メニューは「システム」「ウェブサイト」「ブログ」「ユーザーダッシュボード」のそれぞれに表示する
    • 「ダッシュボード」メニューをクリックすると、システムはシステムなどそのダッシュボードが表示される

config.yaml

id: MyPlugin14
key: MyPlugin14
name: <__trans phrase="Sample Plugin Menu Customize">
version: 1.1
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: MyPlugin14::L10N

applications:
    cms:
        menus:
            tools:
                permission: administer
                system_permission: administer
            entry:
                view: blog
            new_menu:
                label: New Menu
                order: 1000
            new_menu:dashboard:
                label: Dashboard
                order: 100
                view:
                    - system
                    - website
                    - blog
                    - user
                mode: dashboard
                condition: sub { return 1 }

解説

id: MyPlugin14
key: MyPlugin14
name: <__trans phrase="Sample Plugin Menu Customize">
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: MyPlugin14::L10N
  • 通常のプラグイン設定
applications:
    cms:
        menus:
  • メニュー操作のためのレジストリへの階層
            tools:
                permission: administer
                system_permission: administer
  • tools は、「ツール」メニューを指します
  • permission はサイトメニュー、ブログメニューでの権限
  • system_permission はシステムメニューでの権限
  • それぞれ必要な権限をコンマ区切りで列挙する事が出来ます
  • 今回の例では「ツール」メニューが管理者でのみ表示されるようになり、管理者で無い人がログインしても「ツール」メニューは表示されません
            entry:
                view: blog
  • この設定により entry 「ブログ記事」の viewblog だけで表示します
    • このためサイトメニューから「ブログ記事」メニューが消えます
            new_menu:
                label: New Menu
                order: 1000
  • 新しいメニューを作成します
    • ラベル(表示名)を New Menu とします。メニューは自動的にL10Nからローカライズされるため、「新規メニュー」と表示されます
    • order を 「ツール」メニューの下に出したいため 1000 としています(「ツール」の order900
      • order が小さい順にメニューが上から並びます
            new_menu:dashboard:
                label: Dashboard
                order: 100
                view:
                    - system
                    - website
                    - blog
                    - user
                mode: dashboard
                condition: sub { return 1 }
  • 「新規メニュー」の中に「ダッシュボード」メニューを追加します
  • view を複数指定する場合は配列型にします
    • system : システムメニュー、 website : サイトメニュー、 blog : ブログメニュー、 user : ユーザーダッシュボード
  • クリックされると、 mode で指定したモード(今回は dashboard )に遷移します
  • condition は関数の実行によって表示のオンオフを決める事ができます
    • ここでは必ず正が返るので、このメニューは必ず表示されます
    • 返ってきた値が負の場合、このメニューは表示されません
    • perlコードを別に移すのであれば condition: $MyPlugin14::MyPlugin14::Menues::hndr_get_condition などとハンドラを呼ぶことも出来ます

以下のように指定する事も可能です。

                args:
                    _type: foo
  • args に値をセットする事でモードの値に追加して遷移先の画面に変数を渡す事ができます。
    • 今回の例 http://www.example.com/cgi-bin/mt.cgi?__mode=dashboard&_type=foo&blog_id=1
                dialog: 1
  • mode 指定し、 dialog: 1 指定をした場合モーダルウィンドウ型のダイアログが表示されます
    • モーダルウィンドウの説明について、ここでは省略します。

ファイルの配置

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

プラグインダウンロード

MyPlugin14.zip(1.99KB)

まとめ

メニューの編集方法を見ていただきましたが、いかがでしたでしょうか?比較的簡単にメニューを変更することが出来るのが解っていただけたと思います。

また、 condition を使ってのメニューの動的変更や、権限による表示、非表示なども有効ですので活用してみてください。

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

  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