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