Japanese plugin dev 5 2 - Hiranyaloka/Documentation GitHub Wiki
管理画面をカスタマイズしてくると、別途アプリケーション(*.cgi)を用意するまでもない機能追加、もしくは別途アプリケーションに遷移できない機能追加を行いたいと考える事が出てきます。
また、画面遷移せずにダイアログ(モーダルウィンドウ)で処理を済ませたい事もあります。
今回はこの2つをプラグインとして実装します。
動作モードとは、 /cgi-bin/mt.cgi?__mode=foo の様に mt.cgi などアプリケーションに渡される foo のような値によって遷移される画面の事です。他にも、 view 、 list_entry など多くの動作モードが存在します。
今回は、 modal_window_test という動作モードを追加します。
通常アプリケーションの動作モードは管理画面の1つとして表示されます。
画面遷移をしたく無い場合、例えばブログ記事の編集中に画像を挿入する時など画面遷移せずに必要な情報を表示し選択し元の画面に戻りたいと考えます。
このようなダイアログをMTではモーダルウィンドウで実装できます。ウィンドウの背景(例:ブログ記事の編集中画面)は暗くなり、その手前にダイアログが表示されます。このダイアログの表示内容は動作モードによって決められます。
今回は、 modal_window_test モードに対応したモーダルウィンドウを作成します。
- ブログメニュー>ツール に「モーダルウィンドウ」メニューを追加
- 管理者のみ閲覧、操作可能
- 「モーダルウィンドウ」メニューをクリックすると
__mode=modal_window_testの状態でモーダルウィンドウが表示
- モーダルウィンドウには、ブログID、ブログ名、公開済みブログ記事の一覧と「閉じる」ボタンを表示
- 「閉じる」ボタンをクリックするとモーダルウィンドウが閉じ、元の画面に戻る。
以下のようにレジストリを書き換える事でブログメニューに「モーダルウィンドウ」メニューが表示されます。
id: MyPlugin16
key: MyPlugin16
name: <__trans phrase="Sample Plugin Modal Window">
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: MyPlugin16::L10N
applications:
cms:
menus:
tools:modal_window:
label: Modal Window
order: 1000
view: blog
permission: administer
mode: modal_window_test
dialog: 1
以前紹介したメニュー追加と同じです。ここでは mode に modal_window_test を指定し、 dialog: 1 としているためクリックするとモーダルウィンドウが表示されます。
この状態では、モード(modal_window_test)を追加していないので、メニューをクリックするとモーダルウィンドウ内でエラー(不明なアクション: modal_window_test )が発生します。
そこで、モードを追加します。
(前略)
applications:
cms:
menus:
tools:modal_window:
label: Modal Window
order: 1000
view: blog
permission: administer
mode: modal_window_test
dialog: 1
methods:
modal_window_test: $MyPlugin16::MyPlugin16::ModalWindow::hndl_modal_window
上記のように、 methods: に modal_window_test を新規モードとして追加します。
この状態でクリックしても $MyPlugin16::ModalWindow::hndl_modal_window の実装が終わっていないため、やはりエラーになります。
$MyPlugin16::ModalWindow::hndl_modal_window の実装を始めます。
package MyPlugin16::ModalWindow;
use strict;
sub hndl_modal_window {
return 1;
}
1;
この例はモーダルウィンドウに「1」と表示させるだけの例です。
テンプレートを用意して、それにブログID、ブログ名、公開済みブログ記事の一覧を表示させます。
package MyPlugin16::ModalWindow;
use strict;
sub hndl_modal_window {
my $app = shift;
my $blog_id = $app->param('blog_id');
my $class = MT->model('blog');
my $blog = $class->load($blog_id);
my %param;
$param{blog_id} = $blog_id;
$param{blog_name} = $blog->name();
$param{entry_count} = MT::Entry->count({ blog_id => $blog_id,
status => MT::Entry::RELEASE(),
});
$app->load_tmpl('modal_window.tmpl', \%param);
}
1;
-
$appを取得します -
$blog_idを取得し、そこから$blogを取得します。 -
%paramに、ブログのID:$blog_idとブログ名:$blog->name()、公開済みブログ記事:MT::Entry->count()をセットします。 - テンプレート(modal_window.tmpl)と
%paramからページを生成します。
<mt:include name="dialog/header.tmpl" page_title="<__trans phrase="Modal Window">"> blog_id : <mt:var name="blog_id" encode_html="1"><br /> blog_name : <mt:var name="blog_name" encode_html="1"><br /> entry_count : <mt:var name="entry_count" encode_html="1"><br /> <mt:include name="dialog/footer.tmpl">
- モーダルウィンドウのテンプレートファイルです。
- ヘッダーとフッターのテンプレートを
<mt:include name="dialog/xxx.tmpl">でインクルードしています。 - blog_id, blog_name, entry_count を
%paramで渡されたものをセットします。
これでモーダルウィンドウにブログの情報が表示されるようになりましたが、まだ「閉じる」ボタンがありません。
「閉じる」ボタンは以下の様に追加します。
<mt:include name="dialog/header.tmpl" page_title="<__trans phrase="Modal Window">">
blog_id : <mt:var name="blog_id" encode_html="1"><br />
blog_name : <mt:var name="blog_name" encode_html="1"><br />
entry_count : <mt:var name="entry_count" encode_html="1"><br />
<div class="actions-bar">
<div class="actions-bar-inner pkg actions">
<form action="" method="get" onsubmit="return false">
<button
type="submit"
class="action button primary primary-button mt-close-dialog"
title="<__trans phrase="Close">"
><__trans phrase="Close"></button>
</form>
</div>
</div>
<mt:include name="dialog/footer.tmpl">
これで仕様通りに「モーダルウィンドウ」メニューをクリックすると、モーダルウィンドウにブログ情報が表示され、「閉じる」ボタンをクリックするとモーダルウィンドウが閉じて元の画面に戻るという実装が完了しました。
$MT_DIR/
|__ plugins/
|__ MyPlugin16/
|__ config.yaml
|__ lib/
| |_ MyPlugin16/
| |__ L10N.pm
| |_ L10N/
| | |_ en_us.pm
| | |_ ja.pm
| |__ ModalWindow.pm
|__ tmpl/
|_ modal_window.tmpl
今回は動作モードをモーダルウィンドウで表示する事を前提に実装しましたが、 dialog: 1 をセットせずに通常のウィンドウを表示させることも可能です。その場合、それぞれ合った外部テンプレートをインクルードしてページを作りましょう。 $MT_HOME/tmpl/cms/ 内にテンプレートがありますのでチェックしてください。
今回で管理画面のUIの修正方法の解説は終りです。思ったより簡単だったのではないでしょうか?本ドキュメントと既存のプラグインを参考に管理画面を自分流にカスタマイズしてみましょう。
- プラグイン開発のためのファーストステップ
- レジストリ、YAMLについて
- 環境変数について
- プラグインのローカライゼーションについて
- テストドリブンでのプラグインの開発について
- グローバル・モディファイアプラグインの開発について
- ファンクションタグ プラグインの開発について
- ブロックタグ プラグインの開発について
- コンディショナルタグ プラグインの開発について
- プラグインのデバッグ
- プラグインの設定方法
- コールバックとフックポイント
- スケジュールタスクの開発
- MTオブジェクトの利用方法
- 独自オブジェクトの作成
- 新規アプリケーションの作成
- Transformerプラグインの開発
- 管理画面のメニュー修正
- リストアクションの追加
- 動作モードの追加とモーダルウィンドウの表示
- 外部Web APIとの連携
- 権限とロール