Japanese plugin dev 4 4 - Hiranyaloka/Documentation GitHub Wiki
前章ではTransformerプラグインを使って管理画面の修正を行う方法を解説しました。
今回はレジストリを利用して管理画面のメニューの修正を行う方法を解説します。
管理画面には「システムレベル」「サイトレベル」「ブログレベル」のそれぞれの左側にメニューがあり、右上に新規作成メニューがあります。
これらはPerlやテンプレートで制御されているのではなく、レジストリで管理されています。
メニューの修正はレジストリの修正で対応できるため、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「ブログ記事」のviewをblogだけで表示します- このためサイトメニューから「ブログ記事」メニューが消えます
new_menu:
label: New Menu
order: 1000
- 新しいメニューを作成します
- ラベル(表示名)を
New Menuとします。メニューは自動的にL10Nからローカライズされるため、「新規メニュー」と表示されます -
orderを 「ツール」メニューの下に出したいため1000としています(「ツール」のorderは900)-
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
メニューの編集方法を見ていただきましたが、いかがでしたでしょうか?比較的簡単にメニューを変更することが出来るのが解っていただけたと思います。
また、 condition を使ってのメニューの動的変更や、権限による表示、非表示なども有効ですので活用してみてください。
- プラグイン開発のためのファーストステップ
- レジストリ、YAMLについて
- 環境変数について
- プラグインのローカライゼーションについて
- テストドリブンでのプラグインの開発について
- グローバル・モディファイアプラグインの開発について
- ファンクションタグ プラグインの開発について
- ブロックタグ プラグインの開発について
- コンディショナルタグ プラグインの開発について
- プラグインのデバッグ
- プラグインの設定方法
- コールバックとフックポイント
- スケジュールタスクの開発
- MTオブジェクトの利用方法
- 独自オブジェクトの作成
- 新規アプリケーションの作成
- Transformerプラグインの開発
- 管理画面のメニュー修正
- リストアクションの追加
- 動作モードの追加とモーダルウィンドウの表示
- 外部Web APIとの連携
- 権限とロール