トップ 新規 編集 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

PluginHelp

フォームを記述するためのプラグイン

 テキスト入力

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秒