プロジェクト

全般

プロフィール

Tips プラグイン設定画面 » 履歴 » バージョン 5

Mitsuyoshi Yoshida, 2011/06/13 12:39

1 1 Mitsuyoshi Yoshida
h1. プラグインの設定画面を作る
2
3
プラグインでユーザが設定を変えられるようにしたいことがあります。
4
Redmine ではその機能が用意されています。管理ページのプラグインリストのところででてくる [設定] のリンクから開くページです。
5
このプラグインの設定ページの追加方法を紹介します。
6
7
!plugin_settings.png!
8
9
10
h2. サンプルコード
11
12
* "表示":http://code.google.com/p/myoshida-rp/source/browse/#svn%2Ftrunk%2FTips%2Fmlist%2Fredmine_mailing_list_link
13
* "ダウンロード":http://code.google.com/p/myoshida-rp/downloads/detail?name=sample-mlist.zip
14
15
!sample_mlist.png!
16
17
h2. サンプルプラグインの準備
18
19 2 Mitsuyoshi Yoshida
サンプルはメーリングリストの html ページにリンクをはる wiki マクロにします。
20 1 Mitsuyoshi Yoshida
他の Tips で [[TipsWikiMacro|wikipedia の用語にリンクをはるサンプル]] を紹介しました。 wikipedia はアドレスが固定だったので、アドレスをハードコーディングしてもかまわなかったのですが、メーリングリストはユーザごとにアドレスを変える必要があります。これを設定画面で変更できるようにしています。
21
22
まずはプラグイン名を MailingListLink にしてスケルトンを作成します。今回のプラグインではこのうち init.rb と app/views のディレクトリのみ使います。
23
その後 Redmine::Plugin.register の description などを適当に変更しておきます。
24
25
26
h2. 設定を追加する
27
28
それではプラグイン用の設定を追加していきましょう。
29
30
設定ですから、データベースに値を保存する必要があります。しかし、プラグインの設定の保存は Redmine が自動的にやってくれるので、特にプラグイン側で設定用の Model などを用意する必要はありません。
31
resister メソッドの中で *settings* メソッドを呼ぶだけで設定が保存できるようになります。
32
33
<pre><code class="ruby">
34
  settings :default => {
35
    'mlist_view_string' => 'ruby-list#',
36
    'mlist_address' => 'http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/'
37
  }, :partial => 'settings/mlist_settings'
38 4 Mitsuyoshi Yoshida
</code></pre>
39 1 Mitsuyoshi Yoshida
40
設定はハッシュマップを使って指定します。 2, 3 行目が設定のパラメータを決めているところでハッシュの値はデフォルト値となります。ここではリンクの表示用の文字列とメーリングリストのアドレスをパラメータとしています。
41
4 行目の第 2 引数で設定ページを指定しています。
42
43
デフォルト値は "Ruby のメーリングリスト":http://blade.nagaokaut.ac.jp/ruby/ruby-list/index.shtml にしています。
44
45
46
h2. 設定ページを追加する
47
48
設定用の model や controller は作る必要はありませんが、設定ページの view は作る必要があります。
49
50
settings メソッドで 'settings/mlist_settings' と指定したので、以下の表示用のファイルを作成します。
51
<pre>
52
    app/views/settings/_mlist_settings.html.erb
53
</pre>
54
55
ファイルには設定するパラメータの設定フォームを記述します。
56
57 4 Mitsuyoshi Yoshida
<pre><code class="rhtml">
58 1 Mitsuyoshi Yoshida
<p>
59
  <table> 
60
  <tr><td> View string </td><td>
61
  <%= text_field_tag('settings[mlist_view_string]', @settings['mlist_view_string'])%>
62
  </td></tr>
63
  <tr><td> Addrss </td><td>
64
  <%= text_field_tag('settings[mlist_address]', @settings['mlist_address'], :size => 80)%>
65
  </td></tr>
66
  </table>
67
</p>
68 4 Mitsuyoshi Yoshida
</code></pre>
69 1 Mitsuyoshi Yoshida
70
基本的に通常の設定フォームの中身を書く要領で自由に書いてかまいませんが、 submit ボタンなどは Redmine 側で書いてくれるので書く必要はありません。
71
72
!mlist_settings.png!
73
74
h2. 設定値を使用する
75
76
設定値を利用してメーリングリストの wiki マクロを作成します。設定値を利用する部分以外はほぼ wikipedia リンクのマクロと同じものです。
77
78 5 Mitsuyoshi Yoshida
<pre><code class="ruby">
79 1 Mitsuyoshi Yoshida
Redmine::WikiFormatting::Macros.register do
80
  desc "Mailing list link macro"
81
  macro :mlist do |obj, args|
82
    if (args.size != 1)
83
      raise "this macro is given only one argument."
84
    else
85
      word = args.first.strip
86
      addr = Setting.plugin_redmine_mailing_list_link['mlist_address'] + CGI.escape(word)
87
      viewstr = Setting.plugin_redmine_mailing_list_link['mlist_view_string'] + word
88
      return link_to(viewstr, addr, :class => "external")
89
    end
90
  end
91
end
92 4 Mitsuyoshi Yoshida
</code></pre>
93 1 Mitsuyoshi Yoshida
94
*Setting.plugin_プラグイン名* で設定値のハッシュにアクセスできます。
95
8 行目で設定値のアドレスを使ってアドレスを決め、 9 行目で表示文字を作っています。
96
97 2 Mitsuyoshi Yoshida
wiki で次のように書くとメーリングリストにリンクをはるようになります。
98 1 Mitsuyoshi Yoshida
99
<pre>
100
* {{mlist(1)}}
101
</pre>