ページの作成や編集にはユーザ登録が必要です。
行ごとに編集可能テーブル tableedit
- 投稿者: Kuboon
- カテゴリ: 修正
- 優先度: 普通
- 状態: 提案
- 日時: 2004年12月08日 10時14分03秒
- ライセンス:GPL
- 動作確認バージョン:3.5.10
- 3.5.7dev3 の create_url を使っているので、それ以前のバージョンでは動作しません。
ダウンロード・履歴
- tableedit050513.zip(1140)
- ageオプションがない場合は最下行に追加。
- tableedit050211.zip(722)
- 日本語や記号を含むページ名で正しく機能しかなったのを修正
- "追加"がバグバグだったのを修正
- tableedit050205.zip(712)
- テーブル名は出力しなくなりました。
- no_add オプションを追加
- ダブルクォートを含む編集に対応
- 編集行の識別に従来は行そのものを用いていたが、行数に変更。同一行が複数あっても問題なくなったが、ページの更新時刻をチェックするようにしたのでconflictの可能性は高くなったかも。(少しね。)出力されるHTMLソースがかなり小さくなった。
- 追加は常に最上行へ
- 3.5.7dev3 の create_url を早速使っているので、lib/Wiki.pmだけでもバージョンアップしないと動きません。
- tableedit041208.zip(766)
- BugTrack-plugin/162のカラム追加パッチに対応したつもり
内容
ゆーろさんによるテーブル拡張プラグインを若干使いやすく改良しました。本人の許可の下、改めて公開します。動作中ページ
使い方
既存のページにテーブルがあると仮定します。短いテーブルならば編集をする事に抵抗はないと思いますが、縦と横のデータが増えてくると編集が大変になると思います。そんな時、テーブルデータの先頭に本プラグインを挿入すると編集が簡単にできるようになります。編集が不要なときはコメントにしてしまうという使い方でもOKだと思います。
テーブル定義 table_def 機能について
例1
,Name , Data1 , Data2 ,Anon , 100 , 200 ,Smith, 200 , 300
このテーブルを次のように書き直します。
{{table_def !テーブル名}} ,Name , Data1 , Data2 ,Anon , 100 , 200 ,Smith, 200 , 300 {{table_end}}
ver.050205から仕様が変更され、テーブル名は出力されなくなりました。
!テーブル名 {{table_def table_id}} ,Name , Data1 , Data2 ,Anon , 100 , 200 ,Smith, 200 , 300 {{table_end}}
テーブル名
Name | Data1 | Data2 | 追加 |
---|---|---|---|
Anon | 100 | 200 | 編集 |
Smith | 200 | 300 | 編集 |
と表示され、(編集)のリンクから編集ページに移動し、そちらで編集が可能となります。
各行の項目数が違う場合、編集の時点で最初の行の項目数に合わされます。table_def と table_end がきちんと対応していない場合、恐ろしいことになると思います。テーブル以外のものが挟まれているときも、何がおきるかわかったもんじゃありません ^^;
テーブル引用 table_inc 機能について
オリジナルと相違ありません。
補足:動作原理
Wiki::Parserは、1行ずつparseしてゆき{{プラグイン名}}が発見された時点で、登録されているプラグインがコールされる。その時呼ばれたfunction内において、Parse済みのHTMLは $self->{parser}->{html} でアクセス出来る。Parserへは保存されているページソースが直接渡されるため、まだParseされていない先の行への書き換えは出来ない。(普通にget_pageすれば読むことは出来る。)
本プラグインは、{{table_def}}の時点で、そのページのソースを読み込み、後続するテーブルに[編集]を追加しながらHTMLパースを勝手に実行してしまう。(更に、--cut from here--という行を追加出力)このままfunctionから戻ると、Wiki::Parserは、{{table_def}}に続くテーブルはまだparseしていないつもりなので、普通にparseする。すると[編集]ボタン付のテーブルの後ろに、普通のテーブルがまた表示されてしまうことになるので、それを{{table_end}}でさかのぼって削除している。(--cut from here--以降を削除)
pluginの仕様内で実装しようとしたために、tableを2回parseする怪しい仕様になってしまっているが、あまり好ましくないと思われる。本体のほうへ手を加えたいのですが、どのような方法がよろしいでしょう。他の開発者の方々のご意見を伺いたいです。
コメント
- $self->{parser}->{source}とかで先の行にアクセス出来るといいと思うのですが。 - Kuboon (2004年12月08日 10時32分23秒)
- $self->{parser}を使うこと自体がかなり裏技的なので(includeをプラグインで実現するために仕方なく…)、この手のプラグインの場合、テーブルだけ別ページにしてプラグインからはそのページを読み書きするのがスッキリすると思うのですがどうでしょう。利用者からするとやはりインラインで書けたほうが便利なんでしょうか。 - たけぞう (2004年12月08日 16時00分51秒)
- あーなるほど、、、それは確かにそうかもしれません。さすが設計者様ですね ^^; - Kuboon (2004年12月09日 08時53分58秒)
- テーブルのカラムや行を対象にした hook 定義して呼び出されるようにすればプラグインとしての拡張も容易になるかもしれませんね。今、hook 導入テストを行っているんですが、どういうタイミングで呼び出すのが適当か迷っていますが・・・。 - KG (2004年12月10日 13時10分48秒)
- ただ、hookだと戻りが無いのでテーブルの行もしくはカラムと、perserもしくは perser->{html} をパラメータで渡すようになるかもしれません。これはあまり好ましくないのかもしれませんが・・・。 - KG (2004年12月10日 13時14分45秒)
- 各桁・行(列)の追加・削除・編集を可能にして頂けませんでしょうか?つまりは、表自体は Excel や Lotus 1-2-3, 三四郎などの表計算ソフトと同様のイメージです。HTML として完全に同じものを作るのは不可能だと思うので
- 分かりにくいかも知れませんが上記のことを実現して頂けると嬉しいです。 - Custom (2005年02月03日 23時34分56秒)
- 桁 というのがどこを指しているのか良くわからないのですが、ヘッダは普通にWikiの「編集」を使えばいいと思います。そうでなければ、もはやWiki上で実現する意味がないでしょう。ソート機能はその気になればつけられそうなのですが、むしろBugTrack-plugin/134にだんだん近づいてきますね。 - Kuboon (2005年02月05日 10時53分30秒)
- え〜っと、まあそうなんですが・・・。(^^ゞなお、「桁」というのは縦の行です。ちょっと用語間違えていたかも・・・。(^_^; - Custom (2005年02月05日 19時09分49秒)
- 普通、横を行、縦を列 といいます。なるほど、たしかに列を手動で増やすのは大変ですからね。ちょっと考えてみますね。 - Kuboon (2005年02月05日 21時08分14秒)
- すみませんです。そうです。「列」を勘違いしていました。(^_^; 具体的には一般の表計算ソフトなどと同じような操作性を実現できると嬉しいですが HTML でやる限り多少は仕方ないですね。( JavaScript などを使用すればもう少し簡単に実現できそうですが機種依存性もありますしあまり好ましくないです)各ヘッダにリンクをつけておけば任意の位置で追加・編集・削除などができますし結構便利かなと・・・、わがままですね。 - Custom (2005年02月06日 02時28分42秒)
- ver.050205で日本語または記号を含むページ名のテーブルで編集or追加すると入力フォームが表示されないのですが、自分の環境のみの事象でしょうか?また、table_incで参照先のデータでリンクや{{br}}等を使用するとそのまま表示されてしまうのですがverupの予定はありませんか? - nakamura (2005年02月07日 19時47分54秒)
- 050211で修正しました。table_incのほうは実は僕は全然いじってないし使ってないのでいろいろ不具合があるかもです。すみません。たけぞうさんの助言を生かして、テーブルだけで1ページにするバージョンを考え中です。そうすると、ソートや編集がもっと柔軟にできますし。 - Kuboon (2005年02月14日 10時56分30秒)
- 050211を試してみました。追加すると最上位に追加さるれみたいです。また、最終セルが空白だとセルが左へつめて表示されるようです。新バージョンを期待しています。 - nakamura (2005年02月21日 16時59分07秒)
- 上記について修正してみました。(TableHandler.pm-050222)初心者なので変更内容については暖かい目でみてください。 - nakamura (2005年02月22日 21時29分33秒)
- 空白セルのバグは、74行を last unless defined $val; にすれば回避できますね。追加は、最下行の判定が面倒だったので仕様変更です。下に追加されたほうがいいのかなぁ? - Kuboon (2005年02月24日 16時04分51秒)
- ver.050211で「Can't locate object method "create_url" via package "Wiki" at plugin/tableedit/Def.pm line 53.」というエラーが出てしまいます。 - kawa (2005年02月26日 22時14分51秒)
- 上記エラーですがver.050205から3.5.7dev3以降のWiki.pmが必要ですがそのへん大丈夫ですか? - nakamura (2005年02月28日 10時39分29秒)
- 行の追加位置ですが、履歴や記録表等は時系列に確認したい場合があるので、最下行追加機能もほしいところです。わがままをいうと、任意行(指定行の下とか上)追加機能があるとうれしいかな・・編集画面に行追加ボタンも一緒に表示されるといいな!! - nakamura (2005年02月28日 10時43分54秒)
- ageを設定しない場合は末尾に追加されるようになりました。 - Kuboon (2005年05月13日 15時15分45秒)
- 使い方がいまいちわかりません。解凍をして.pmのファイルの中身をすぺてコピペして、table_edit.inc.phpを作ればいいのでしょうか? - nanasi (2005年12月06日 16時11分40秒)
- table_edit.inc.php? - 名無しさん (2005年12月06日 16時51分14秒)
- 拡張子がphpという事ですが、別のシステムではないでしょうか。 - A_M (2005年12月06日 17時33分36秒)
- あ。pukiwikiのサイトから流れついたので、てっきしpukiwikiだと思ってました。失礼しました。 - nanasi (2005年12月06日 20時24分42秒)
- これ列の編集も出来ればすごい便利そうですね。 - 名無しさん (2006年01月26日 16時17分06秒)
- カラム属性のROWを使用して結合した表に対して編集を行なうと、セルが少ない為に1つずつセルがずれてしまいます。対応は難しいでしょうか? - みやび (2006年11月29日 11時54分32秒)
- table_inc機能にオプションで別名(テーブル名)をつけられると勝手が良くなりませんか? - ぴーなつ (2007年01月11日 18時41分58秒)
- 編集や追加のリンク先がhttp://hostname/cgi-bin/wiki3_6_2/hostname/cgi-bin/wiki3_6_2.cgiとなってしまいますが、何処を修正すれば改善されますでしょうか。 - 口内炎 (2008年04月11日 20時52分55秒)
- ./setup.dat の server_host に何か値を与えていますか? もしそうであるなら、値を何も与えないようにすると改善しませんか? - 名無しさん (2008年04月11日 21時06分53秒)
- ありがとうございます。改善致しました。となると、server_hostの必要性が不明ですが・・・ - 口内炎 (2008年04月15日 20時23分25秒)
- ご質問です。脚注をフッターに表示させると二重にでてしまうのですが・・・。ちなみにperl5.8.8。wiki3.6.2。自作で動かしてます。解決方法ありますでしょうか?? - 名無しさん (2008年05月19日 10時09分01秒)
- 上の質問ですが、tableeditとどう関係しているのでしょうか? - 名無しさん (2008年05月19日 19時21分51秒)
- 実はtable内にfnを記入しtableeditを使用すると二重に表示されてしまうのです。これはtableを2回parseする関係上止むを得ないのでしょうか? - 名無しさん (2008年05月20日 09時42分52秒)
- こちら に複数行プラグイン版を置いておきます。複数回のパースを行わないので fn 二重表示問題に対応できます。 - KG (2008年05月20日 13時27分35秒)
- KG様>対応確認致しました。ありがとうございました。 - 名無しさん (2008年05月20日 14時34分31秒)
- セル内にカンマを含むような場合(ex.金額とか)ダブルクォートで囲んでいても、デリミタとして動作してしまうようなのですが、回避策はありますでしょうか? - ゆう (2008年07月07日 12時03分46秒)
- すいません、自己レスです。TableHandler.pmを少し修正したら、それっぽく動いているような気がします。perlは触ったことがなかったのですが、以下のように修正してみました。指摘等ありましたらよろしくお願いします。- ゆう (2008年07月07日 22時37分25秒)
56c56,63 < $buf.= "<tr><td>$_</td><td><input type=text name='$count' value=\"".&Util::escapeHTML(shift(@val))."\"></td></tr>\n"; --- > my $valtmp = ''; > if ( @val[0] =~ /^\"/) { > do { > $valtmp .= shift(@val).","; > } until ( @val[0] =~ /$\"/); > @val[0] = $valtmp . @val[0]; > } > $buf.= "<tr><td>$_</td><td><input type=text size=100 name='$count' value=\"".&Util::escapeHTML(shift(@val))."\"></td></tr>\n";
- 私なら以下のような修正を行います。(参考程度に...) - KG (2008年07月08日 12時08分30秒)
TableHandler.pm:37行目 - my @elm = split(",", @lines[$header]); shift @elm; + my @elm = map {/^(".*")$/ ? $1 : $_} (@lines[$header] =~ /,\s*(\"[^\"]*(?:\"\"[^\"]*)*\"|[^,]*)/g); TableHandler.pm:39行目 - if($line>0){@val = split(",", @lines[$line]); shift @val;} + if($line>0){ + @val = map {/^(".*")$/ ? $1 : $_} (@lines[$line] =~ /,\s*(\"[^\"]*(?:\"\"[^\"]*)*\"|[^,]*)/g); + }
- KGさん、レスありがとうございます。パッと見では全然分からないのですが、いい機会ですのでちょっとperlの勉強も兼ねて読み解いてみます。 - ゆう (2008年07月08日 17時04分10秒)
- 実際に動かしてみたわけではないのですが、KGさんの修正案の map のブロック内って、実質的に何もしてないように見えるのですが...。 - ななし (2008年07月09日 02時00分48秒)
- あら、ホントだ。色々修正しながらだったんで気づかんかった。(笑) - KG (2008年07月09日 02時05分12秒)
- ダブルクォーテーションを落とそうかどうしようか迷ってたんです。。。(言い訳) - KG (2008年07月09日 02時06分23秒)
- 本体を3.6.3にVupしたら、--cut from here--以降のテーブルが消えなくなりました。(編集可能なテーブルと編集不可能なテーブルの2つが表示されてしまいます) どなたかこのような事象が起きて解決されている方はいませんでしょうか? - ゆう (2009年08月17日 14時21分19秒)
- 上記コメントでも紹介されているKGさん作成の複数行プラグイン版は、FSWiki 3.6.3 でも問題なく動くようですよ。 - 菜梨 (2009年08月17日 17時04分57秒)
- 菜梨さん、ありがとうございます。早速入れ替えました。(もちろんですが)ちゃんとテーブル一つだけ表示されるようになりました。 - ゆう (2009年08月17日 19時27分19秒)
最終更新時間:2011年12月29日 23時37分27秒