Symfoware

Symfowareについての考察blog

Redmine 3.1系プラグイン作成 メニューの追加

Redmineのプラグインを作っています。

プラグインの雛形の生成と、画面の表示まで行えました。
Redmine 3.1系プラグインの作り方

今回は、任意の箇所にメニューを追加してみます。
プラグイン チュートリアル



アプリケーションメニューの拡張



plugins/test_plugin/init.rbを編集することで、メニューへの追加が行えます。


  1. Redmine::Plugin.register :test_plugin do
  2. name 'Test Plugin plugin'
  3. author 'Symfoawre'
  4. description 'This is a plugin for Redmine'
  5. version '0.0.1'
  6. url 'http://example.com/path/to/plugin'
  7. author_url 'http://example.com/about'
  8. # この行を追加
  9. menu :top_menu, :test, { :controller => 'sample', :action => 'index' }, :caption => 'ここに追加'
  10. end




定義は、こんなイメージみたいです。


menu [追加する位置], [適当な名前], [追加するURL], [表示名]



「test」としている箇所は別にプラグイン名と一致させる必要も内容です。
controllerとactionだけ気をつければ良いみたい。


追加できる位置は以下の5箇所。

:top_menu – 画面左上のメニュー

654_01.png


:account_menu – 画面右上のログイン/ログアウトのリンクがあるメニュー

654_02.png


:application_menu – プロジェクト外にいるときに表示されるメインメニュー

654_03.png


:project_menu – プロジェクト内にいるときに表示されるメインメニュー

これは、他のパラメーターと組み合わせる必要があるようです。
後ほど見てみます。



:admin_menu – 「管理」画面のメニュー (「設定」と「プラグイン」の間にのみ追加できます)

654_04.png



また、メニューの項目が挿入される位置の指定を指定することもできます。

:before,:afterで指定した項目の前後に追加。

:before => :users

654_05.png


:after => :users

654_06.png


:first,:lastでメニューの先頭、末尾を指定。

:first => true

654_07.png


:last => true

654_08.png



プロジェクトメニューの拡張



各プロジェクト画面のタブにメニューを追加してみます。
plugins/test_plugin/init.rbを以下のように編集。


  1. Redmine::Plugin.register :test_plugin do
  2. name 'Test Plugin plugin'
  3. author 'Symfoawre'
  4. description 'This is a plugin for Redmine'
  5. version '0.0.1'
  6. url 'http://example.com/path/to/plugin'
  7. author_url 'http://example.com/about'
  8. # 以下の2行を追加
  9. permission :test, { :sample => [:index] }, :public => true
  10. menu :project_menu, :test, { :controller => 'sample', :action => 'index' }, :caption => 'ここに追加', :first => true, :param => :project_id
  11. end




これでプロジェクトのメニューに追加されました。

654_09.png


しかし、タブをクリックすると他のタブが消えます。

654_10.png


コントローラーで、タブの表示に必要な情報を取得してやります。


  1. class SampleController < ApplicationController
  2. unloadable
  3. def index
  4.     # プロジェクトの情報を取得
  5.     @project = Project.find(params[:project_id])
  6.     @name = 'コントローラーから名前を設定します'
  7. end
  8. end




これで、プラグインで追加したタブをクリックしても、他のタブが表示されるようになりました。

654_11.png





プロジェクトモジュールの作成



このままだと、全部のプロジェクトに追加したプラグインのタブが表示されます。
「プロジェクトモジュール」を作成することで、特定のプロジェクトにのみ、
プラグインの機能を有効化することができます。

init.rbを編集。
以下のようになりました。


  1. Redmine::Plugin.register :test_plugin do
  2. name 'Test Plugin plugin'
  3. author 'Symfoawre'
  4. description 'This is a plugin for Redmine'
  5. version '0.0.1'
  6. url 'http://example.com/path/to/plugin'
  7. author_url 'http://example.com/about'
  8. menu :project_menu, :test, { :controller => 'sample', :action => 'index' }, :caption => 'ここに追加', :first => true, :param => :project_id
  9. # プロジェクトごとの権限を追加
  10. project_module :test do
  11.     permission :view_sample, :sample => :index
  12. end
  13. end




各種名前は任意のものでOKなようでした。
:sample => :indexの箇所だけしっかり合わせておけばいいようです。


この設定を行うことで、プロジェクトの[設定] - [モジュール]にプラグインの名称が表示されます。

654_12.png


プラグインを有効にすることで、メニューが表示されるようになりました。

654_13.png

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/11/15(日) 18:33:33|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Redmine 独自のWikiマクロを追加するプラグインの作成 | ホーム | Redmine 3.1系プラグインの作り方>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1819-86c7d7c5
この記事にトラックバックする(FC2ブログユーザー)