from 過負荷な日々(12/05)
この表からrailデータベースを自動作成すれば楽ができそう. HTMLを厳密にパーズするのは相当リソースがかかりそうなので, Hikiデータを読んでパースするのが確実かな.
なお, 下のほうの不明なコードネーム, たしか, いただきものデータベースにはいっていたものを そのまま貼り付けただけだったように記憶してます. たしか, 送ってくださったの,kaoruさんだったように 記憶してますが, 結構昔の出来事なので, 定かではありません.
こせきさんの「Tikiでは…」のくだりのほうがHack欲をかきたててしまった (^^;
私の技量では Tiki の例のようなものはさくっと作ることはできないが, フォームに1行単位で入力できるフォームを提供するプラグインぐらいなら でっちあげることはできるので, やってみた.
# $Id$ ##require 'csv' def table_row_label '追加行' end def table_post_label '投稿' end add_body_enter_proc(Proc.new do @table_num = 0 "" end) def table_form( cols = 60, style = 0 ) cols = 60 unless cols.respond_to?(:integer?) style = 0 unless style.respond_to?(:integer?) style = 0 if style != 1 @table_num += 1 <<EOS <form action="#{$cgi_name}" method="post"> <div> #{table_row_label}: <input type="text" name="row" size="#{cols}"> <input type="submit" name="table" value="#{table_post_label}"> <input type="hidden" name="table_no" value="#{@table_num}"> <input type="hidden" name="c" value="plugin"> <input type="hidden" name="p" value="#{@page}"> <input type="hidden" name="plugin" value="table_post"> <input type="hidden" name="style" value="#{style}"> </div> </form> EOS end def table_post params = @cgi.params table_no = (params['table_no'][0] || 0).to_i rowstring = params['row'][0] style = params['style'][0].to_i return '' if rowstring.strip.size == 0 lines = @db.load( @page ) md5hex = @db.md5hex( @page ) flag = false count = 1 content = '' lines.each do |l| if /^\{\{table_form.*\}\}/ =~ l && flag == false if count == table_no content << l if style == 1 if /^\|\|/ === rowstring then # wiki style table content << rowstring + "\n" ## else ## # CSV style table ## rowstring << "\n" unless /\n\Z/ === rowstring ## CSV::Reader.parse(rowstring) do |row| ## content << "||" + row.to_a.join("||") +"\n" end end content << l if style == 0 flag = true else count += 1 content << l end else content << l end end @db.save( @page, content, md5hex ) if flag end
ダウンロードはこちらからどうぞ.
ほとんどcomment.rbのパクリだが, 気にしない.
comment.rbと同じく
{{table_form}}
とすると, 表をフォームの上に追加していく. 逆に下へ追加したければ
{{table_form(60,1)}}
のように, 第二引数に1をつければよい.
編集領域と同様, "||"区切りで1行だけ入力する.
上記ソースのうち, "##"ではじまる行の先頭"##"を削除することで, Wikiフォーマット以外に, コンマ区切り(CSV)形式でも書くことができる. ただし, 要csv.rb.
コンマ区切りが有効の際は, 入力の先頭が
と, 自動判定するようになっている.
やはり, 専用ページを用意して入力させるようなフォームはつくってみたいところ. しかし簡単にできるんかいな…
*Messages* の更新情報取得には、antenna.lirs もしくは index.rdfをご利用ください。 豪傑アンテナ の LIRSからも取得可能です。
自己フォロー. 項目ごとに入力ボックスを用意したバージョンをつくりました.<br><br> http://pure.fan.gr.jp/hack/?TableFormPlugin