cardformプラグイン
CardForm用のformを挿入します。
このプラグインについて
引数として指定したページformpageの内容に従いフォームを出力します。 このフォームにより入力された値は引数として渡したbasenameを元に、 bugtrackプラグインの様にbasename/数字というページに保存されます。 ただし、savepageが指定されていればsavepageに保存されます。
- 第1引数にformpageを指定します。
- 第2引数にbasenameを指定します。
- 第3引数にsavepageが指定できます。
- basenameが省略された場合はformpageが使われます。
{{cardform formpage,basename,savepage}}
formpageではformtext、formsubmit等のプラグインを使って 実際のフォーム要素を配置します。 formstart,formendなどはcardformプラグインにより追加されるため、 これらのプラグインは置かないでください。
このフォームを使って送られたデータはbasename/数字というページに 保存されます。 ただし、CGIパラメータpageがある場合はその値が保存ページ名となります。 savepageがあればこの値をCGIパラメータpageに設定し、保存ページ名とします。
savepageを指定した場合、すでにそのページがあればその内容をフォームの 初期値とします。savepageがない、または指定されていない場合、basename/0と いうページがあればそのページ内容を初期値とします。
このフォームにより作られるページはbasename、もしくはformpageの内容を 元に作られます。 新しく作られるページは元のページの、%パラメータ名%またはパラメータ名に 対応するフォームプラグインをパラメータ値で置換した内容となります。 また、basenameというページがなければ::と:::を使ってCGIパラメータをすべて 保存します。
CGIパラメータは、ユーザが使う任意のパラメータのほか、幾つかの機能をもつ パラメータが存在します。以下にそれを説明します。
- action
- cardformプラグインのアクションハンドラを呼び出すために"CARDFORM" である必要があります。本プラグインにより自動的に付けられます。
- basename
- アクションハンドラに保存に使用すべきbasenameを通知するために必要 です。本プラグインにより自動的に付けられます。
- page
- このパラメータは通常アクションハンドラに渡す必要がありません。 アクションハンドラにこのパラメータが渡されていない場合、 アクションハンドラはbasenameより保存すべきページ名を求め、 このパラメータに設定します。 このパラメータがすでに設定されていた場合はそのままそのページ名が 使われます。(すでに存在していれば上書きされます)
- time
- このパラメータは通常アクションハンドラに渡す必要がありません。 アクションハンドラにこのパラメータが渡されていない場合、 アクションハンドラは現在日時をこのパラメータに設定します。 これにより保存ページに保存日時を残す事ができます。
- debug
- このパラメータは通常アクションハンドラに渡す必要がありません。 アクションハンドラにこのパラメータが渡された場合、 アクションハンドラはデバッグモードで動作します。 アクションハンドラは通常のように動作し、保存すべき内容を 生成し、クライアントに送信しますが、実際には保存しません。 保存される値やページ内容を確認するために使用できます。 なお、パラメータ値は評価されません。
CardFormプラグイン全般について
内容
FreeStyle Wikiでカード型データベースを実現するプラグイン群です。
- 入力
- プラグインにより(wiki書式の範囲で)自由なレイアウトのフォームを 作ることができます。
- 保存
- フォームにより入力されたデータは雛型となるページを元に1件毎に、 バグトラックのようなbasename/数字というページとして保存されます。
- 利用
- basename/数字形式のページ群をカード型データベースとみなして表を 作ったり合計したりできます。
使用方法1:簡単な例
まず、データ入力用のフォームが必要です。
form*プラグインによるフォームの記述
フォームの記述はformで始まるフォーム記述用のプラグインによって行ないます。
*名前: {{formtext name}} *年代: {{formselect age,10代,20代,30代,40代,50代}} *好きな物: {{formtext favor,size=30}} {{formsubmit 投票}}{{formreset リセット}}
これをFavoriteというページに保存します。 え?フォームが表示されない?それで正常です。慌てずに。
cardformプラグインによるフォームの表示
次にフォームを表示したい所に以下のように書きます。
{{cardform Favorite}}
これで、フォームを表示するためのプラグインcardformにより、 先ほどのフォームを記述したページをインクルードしフォームとして表示します。
データの入力
先ほどのフォームに値を記入して投票ボタンを押してください。 そうするとFavorite/1というページができ、 先ほど入力した値が保存されていると思います。
使用方法2:保存用レイアウトを別にする
先ほどの様に入力用フォームを配置したページを作ります。
入力用フォーム配置ページ
以下のような内容をBugTrackFormというページに保存します。
,, ,投稿者,{{formtext user}} ,サマリ,"{{formtext subject,size=60}}" ,カテゴリ,"{{formselect category,本体,プラグイン,ドキュメント}}" ,優先度,"{{formselect rate,緊急,重要,普通,低}}" ,状態,"{{formselect stat,提案,着手,完了,リリース済,保留,却下}}" ,内容,"{{formtextarea msg,rows=10,cols=60}}" {{formsubmit 投票}}{{formreset リセット}}
入力データレイアウトページ
次に、入力データを保存するページをレイアウトします。
!!!%subject% *投稿者: %user% *カテゴリ: %category% *優先度: %rate% *状態: %stat% *日時: %time% {{bugstate}} !!内容 %msg% !!コメント {{comment}}
これをBugTrack-testとして保存します。
フォームの使用
それではフォームを使用してみましょう。
{{cardform BugTrackForm,BugTrack-test}}
使用方法3:入力データを利用する
入力されたデータの利用方法です。
入力データの一覧表示
利用方法1のフォームから入力した値を一覧表示するには次のように書きます。
{{cardlist Favorite,名前:*名前: ,年代:*年代: ,好きな物:*好きな物: ,}}
20代のデータのみ、名前順に表示したい場合は次のように書きます。
{{cardlist Favorite,*年代: ==20代,%sortby_alphabet%:*名前: ,名前:*名前: ,年代:*年代: ,好きな物:*好きな物: ,}}
わかりにくいですね。実はこの方法は推奨できません。 入力データを扱う場合は利用方法2の保存レイアウトを別にする方法を用いた方が わかりやすくなります。 利用方法2の場合、次のようになります。
{{cardlist BugTrack-test,%sortby_alphabet%:stat,ページ:%cardform_pagename%,カテゴリ:category,優先度:rate,状態:stat,投稿者:user,サマリ:subject}}
最初の「BugTrack-test」はBugTrack-test/数字ページが対象で、 そのフォーマットはページBugTrack-testが元になっている事を示しています。
次の「%sortby_alphabet%:stat」はstatをアルファベット順 (正確には文字コード順)にソートするという事です。
次の「ページ:%cardform_pagename%」からは実際の表示内容です。 この時、%cardform_pagename%はページ名を表します。
入力件数の表示
利用方法1で「20代の件数/全体の件数」という表示をしてみましょう。
{{cardcount Favorite,*年代: ==20代}}/{{cardcount Favorite}}
利用方法2の場合、次のようになります。
現在全{{cardcount BugTrack-test}}件中 {{cardcount BugTrack-test,stat提案}}件が提案状態で、 そのうち優先度が緊急は{{cardcount BugTrack-test,stat提案,rate==緊急}}件、 重要は{{cardcount BugTrack-test,stat提案,rate==重要}}件、 普通は{{cardcount BugTrack-test,stat提案,rate==普通}}件、 低は{{cardcount BugTrack-test,stat提案,rate==低}}件です。
サンプル
http://typer.sakura.ne.jp/wiki/wiki.cgi/cardform?page=FrontPage にて、ここに上げた例を書いています。 おいおい、他の例なども書く予定です。
ライセンス
GPLとします。
更新履歴
var.3からvar.4alpha1までの主な変更点
- cardlist,cardcount,cardsum各プラグインで対象データの条件指定をできる ようにした。
- cardlistプラグインでソート指定できるようにした。
- mod_perl時キャッシュ内容が残り、更新されないバグを修正した。
- その他幾つかバグフィックスしたけど省略
var.4alpha1からvar.4alpha2までの主な変更点
- 初期値取得機能の追加
- cardformのヘルプに初期値取得に関する説明を追加
- cardformに初期値取得先の判定と登録を行なう部分を追加
- ラベル値取得正規表現キャッシュを保存するハッシュ変数のキーを変更
- CardFuncBaseに初期値取得用情報を保存するハッシュ変数を追加
- CardFuncBase::do_page_cacheの引数numに"init"を渡すと登録した 初期値取得先から値をキャッシュするように変更
- CardFuncBaseにset_initpage,is_set_initpage,unset_initpage, get_initdataを追加
- FormFuncBaseがCardFuncBaseを継承
- 前のパラメータを優先するようにFormFuncBase::get_paramを変更
- form*プラグインに初期値取得と設定を行なう部分を追加
- 複数行も取得できるようラベル値取得正規表現を変更
- 正規表現マッチにsオプション追加
- 必ず値取得部分の前後に文字を入れる
- cardlistにセルの最大文字数指定機能を追加
- 幾つかインデントを修正
- cardformプラグインのヘルプにあった誤記2件を修正
var.4alpha2からvar.4alpha3までの主な変更点
- サンプル設置サイトのアドレス変更
- cardlistのセル内最大文字数指定機能において末尾の文字列処理厳格化と 3バイト文字への対応
- 値取得時の生成正規表現をすこし改良
var.4alpha3からvar.4alpha4までの主な変更点
- 日付入力フォームの設置・処理をやりやすくするformdatepickerプラグイン の追加
- formselectプラグインで初期値(selected)が設定できなかったバグの修正
var.4alpha4からvar.4alpha5までの主な変更点
- 修正フォーム時にもformdatepickerプラグインの初期値が現在日時とないって いたバグの修正
var.4alpha5からvar.4alpha6までの主な変更点
- 修正フォーム時にformdatepickerプラグインの初期値取得がうまくいって いなかったバグの修正
var.4alpha6からvar.4beta1までの主な変更点
- 今更ですがβ版とした
- fromcheckbox、formradioプラグインにaccesskey設定オプションを追加した
- 扱うページに対し権限がない場合はエラーとするようにした
- cardformにおいてフォームページが存在するが参照権限を持たない場合は エラーメッセージを表示しフォームを出力しない
- cardformにおいて以下の場合にはエラーメッセージを表示しフォームの
送信ボタンを無効にする
- ベースページが存在するが参照権限を持たない
- 保存ページ指定時にページ名に使用できない文字が含まれる
- 保存ページが存在するが参照権限を持たない
- 保存ページの編集権限または新規ページ作成権限を持たない
- データ送信時にベースページが存在するが参照権限を持たない場合は エラーメッセージを表示し処理を中断する
- ページ更新または新規作成時に以下の場合はエラーメッセージと
送信データのプレビュー表示のみ行ない、ページの保存は行なわない
- ページ名に使用できない文字が含まれる
- 保存ページが存在するが参照権限を持たない
- 保存ページの編集権限または新規ページ作成権限を持たない
- cardcount、cardsumにおいてベースページが存在するが参照権限を持たない 場合はエラー扱いとして文字を返さない
- 新規にページを作成した場合、ベースページが存在していれば、 その参照権限、編集権限を継承するようにした
- ベースページ等の各ページを読んでパースするループ部分を改良した