2003-04-20(日) [長年日記]
■ tDiary: form_procプラグイン
絵日記をどうにかプラグイン単体で動かすため、form_procを導入。これは、日記本文を書く更新フォームの下に、別のフォーム(別にフォームじゃなくてもいいけど)を追加するためのコールバック系プラグインである。
でもなー、なんか約束事が多すぎてきれいじゃないんだよなぁ。しょうがないか?
- submitボタンのname属性は「plugin」でなければならない
- 引数で与えられる日付を「YYYYMMDD」形式にしてdateというname属性を持ったアイテムに入れておくと、上の更新フォームと日付の同期がとれる
- その他のアイテムは、「plugin_プラグイン名_アイテム名」というname属性を持たせて他のプラグインとの名前空間を分ける
submit後は同じ画面に戻ってくるので、フォームの表示と、submitされたデータの処理は同じadd_form_proc内に書く。以下はファイルアップロードの実験用に書いた、指定されたローカルファイルの内容を表示する(意味なし)プラグイン。
add_form_proc do |date|
begin
text = @cgi.params['plugin_text_file'][0].read
rescue NameError
end
<<-HTML
<div class="form">
<div class="caption">
ファイル表示
</div>
<form class="update" method="post"
action="#{@conf.update}" enctype="multipart/form-data"><div>
<input type="hidden" name="date"
value="#{date.strftime( '%Y%m%d' )}">
テキストファイル: <input type="file" name="plugin_text_file">
<input type="submit" name="plugin" value="OK">
</div></form>
<pre>#{text}</pre>
</div>
HTML
end
いちおう先ほどCVS HEADにcommit。これで絵日記が実装できるなら、edit_procは廃止してもいいか。
もう呆然、ただただ絶句…です。必ずまた戻って来ると信じていたのに…合掌。
todoやaの更新フォームへ飛ぶナビバーを表示するのにいいかなと思ってたんですが。一緒に更新するほど頻度高くないでしょうし。>edit_proc
それはnavi_adminの役割だと思いますよ
確かに。でもplugin増えるごとにnavi_adminの書き換えが必要だからprocで追加できる方が…と思ったのです。
上書きじゃなくてメニューを追加したいならこんな感じのコードでできます。
http://sodium.dnsalias.com/sodium/diary/20030421.html#p11