トップ 一覧 検索 ヘルプ RSS ログイン 印刷

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においてベースページが存在するが参照権限を持たない 場合はエラー扱いとして文字を返さない
  • 新規にページを作成した場合、ベースページが存在していれば、 その参照権限、編集権限を継承するようにした
  • ベースページ等の各ページを読んでパースするループ部分を改良した