フォームを記述するためのプラグイン
テキスト入力
- formtext
CardFormプラグイン:text formを作ります。
- 第1引数はコントロール名となります。
- 第2引数以降は名前=値形式のオプションとなります。
- 値にダブルクォーテーション(")は必要ありません。
- オプションとして指定できるのは初期値(value)とサイズ(size)です。
記述例
{{formtext name,value=hoge,size=10}}
出力
<input type="text" name="name" value="hoge" size="10">
This is way more helpful than antyhing else I've looked at.
テキストエリア
- formtextarea
CardFormプラグイン:textarea formを作ります。
- 第1引数はコントロール名となります。
- 第2引数以降は名前=値形式のオプションとなります。
- 値にダブルクォーテーション(")は必要ありません。
- オプションとして指定できるのはrows、colsとwrapです。
- このプラグインは初期値を指定できません。
記述例
{{formtextarea name,rows=20,cols=10,wrap=virtual}}
出力
<textarea name="name" rows="20" cols="10" wrap="virtual"></textarea>
I like to party, not look artielcs up online. You made it happen.That's the smart thikning we could all benefit from.
リストボックス
- formselect
CardFormプラグイン:select formを作ります。
- 第1引数はコントロール名となります。
- 第2引数以降に名前=値形式のオプションが置けます。
- 値にダブルクォーテーション(")は必要ありません。
- オプションとして指定できるのはサイズ(size)です。
- 残りの引数がリスト値となります。
- *で始まる値がselectedとなります。
記述例
{{formselect name,size=10,value1,value2,*value3}}
出力
<select name="name" size="10"> <option value="value1">value1</option"> <option value="value2" selected>value2</option"> <option value="value3">value3</option"> </select>
リセットボタン
- formreset
CardFormプラグイン:reset formを作ります。
- 第1引数は値(表示文字)となります。省略できます。
記述例
{{formreset clear}}
出力
<input type="reset" value="clear">
送信ボタン
- formsubmit
CardFormプラグイン:submit formを作ります。
- 第1引数は値(表示文字)となります。省略できます。
- 第2引数以降は名前=値形式のオプションとなります。
- 値にダブルクォーテーション(")は必要ありません。
- オプションとして指定できるのは名前(name)です。
記述例
{{formsubmit send,name=namae}}
出力
<input type="submit" value="send" name="namae">
日付入力用フォーム
- formdatepicker
CardFormプラグイン:datepicker formを作ります。
- 第1引数はコントロール名となります。
- 第2引数は日時の形式となります。
- y 年を表します。"yy"で下2桁となります。
- m 月を表します。"mm"で2桁表示となります。
- d 日を表します。"dd"で2桁表示となります。
- H 時を表します。"HH"で2桁表示となります。
- M 分を表します。"MM"で2桁表示となります。
- S 秒を表します。"SS"で2桁表示となります。
- 第2引数を省略時は"y/m/d"となります。
- 第3,第4引数は年の範囲となります。
- 第3,第4引数が+または-で始まる場合は今年からの相対値です。
- 通常時の初期値は現在日時となりますが、修正フォーム時は前の値が初期値と なります。ただし、第5引数が"SetNow"の場合は修正フォームでも現在日時と なります。
記述例
{{formdatepicker name,y/m/d,-5,+5,SetNow}}
Thanks for writing such an eao-rtsyunde-stand article on this topic.
保存されているデータを表示するプラグイン
数を数える
- cardcount
CardFormプラグイン:条件にマッチしたデータ数を求めます。
- 第1引数にベース名を指定します。
- 第2引数以降に条件式を指定できます。 省略した場合は全てのデータ数となります。
- 第2引数に条件式以外がある場合、前版のCardCount互換モードになります。 この場合、第2引数をラベル名、第3引数を値とみなし「第2引数==第3引数」と 解釈します。
- ベースページが存在するが参照権限がない場合は文字を返しません。
{{cardcount ベース名,ラベル名==値,ラベル!=値,...}} {{cardcount ベース名,ラベル名,値}}
条件式は以下が使えます。
- ラベル名==値
- ラベル値と値が等しければ真
- ラベル名!=値
- ラベル値と値が等しくなければ真
- ラベル名<=値
- ラベル値が値以下であれば真
- ラベル名>=値
- ラベル値が値以上であれば真
- or
- 式は通常andで接続されますが、この前と後の式はorで接続します。 and接続より優先順位は低くなります。
演算子の種類が限られていますが、以下のような形で対応してください。
- ラベル名>値
- ラベル名>=値,ラベル名!=値
- ラベル名<値
- ラベル名<=値,ラベル名!=値
- ( A or B ) and C
- A and C or B and C
- not ( A or B )
- not A and not B
- not ( A and B )
- not A or not B
- not ラベル名==値
- ラベル名!=値
- not ラベル名!=値
- ラベル名==値
- not ラベル名>=値
- ラベル名<=値,ラベル名!=値
- not ラベル名<=値
- ラベル名>=値,ラベル名!=値
数を合計する
- cardsum
CardFormプラグイン:条件にマッチしたデータの合計を求めます。
- 第1引数にベース名を指定します。
- 第2引数に合計するラベル名を指定します。
- 第3引数以降に条件式を指定できます。 省略した場合は全てのデータの合計となります。
- ベースページが存在するが参照権限がない場合は文字を返しません。
{{cardsum ベース名,ラベル名,ラベル名1値,ラベル名2!=値,...}}
条件式についてはCardCountを御覧ください。
There is a critical shortage of inotrmafive articles like this.
使用方法全般と記述例
- 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においてベースページが存在するが参照権限を持たない 場合はエラー扱いとして文字を返さない
- 新規にページを作成した場合、ベースページが存在していれば、 その参照権限、編集権限を継承するようにした
- ベースページ等の各ページを読んでパースするループ部分を改良した
最終更新時間:2015年12月18日 01時30分06秒