CardForm:カード型データベースのためのプラグイン群 !!!CardFormプラグイン全般について !!内容 FreeStyle Wikiでカード型データベースを実現するプラグイン群です。 :入力:プラグインにより(wiki書式の範囲で)自由なレイアウトのフォームを作ることができます。 :保存:フォームにより入力されたデータは雛型となるページを元に1件毎に、バグトラックのようなbasename/数字というページとして保存されます。 :利用:basename/数字形式のページ群をカード型データベースとみなして表を作ったり合計したりできます。 !!beta版を公開しました 色々手を加えようと思っていましたが実質beta状態でしたので、今更ですがbeta版と位置付けます。 !!インストール 以下のファイルを取得してプラグインディレクトリに展開してください。 * {{ref cardform4beta1.zip}} !!使用方法1:簡単な例 まず、データ入力用のフォームが必要です。 !form*プラグインによるフォームの記述 フォームの記述はformで始まるフォーム記述用のプラグインによって行ないます。 *名前: {{formtext name}} *年代: {{formselect age,10代,20代,30代,40代,50代}} *好きな物: {{formtext favor,size=30}} {{formsubmit 投票}}{{formreset リセット}} これを[[Favorite]]というページに保存します。 え?フォームが表示されない?それで正常です。慌てずに。 !cardformプラグインによるフォームの表示 次にフォームを表示したい所に以下のように書きます。 {{cardform Favorite}} これで、フォームを表示するためのプラグインcardformにより、 先ほどのフォームを記述したページをインクルードしフォームとして表示します。 !データの入力 {{cardform Favorite}} 先ほどのフォームに値を記入して投票ボタンを押してください。 そうすると[[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}} {{cardform BugTrackForm,BugTrack-test}} !!使用方法3:入力データを利用する 入力されたデータの利用方法です。 !入力データの一覧表示 利用方法1のフォームから入力した値を一覧表示するには次のように書きます。 {{cardlist Favorite,名前:*名前: ,年代:*年代: ,好きな物:*好きな物: ,}} {{cardlist Favorite,名前:*名前: ,年代:*年代: ,好きな物:*好きな物: ,}} 20代のデータのみ、名前順に表示したい場合は次のように書きます。 {{cardlist Favorite,*年代: ==20代,%sortby_alphabet%:*名前: ,名前:*名前: ,年代:*年代: ,好きな物:*好きな物: ,}} {{cardlist Favorite,*年代: ==20代,%sortby_alphabet%:*名前: ,名前:*名前: ,年代:*年代: ,好きな物:*好きな物: ,}} わかりにくいですね。実はこの方法は推奨できません。 入力データを扱う場合は利用方法2の保存レイアウトを別にする方法を用いた方が わかりやすくなります。 利用方法2の場合、次のようになります。 {{cardlist BugTrack-test,%sortby_alphabet%:stat,ページ:%cardlist_pagename%,カテゴリ:category,優先度:rate,状態:stat,投稿者:user,サマリ:subject}} {{cardlist BugTrack-test,%sortby_alphabet%:stat,ページ:%cardlist_pagename%,カテゴリ:category,優先度:rate,状態:stat,投稿者:user,サマリ:subject}} 最初の「BugTrack-test」はBugTrack-test/数字ページが対象で、 そのフォーマットはページBugTrack-testが元になっている事を示しています。 次の「%sortby_alphabet%:stat」はstatをアルファベット順 (正確には文字コード順)にソートするという事です。 次の「ページ:%cardlist_pagename%」からは実際の表示内容です。 この時、%cardlist_pagename%はページ名を表します。 !入力件数の表示 利用方法1で「20代の件数/全体の件数」という表示をしてみましょう。 {{cardcount Favorite,*年代: ==20代}}/{{cardcount Favorite}} {{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==低}}件です 現在全{{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においてベースページが存在するが参照権限を持たない場合はエラー扱いとして文字を返さない *新規にページを作成した場合、ベースページが存在していれば、その参照権限、編集権限を継承するようにした *ベースページ等の各ページを読んでパースするループ部分を改良した