プロジェクト

全般

プロフィール

Tips プラグイン設定画面 » 履歴 » リビジョン 3

リビジョン 2 (Mitsuyoshi Yoshida, 2011/05/29 02:01) → リビジョン 3/5 (Mitsuyoshi Yoshida, 2011/06/05 15:32)

h1. プラグインの設定画面を作る 

 プラグインでユーザが設定を変えられるようにしたいことがあります。 
 Redmine ではその機能が用意されています。管理ページのプラグインリストのところででてくる [設定] のリンクから開くページです。 
 このプラグインの設定ページの追加方法を紹介します。 

 !plugin_settings.png! 


 h2. サンプルコード 

 * "表示":http://code.google.com/p/myoshida-rp/source/browse/#svn%2Ftrunk%2FTips%2Fmlist%2Fredmine_mailing_list_link 
 * "ダウンロード":http://code.google.com/p/myoshida-rp/downloads/detail?name=sample-mlist.zip 

 !sample_mlist.png! 

 h2. サンプルプラグインの準備 

 サンプルはメーリングリストの html ページにリンクをはる wiki マクロにします。 
 他の Tips で [[TipsWikiMacro|wikipedia の用語にリンクをはるサンプル]] を紹介しました。 wikipedia はアドレスが固定だったので、アドレスをハードコーディングしてもかまわなかったのですが、メーリングリストはユーザごとにアドレスを変える必要があります。これを設定画面で変更できるようにしています。 

 まずはプラグイン名を MailingListLink にしてスケルトンを作成します。今回のプラグインではこのうち init.rb と app/views のディレクトリのみ使います。 
 その後 Redmine::Plugin.register の description などを適当に変更しておきます。 


 h2. 設定を追加する 

 それではプラグイン用の設定を追加していきましょう。 

 設定ですから、データベースに値を保存する必要があります。しかし、プラグインの設定の保存は Redmine が自動的にやってくれるので、特にプラグイン側で設定用の Model などを用意する必要はありません。 
 resister メソッドの中で *settings* メソッドを呼ぶだけで設定が保存できるようになります。 

 <pre><code class="ruby"> 
   settings :default => { 
     'mlist_view_string' => 'ruby-list#', 
     'mlist_address' => 'http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/' 
   }, :partial => 'settings/mlist_settings' 
 </pre> 

 設定はハッシュマップを使って指定します。 2, 3 行目が設定のパラメータを決めているところでハッシュの値はデフォルト値となります。ここではリンクの表示用の文字列とメーリングリストのアドレスをパラメータとしています。 
 4 行目の第 2 引数で設定ページを指定しています。 

 デフォルト値は "Ruby のメーリングリスト":http://blade.nagaokaut.ac.jp/ruby/ruby-list/index.shtml にしています。 


 h2. 設定ページを追加する 

 設定用の model や controller は作る必要はありませんが、設定ページの view は作る必要があります。 

 settings メソッドで 'settings/mlist_settings' と指定したので、以下の表示用のファイルを作成します。 
 <pre> 
     app/views/settings/_mlist_settings.html.erb 
 </pre> 

 ファイルには設定するパラメータの設定フォームを記述します。 

 <pre> 
 <p> 
   <table>  
   <tr><td> View string </td><td> 
   <%= text_field_tag('settings[mlist_view_string]', @settings['mlist_view_string'])%> 
   </td></tr> 
   <tr><td> Addrss </td><td> 
   <%= text_field_tag('settings[mlist_address]', @settings['mlist_address'], :size => 80)%> 
   </td></tr> 
   </table> 
 </p> 
 </pre> 

 基本的に通常の設定フォームの中身を書く要領で自由に書いてかまいませんが、 submit ボタンなどは Redmine 側で書いてくれるので書く必要はありません。 

 !mlist_settings.png! 

 


 h2. 設定値を使用する 

 設定値を利用してメーリングリストの wiki マクロを作成します。設定値を利用する部分以外はほぼ wikipedia リンクのマクロと同じものです。 

 <pre> 
 Redmine::WikiFormatting::Macros.register do 
   desc "Mailing list link macro" 
   macro :mlist do |obj, args| 
     if (args.size != 1) 
       raise "this macro is given only one argument." 
     else 
       word = args.first.strip 
       addr = Setting.plugin_redmine_mailing_list_link['mlist_address'] + CGI.escape(word) 
       viewstr = Setting.plugin_redmine_mailing_list_link['mlist_view_string'] + word 
       return link_to(viewstr, addr, :class => "external") 
     end 
   end 
 end 
 </pre> 

 *Setting.plugin_プラグイン名* で設定値のハッシュにアクセスできます。 
 8 行目で設定値のアドレスを使ってアドレスを決め、 9 行目で表示文字を作っています。 

 wiki で次のように書くとメーリングリストにリンクをはるようになります。 

 <pre> 
 * {{mlist(1)}} 
 </pre>