Help/フォーム
以下はまだ書きかけで未完成です。
form.pl、form.cgiを利用したフォームの作成設置利用についての説明ページです。
結構な分量ありますが、あくまでこのページは分からなくなった時のリファレンス、辞書のようなもので、辞書を丸暗記する人はいませんし、必要に応じて都度見て貰えばいいと思います。
2020 一時的対応
修正しまくったり、Niftyのサーバ変えたりで収拾つかなくなってます(^^;)。今は整理する時間無いので、何かいじった時はとりあえずこちらに書きます。
というわけで、2020-02レシーブパーツを追加したので書いてる次第(^^;)。
レシーブ整形用クエリー置き換えパーツ
trword (2020-02新規追加)
%trword 置き換え元文字,置き換え先文字%
フォームで送信された文中の文字を指定文字で置き換えるレシーブ用フィルタ。引数指定した文字(置き換え元文字)が含まれている時は置き換え先文字でそれを置き換える。画面上には出ないので、どこに書いてもOK。複数設置可能。処理雑でCGIエラーが出る事も
- 置き換え元文字
- 置き換える元の文字。省略不可。半角鍵括弧「[ ]」使う場合は前にエスケープ付ける事
- 置き換え先文字
- 置き換える先の文字。省略した場合は削除。半角鍵括弧「[ ]」使う場合は前にエスケープ付ける事
フォームCGIについて概要
Wikiで書き込む場合は、ページ編集画面にして出てきたフィールドに文字を書き込めば良い。
しかし、Wikiに慣れていない者は編集に手を出しづらい、管理者の設定により編集を制限しているがコメントは受け付けたい、定形で文章を追加させていきたい、閲覧者がコメントを残す程度なら編集を使わず簡単に書き込めないか等の考えから、書き込みフォーム(掲示板)を設置するcommentプラグインやbbsプラグインというものが用意されている。
例えば簡易なコメント掲示板を設置出来るcommentプラグインなら、
{{comment}}
とWiki中に書くだけで、名前、コメント、送信ボタンの投稿フォームが表示され、フォームに文字を書き入れて送信すれば、Wiki編集画面にいく事なく書き込んだ名前やコメントがWikiページに追加保存される。
commentプラグインはこのように簡単で非常に使いやすいのだが、フォームの形は決められていて、簡易である分多様なニーズに応える事は出来ない(例えばメール欄が欲しい等)。なので自分のニーズに合わせCGIを改造してフォームを増やすという事をしている人もいるはず(私も改造して色々なフォームを作った)。
けれどそうやって改造を繰り返しフォームのパターンを増やすと、プラグインのスクリプト構造は複雑化し、増大してしまう。
そこで、フォームを生成するのにCGI内でフォームの形を予め決めておくのでなく、
- 「フォームの形を決めるWikiページ」を用意する (例えば、名前、コメント、メール欄があるフォームを作る、というような事を書いておく)
- フォームを使って送信されたデータの「整形表示パターンを決めるWikiページ」を用意する (例えば、最初の行に名前、次の行にメール、最後の行にコメントという表示にする、というような事を書いておく)
- フォームを設置したいページにformプラグインを書き、その引数で「フォームの形を決めるWikiページ」「整形表示パターンを決めるWikiページ」を指定する。すると「フォームの形を決めるWikiページ」に沿った形のフォームが表示され、そのフォームで書き込むと「整形表示パターンを決めるWikiページ」に沿った形で整形されてページに書き込まれる
という流れにしようというのが、この「form.pl」(formプラグイン)、「form.cgi」の役割である。
これを導入する利点としては以下のような事がある。
- CGIを書き換えて新しいフォーム形式を追加をする必要がなくなり、CGIをいじる面倒さやトラブルから解放され、CGIのスクリプト増加もなくなる
- CGIなど分からなくとも、Wiki利用者自身でフォームや整形ルールを追加出来、幾らでもフォームの種類を増やせる
利用は掲示板に留まらず、データ追加等様々で活用出来ると思う。
独り言?
開発中の話ですが、時間が経っていて今となっては読んでもあまり意味ないので非表示にしときます。この先ここに追加する事はありません。
フォーム利用までの流れ
フォーム作成者
- フォームの形となるフォーム用Wikiページを作成、もしくは既存のフォーム用Wikiページから選択
- フォームから送られたクエリーを整形して保存するフォームレシーブ整形用Wikiページを作成、もしくは既存のフォームレシーブ整形用Wikiページから選択
- それらページ等を指定したformプラグインをページ内に設置
フォーム利用者
- formプラグインによってWikiに表示されたフォームを利用し、記入や選択して送信
- 送信内容はform.cgiに送られ、設定されたフォームレシーブWikiページに応じた形で整形されてページに反映、追加保存される
代表的な書式形式サンプル
以下の3つのページを用意する事で例えば掲示板を設置利用出来ます。
フォーム生成用Wikiページ
お名前:{{formtext name}} コメント:{{formtext message}} {{formsubmit 送信}}
レシーブ整形用Wikiページ
*%message% - %name% (%time%)
フォーム設置Wikiページに書くformプラグイン
{{form フォーム生成用Wikiページ名,レシーブ整形用Wikiページ名,フォーム名(ID),設置ページ名}}
formプラグイン
Wikiにフォームを設置するにはformプラグインを使います(FSWiki(Lite)で使われているcommentプラグイン、bbsプラグインに該当)。プラグインの引数で、フォーム用Wikiページやレシーブ用Wikiページを指定する事で、それに応じたフォームの形、フォームから送られた内容の整形ルールを決める事が出来ます。
構文
{{form フォーム用Wikiページ名,レシーブ用Wikiページ名,フォーム名(ID),設置ページ名,戻りページ名}}
- フォーム用Wikiページ名
- フォーム生成用に用意されたWikiページ名を指定。指定したWikiページの内容でフォームの形(送信可能なクエリー)が決まる。省略不可
- レシーブ用Wikiページ名
- フォームからの送信を整形するためのレシーブ用Wikiページ名を指定。指定したWikiページの内容で保存する形(受信可能なクエリー)が決まる。省略不可
- フォーム名(ID)
- フォームに付ける任意の名前。省略不可。フォームから書き込んだものを保存する位置はフォームに付けられた名前をチェックして決められるので、他のフォームとバッティングしない固有の名前を付ける必要がある(formプラグインのページ名引数等とも被らないように付ける方が無難)
- 設置ページ名
- formプラグインを設置するWikiページ名。省略した場合は自動的に設置ページ名を取得するが、なるべく自分で付けておいた方が無難。ページをインクルード(内包)して使う際に書き込まれる場所が狂わないよう付ける必要がある
- 戻りページ名
- フォームから送信した後に移動するWikiページ名(通常はフォーム設置ページに戻る)。省略した場合は自動的に設置ページ名を取得するが、なるべく自分で付けておいた方が無難かも。書きこんだ後別のページに移動させたいとか、ページをインクルードして使う際実際にフォームがあるページではないページに移動させたい等に使える (Bページにフォームを設置し、Aのページの中にBページをインクルード表示するとあたかもAページにフォームがあるように見えるが、フォームで書き込むと実際フォームがあるBページに移動してしまうので、そういった際にBでなくAページに移動させたいという時など)
commentプラグイン等では通常、フォームから送信した文の保存位置は「フォームの前後」か「ページ下(tail)」に限られるが、このプラグインではページの任意の位置に書き込む(追加保存する)事も可能です。
任意の位置に書き込みたい場合は以下の事をする必要があります。
- formプラグインでのフォーム名(ID)の引数を「//〜〜〜」とする
- 例
- //質問フォーム1
- フォームからの送信内容を保存表示させたい場所に「//form 〜〜〜」というコメント行を書く(コメント行のため、書いたコメント行自体は画面上には表示されない)
- 例
- //form 質問フォーム1
このようにすると、フォームの位置にとらわれず、そのコメント行のある位置にフォームから送信された文が書き込まれていきます。
通常のcommentプラグインでは、書き込み順をnormalにするとフォームの上に「下から新しい順」で書き込みが追加されていき、reverseにするとフォームの下に「上から新しい順」で追加されていきます。normalだと書き込まれる程にフォームが下がっていってしまい使いづらくなる事がありますが、この機能を使えばその問題を解消する事が出来ます。
ここより下はフォーム用Wikiページの作成説明となります
formプラグインは「指定したフォームをここに設置する」という命令を出しているに過ぎません。上にも書いたように、実際にフォームを利用するには「フォーム生成用Wikiページ」「フォーム整形用Wikiページ」を作る必要があります。
詳しい書き方、パーツについては以降に書かれた文章を参照して貰うとして、流れや書き方を簡単に説明しておきます。
フォーム生成用Wikiページの作成
- 新規でページを作る (IOのページタイトルの付け方は「form/〜〜〜」)
- 説明や設置したいパーツをルールに沿って書く (フォームに関するもの以外はなるべく書かない方が良い)
- 例えば、簡易掲示板であれば「名前」「コメント」「送信ボタン」があればよく、以下のような感じで書けば良い
お名前:{{formtext name}} コメント:{{formtext message}} {{formsubmit 送信}}
フォーム整形用Wikiページの作成
- 新規でページを作る (IOのページタイトルの付け方は「formrec/〜〜〜」)
- フォーム生成用Wikiページに書いたクエリー(上で言えば「name」「message」)をルールに沿って表示させたいレイアウトで配置して書く。送受信するクエリー以外にも投稿時間表示など色々パーツがあるので、必要ならそれらも書く
- 例えば下のような感じで
*%message% - %name% (%time%)
するとフォームからの書き込みが下のような感じで表示される事になります。
- こんにちは - IO (2006年11月08日 15時11分37秒)
一回慣れてしまえばそう難しいものではないと思います。
クエリー用ネーム
このCGIでは、フォームの送受信でやりとりするクエリー名 (テキストフィールドに付ける名前等)は決められたものしか使用出来ない仕様となっています (CGI内でルールに沿って様々な変換を行うため・受け取ったクエリーの全てを展開という事もやれば出来るんでしょうがめんどいので(^^;))。
以下を参考にして、目的にあったものを使用して下さい (クエリーによっては特殊な変換を行うものもありますので、それも考慮して)。名前だけを見てもよく分からないでしょうから、詳しくはそれぞれの説明をご覧下さい。
現在使用可能なクエリーネーム
「name」「title」「message」「urltitle」「url」「mail」「id」「pass」「q1」〜「q20」「random1」〜「random10」「wikipage」「subject」「category」「user」「rate」「stat」「date」「spam1」「spam2」「spam3」
- 「name」について。「date picker用1行テキストフィールド」を実現するためにJavaScript「calendarlay.js」を利用していますが、フォーム中にnameというクエリー(例えば <input type="text" name="name"> 等というようなフォームパーツ)があると「calendarlay.js」が上手く働かないようで(MacのFirefoxで確認)。これを解決するため、以下のような変換を自動で行っています。自動的な処理なので、使う側は意識する必要は全くありませんが、htmlソースを見て、変だなと思う人がいるかもしれないので、一応説明しておきます
- フォーム用Wikiページ内で「name」というクエリーを使う → form.pl(formプラグイン)を通してフォーム用Wikiページからフォームを生成する際、「name」というクエリーを使っていたら「namae」というクエリーに変換する → 利用者によってフォームが使われクエリーが送信される → form.cgiが送信されたクエリーとレシーブ用Wikiページを使って書き込み(送信内容)を整形して保存する → 整形する際、レシーブ用Wikiページに「name」というレシーブパーツがあって、「namae」というクエリーが送られていたら、「name」のところを「namae」クエリーの内容に置き換える
現在使用不可能なクエリーネーム (hidden要素として既に使われているもの)
以下の名前をあえて使って置き換える事も可能かもしれませんが、その場合動作がおかしくなる可能性があります
「page」「backpage」「spamf1」「spamf2」「spamf3」「formname」「rectype」
追加予定クエリーネーム
無し
フォーム生成用パーツ
基本的には「{{」と「}}」で囲んだものがパーツとなり、それ以外はそのまま画面表示される。パーツではパーツタイプとクエリー名等の設定を指定する(パーツによって設定がないもの、逆に複数設定出来るものがある)。タイプと設定の間は半角スペースで間をあけ、複数設定する場合はカンマで分ける(プラグインの構文の書き方と一緒)。
{{タイプ 各種設定}} お名前:{{formtext name,10}} コメント:{{formtext message,40}} {{formsubmit 送信}}
注意:フォームには必ず「message」か「url」のクエリー名が付いた項目を入れなければならない。ページ名(基本的には必ず自動的に送信される)と、「message」もしくは「url」のクエリーが受け取れない場合は書かれず送信されたと判断して記録保存されない仕様なので
クエリー送信関係パーツ
送信ボタン
{{formsubmit}} {{formsubmit value}} 例: {{formsubmit 送信}}
- value
- ボタンに表示する文字。省略時「実行」
リセットボタン
{{formreset}} {{formreset value}} 例: {{formreset リセット}}
入力内容をキャンセルし初期化するボタン
- value
- ボタンに表示する文字。省略時「リセット」
1行テキストフィールド
{{formtext name}} {{formtext name,size,max,value}} 例: {{formtext message,20,100,メッセージはこちらへ}}
- name
- クエリー名。省略不可。付けられる名前についてはクエリー用ネームの説明参照
- size
- フィールド幅サイズ。数値のみで指定
- max
- 送信出来る最大文字数。数値のみで指定
- value
- フィールドに挿入しておく初期値(文字)
date picker用1行テキストフィールド
{{formdate name}} {{formdate name,表示パターン}} 例: {{formdate name,mm月dd日}}
テキストフィールドをクリックすると、カレンダーがレイヤー表示され、カレンダーから選択した日付をフィールドに入力出来る(入力後の編集も可能)。
この機能を使うにあたって幾つか注意が。
- 実際に機能させるには、ブラウザ側でJavaScriptを使用出来るようにしていなければならない。
- この機能を実現するために、高橋登史朗さんが作り、角田桂一さんが改良したJavaScript「calendarlay.js」「HolidayChk.js」を利用していて、Wiki管理者はそれらをサーバにアップし、setup.plでJavaScriptの置き場所を設定する必要がある(詳しくはform.pl内の説明を参照)。
- name
- クエリー名。省略不可。付けられる名前についてはクエリー用ネームの説明参照
- 表示パターン
- 表示させるパターン。「yyyy」が年、「mm」が月、「dd」が日、「曜」が曜日となっていて、年月日や「/」等挟んだ任意のパターンに出来る、はず(^^;)テストしてなかった(後でテストします)。例えば「mm月dd日」や「yyyy/mm/dd (曜)」といった風に書く
パスワードフィールド
{{formpass name}} {{formpass name,size,max,value}} 例: {{formpass pass,20,20}}
フォームのパスワードは入力時の表示が隠されるだけで、送受信時に暗号復号化はされない。あくまで簡易な認証に利用するという位置づけ。
- name
- クエリー名。省略不可。付けられる名前についてはクエリー用ネームの説明参照
- size
- フィールド幅サイズ。数値のみで指定
- max
- 送信出来る最大文字数。数値のみで指定
- value
- フィールドに挿入しておく初期値(文字)
テキストエリアフィールド
{{formtextarea name}} {{formtextarea name,size,max,value}} 例: {{formtextarea message,20,20}}
- name
- クエリー名。省略不可。付けられる名前についてはクエリー用ネームの説明参照
- cols
- フィールド横幅。数値のみで指定
- rows
- フィールド高さ(行数)。数値のみで指定
- wrap
- 幅以上になった際の自動改行のタイプ。「hard」もしくは「physical」(自動改行、送信内容でも改行維持)、「soft」もしくは「virtual」(自動改行、送信内容では改行無効)、「off」(改行無し・スクロールバー表示)の中から指定
セレクトメニュー
{{formselect name,option}} {{formselect name,option,option,option,option,option,・・・}} 例: {{formselect title,質問,意見,提案,情報}} {{formselect title,質問:question,意見:opinion,提案:suggestion,情報:information}}
ブルダウン式の選択メニュー。選択した項目がクエリーとして送信される
- name
- クエリー名。省略不可。付けられる名前についてはクエリー用ネームの説明参照
- option
- メニュー項目。最低一つは必要で、カンマで区切って幾つでも追加可能。「A:B」の形で書いた場合、Aの部分がメニュー状の名前、Bの部分が選んだ際に実際に送信されるvalueとなる (例えば「質問:question」なら、メニューにある「質問」を選択すると「question」の文字がクエリーとして送信される)
リスト形式メニュー、selected、multipleについては現在未実装
チェックボックス
{{formcheck name,value}} {{formtcheck name,value,checked}} 例: {{formcheck q1,りんご,c}}{{formcheck q1,みかん}}{{formcheck q1,バナナ}}
チェックボックスを表示する。
- name
- クエリー名。省略不可。付けられる名前についてはクエリー用ネームの説明参照。同じ選択肢グループには同じ名前を付けること
- value
- 選択時に送信される文字。省略不可
- checked
- 最初から選択された状態にしたい時に指定。引数の内容は何でも構わない(分かりやすくcとか)
ラジオボタン
{{formradio name,value}} {{formtradio name,value,checked}} 例: {{formradio q1,りんご,c}}{{formradio q1,みかん}}{{formradio q1,バナナ}}
ラジオボタンを表示する。
- name
- クエリー名。省略不可。付けられる名前についてはクエリー用ネームの説明参照。同じ選択肢グループには同じ名前を付けること
- value
- 選択時に送信される文字。省略不可
- checked
- 最初から選択された状態にしたい時に指定。上のチェックボックスと違って、一つしか選べないラジオボタンの性質上、同じ選択肢グループからは一つしか付けてはいけないので注意(複数選択されてないかのチェックはしてません)。引数の内容は何でも構わない(分かりやすくcとか)
hidden
{{formhidden name,value}} 例: {{formhidden title,質問用フォーム}}
自動的に送信される隠しクエリー要素。
- name
- クエリー名。省略不可。付けられる名前についてはクエリー用ネームの説明参照
- value
- 送信する値。省略不可
まだ未実装だが、決められたvalueと共に末尾に自動的に数字(ディレクトリを探って低い順で存在しない数字とか)や保存日時等が付く機能もそのうち用意するかも
フォーム生成専用の特殊クエリー名
テキストフィールドやセレクトメニュー等に以下のクエリー名を付けた場合に(例えばformtextのnameの引数を「spam1」にする)、送られたクエリーの値に応じて専用の処理が行われるもの。主にスパム対策等に利用する
spam1
このクエリーの値が「ok」以外だとスパムと見なされ、エラーとし、記録させない。テキストフィールド、セレクトメニュー等で使用可能。実際使う際は説明か質問文を前に書いて使う事になる
●テキストフィールドの場合
フィールドにokという文字を打って送信しないとスパムと見なされる。
{{formtext spam1}}
実際例 (英語スパムを考え、わざと説明文も「ok」でなく「オーケー」としてある)
スパム対策:半角英小文字で「オーケー」を記入して下さい{{formtext spam1}}
●セレクトメニューの場合
okのメニュー項目(option)を選ばないとスパムと見なされる。valueでチェックするのでメニュー項目名はどんなものでも良い。スパムでないと判断するoptionは「value」を「ok」とする(「ok」以外はスパムと判断)。メニューの項目数は幾つでも良い。
{{formselect spam1,項目1:out,項目2:ok }}
実際例
スパム対策:問題なしを選択して下さい{{formselect spam1,問題あり:out,問題なし:ok}}
スパム対策:ワンワン鳴くのは?{{formselect spam1,ネコ:out,イヌ:ok,ウシ:out}}
spam2
このクエリーの値が「今月を表す半角数字」以外だとスパムと見なされ、エラーとし、記録させない。送信がもたついて月が切り替わっても大丈夫なよう、一月分余裕を持たせてある(つまり実際には今月か翌月を表す数ならOKとなる)。テキストフィールド、セレクトメニュー等で使用可能。実際使う際は説明か質問文を前に書いて使う事になる
●テキストフィールドの場合
今月を表す半角数字を打って送信しないとスパムと見なされる。
{{formtext spam2}}
実際例
スパム対策:今何月か半角数字で記入して下さい{{formtext spam2}}
●セレクトメニューの場合
メニュー項目(option)から今月を選ばないとスパムと見なされる。
実際例
スパム対策:今何月?{{formselect spam2,1,2,3,4,5,6,7,8,9,10,11,12}}月
spam3
このクエリーの値が「今日を表す半角数字」以外だとスパムと見なされ、エラーとし、記録させない。送信がもたついて日が切り替わっても大丈夫なよう、一日分余裕を持たせてある(28日〜31日は処理が面倒なので一緒の扱いにしてある(^^;))。テキストフィールド、セレクトメニュー等で使用可能。実際使う際は説明か質問文を前に書いて使う事になる
●テキストフィールドの場合
今日を表す半角数字を打って送信しないとスパムと見なされる。
{{formtext spam3}}
実際例
スパム対策:今日は何日か半角数字で記入して下さい{{formtext spam3}}
●セレクトメニューの場合
メニュー項目(option)から今日を選ばないとスパムと見なされる。
実際例 (横にはみださないよう、例では実際と異なり途中で改行して二段になってます)
スパム対策:今日は何日?{{formselect spam3,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 ,16,17,18,19,20,21,22,23,24,26,27,28,29,30,31}}日
フォーム生成専用の表示用パーツ
フォームの表示を多彩にする、使いやすくするためのもの。下のを使わなくとも普通にWiki書式、プラグイン構文で書いたものであっても多分大丈夫だとは思うが一応用意 (spanやbrなどは改造してそれらを導入してない通常のFSWikiLiteでは利用出来ないため)
現在日時表示
{{formtime}} {{formtime kan}}
現在の日時を表示する。月日を送信する必要がある「spam2」「spam3」のヒント用などとして使用。{{formtime kan}}とした場合、漢数字で日時表示する
span
{{formspan style,文字}} 例: {{formspan color:red;,注意!}}
spanタグを使用して、大きさや色など修飾をした文字等を表示する。
- style
- style属性。例えばフォントサイズをlargeにしたいなら「font-size:large;」、赤い文字にしたいなら「color:red;」という具合に (複数同時指定可能)
- 文字
- 修飾させたい文字
イメージ
{{formimage URL}} 例: {{formimage http://www.google.com/logos/Logo_25wht.gif}}
URLで指定したイメージを表示する
- URL
- 画像のURL。省略不可。httpから指定。gif、jpg、jpeg、pngのみ使用可能
リンク
{{formlink URL}} 例: {{formlink http://hpcgi3.nifty.com/%7Eio/fswiki-l/wiki.cgi}} {{formlink http://hpcgi3.nifty.com/%7Eio/fswiki-l/wiki.cgi:ANA-NOTE}}
リンクを表示。クリックすると新規ウインドウでリンク先を表示する
- URL
- リンクするURL。省略不可。httpから指定。「A:B」の形で書いた場合、Aの部分がURL、Bの部分が画面上に表示されるリンク文字となる (例えば「http://hpcgi3.nifty.com/%7Eio/fswiki-l/wiki.cgi : ANA-NOTE」なら(実際と異なりスペース入れてあります)、ANA-NOTEという風になる)
改行
{{br}}
改行する
レシーブ整形用Wikiページ パーツ
レシーブ整形用Wikiページは、
- フォームから送信された文字等(クエリー)と置き換わるパーツ(基本的には「%」と「%」で囲む)
- それ以外に表示させたい(加えて保存させたい)文字(例えばWikiで見出しとなる「!」やリストとなる「*」を加えたり、プラグイン構文を書き加えたり)
から成る。表示させたい項目を表示させたいレイアウトで書く(Wikiソース)。
当然ながら、フォームに無いクエリーはレシーブ側に反映されないし、逆に、フォームからクエリーを送信してもレシーブ側でそのクエリーを配置してなければ表示しないので注意。
レシーブ整形用Wikiページに書く簡単な一例:
*%message% - %name% (%time%)%reverse%
こう書くと送信された文字をこれに当てはめて整形し、送信された文字が下のように表示される
・こんにちは - IO (2006年10月03日 18時58分12秒)
レシーブ整形用パーツの基本
基本的にはフォームから送信された文字(クエリー)とパーツが置き換わる。
例えば、フォームに「title」と名付けた(クエリー指定した)テキストフィールドがあって、そこに記入して送信した場合、レシーブ整形用ページ中に %title% とあれば、%title%の部分が送られてきた文字(titleクエリー)に置き換わって保存される。
レシーブ整形用ページ中で、パーツの区切りとしてでなく「%」を使いたい場合は「%per%」と表記する事。
レシーブ整形用クエリー置き換えパーツ (ABC順)
category
%category% %category pl%
「category」クエリーと置き換わる。 %category pl% とすると (「pl」となっているが、引数は今のところ何でも良い)、クエリーをカテゴリー名にしたcategoryプラグインに置き換わる。
categoryプラグインを使いたいなら、下のように直接プラグイン構文を書くのでも良い (categoryプラグインの他の設定もしたい時等は)。
{{category %category%}}
id
%id%
「id」クエリーと置き換わる。
%mail% %mail pl%
「mail」クエリーと置き換わる。%mail pl% とすると (「pl」となっているが、引数は今のところ何でも良い)、BugTrack-plugin/117のmailtoプラグインに置き換わる (勿論BugTrack-plugin/117を導入していないWikiでは機能しない)。
mailtoプラグインを使いたいなら、下のように直接プラグイン構文を書くのでも良い (mailtoプラグインの他の設定もしたい時等は)。
{{mailto %mail%}}
message
%message% %message 文字%
「message」クエリーと置き換わる。
- 文字
- 「message」クエリーが送信されていない時に置き換える文字 (例えば、%message コメント省略% としたら、messageクエリーが送信されていない場合は「コメント省略」となる)
name
%name% %name 文字%
「name」クエリーと置き換わる。 (プラグインで生成されたフォームのhtmlソースを見ると、「name="name"」と設定した場合は「name="namae"」と(「namae」クエリーと)変わっていますが、レシーブでの指定はフォーム用Wikiページでの指定と同じくnameでOKです)
- 文字
- 「name」クエリーが送信されていない時に置き換える文字 (例えば、%name 名無しさん% としたら、名前(nameクエリー)が送信されていない場合は「名無しさん」となる)。「time:」とすると現在日時を表す数値(time関数の秒数値)に置き換えられる
%name time:%
pass
%pass% %pass パスワード%
「pass」クエリーと置き換わる。%pass パスワード% の形で引数を設定すると、クエリーの置き換えではなくて「pass」クエリーと引数で設定したパスワードを照合して同じでないならエラーとして書き込めない機能となる。
レシーブ整形用ページの該当部分を見られてしまえばパスワードは丸分かりとなってしまうが、レシーブ整形用ページの参照にパス制限を付けておく事で一応は保護出来る (ノーマルのFSWikiLiteにはそのようなパス制限機能はないので出来ません・IOが改造したFSWikiLiteではパス制限機能があります)。
- パスワード
- 「pass」クエリーと照合させるパスワード。パスワードが異なっていたら、エラーで書き込み出来ない。パスワードを設定した場合はクエリーの置き換えはせず、何も表示しない
q1 〜 q20
%q1% 〜 %q20%
「q1」〜「q20」クエリーと置き換わる。様々なクエリー送受信用途に使えるよう、20個分確保されている。
random1 〜 random10
%random1% 〜 %random10%
「random1」〜「random10」クエリーと置き換わる。といってもそのまま置き換わるわけではなく、送信された「random1」〜「random10」クエリーをランダムシャッフルして置き換える。フォームとレシーブのクエリー数が必ず同数である必要はないが、「random1」クエリーは必ず配置しなければならず、「random1」クエリーがフォームから送信されていないと機能しない。
rate
%rate%
「rate」クエリーと置き換わる。
stat
%stat%
「stat」クエリーと置き換わる。
subject
%subject%
「subject」クエリーと置き換わる。
title
%title% %title 文字%
「title」クエリーと置き換わる。
- 文字
- 「title」クエリーが送信されていない時に置き換える文字 (例えば、%title タイトル省略% としたら、titleクエリーが送信されていない場合は「タイトル省略」となる)
url
%url% %url 文字%
「url」クエリーと置き換わる。
- 文字
- 「url」クエリーが送信されていない時に置き換える文字 (例えば、%url http://ana.na.coocan.jp/% としたら、urlクエリーが送信されていない場合は「http://ana.na.coocan.jp/」となる)
Wikiのリンク書式に整形して使う事がありえ、その場合の書き方は以下の通り。
●URLを任意の文字で置き換えリンクしたい場合
[任意の文字|%url%]
●URLを「urltitle」クエリーで置き換えリンクしたい場合
[%urltitle%|%url%]
●URLを任意の文字で置き換え、リンク先を新規ウインドウで開きたい場合
- new_windowプラグイン使用(BugTrack-plugin/117)
{{new_window %url%,任意の文字}}
- IO独自のWiki改造仕様(リンク書式でURL最後に@@を付けると新規ウインドウで開く)
[任意の文字|%url%@@]
●URLをurltitleクエリーで置き換え、リンク先を新規ウインドウで開きたい場合
- new_windowプラグイン使用
{{new_window %url%,%urltitle%}}
- IO独自のWiki改造仕様(リンク書式でURL最後に@@を付けると新規ウインドウで開く)
[%urltitle%|%url%@@]
urltitle
%urltitle%
「urltitle」クエリーと置き換わる。もしも「urltitle」クエリーが送信されていなくて「url」クエリーが送信されている時は、「url」クエリーで送信された文字が「urltitle」クエリーにも自動的に適用される。
user
%user%
「user」クエリーと置き換わる。
wikipage
%wikipage%
フォームで新たにページを作った際のページ名と置き換わる。レシーブ整形用ページにmakepageパーツが必須。makepageで新規ページを作って、ページの名をプラグイン構文でも必要とする場合とかに使える。詳しくはmakepageの説明参照。置き換わる文字は下のいずれか (makepageでnotimeを指定していれば「/時間を表す数値」は付かない)
- makepageパーツでwikipageを引数にしていて、フォームからwikipageクエリーが送られていれば「wikipage」クエリー+「/時間を表す数値」(例えばwikipageクエリーが「テスト」なら「テスト/1221412924」のように)
- makepageパーツでwikipageを引数にしていて、フォームからwikipageクエリーが送られてこなければ「PAGE/時間を表す数値」
- makepageパーツで任意の文字を引数にしていれば「任意の文字/時間を表す数値」
レシーブ整形用特殊パーツ (保存位置指定)
送信された文字(例えば掲示板だったら発言)の保存位置、保存順を指定するパーツ。画面上には出ないので、どこに書いてもOK (でも分かりやすく一番最後あたりに書くのが無難)
保存位置は基本的にはフォームの前後かtail(ページ一番下)に限られるが、formプラグインの設定によっては保存位置をフォームと切り離す事も可能。(詳しくは上にあるformプラグイン説明参照)
normal
%normal%
書き込み保存位置をフォームの上とし、保存順を下が最新のものにする
reverse
%reverse%
書き込み保存位置をフォームの下とし、保存順を上が最新のものにする
tail
%tail%
書き込み保存位置をページの一番下とする
レシーブ整形用特殊パーツ (スパムフィルター)
送信されたクエリー内容をチェックしてスパム等を排除するパーツ。
spamenglish
%spamenglish% %spamenglish クエリー名%
文字が英語のみかチェックするスパムフィルタ。引数設定したクエリーに日本語(全角)が含まれていない時はエラーとし、記録させない。画面上には出ないので、どこに書いてもOK
- クエリー名
- チェックするクエリー名。省略時はmessageをチェック
spamip
%spamip IP% 例: %spamip 199.40|*.iba.cz%
リモートホスト、IPアドレスをチェックするスパムフィルタ。送信者のリモートホスト(もしくはIPアドレス)をチェックして、引数で指定したものが含まれている場合(制限したいIPである場合)はエラーとし、記録させない。画面上には出ないので、どこに書いてもOK。
なお、form.cgi自体がこれと同じIP制限チェック機能を持っていて(kinsiip.txt、kinsihost.txtに書かれたIP、ホストを弾く)、Wiki管理者が禁止IPやホストを指定したいのであれば、そちらを利用する方が汎用的で堅固なのでいいと思う。
- IP
- 制限したいリモートホスト名もしくはIPアドレス。省略不可。指定する引数はフルのホスト名やIPである必要は無く、リモートホスト(もしくはIPアドレス)の先頭からチェックしている仕様を考えて指定する(例えば「199.40」とした場合、199.40.1.1も199.40.82.139も該当と見なす)。「softbank.*.bbtec.net」のような正規表現での指定も可能、多分(^^;)。「|」で区切って複数指定可能
spamref
%spamref% %spamref 文字%
リファラーをチェックするスパムフィルタ。リファラーが許可したところ以外からの送信の場合(リファラーに引数で指定した文字が含まれていない場合)はエラーとし、記録させない。画面上には出ないので、どこに書いてもOK。
なお、form.cgi自体がこれと同じチェック機能を持っている(リファラーに$MAIN_SCRIPTで指定したものが含まれていなければエラー)。あるフォームだけにリファラーチェックを埋め込みたいとか、引数を指定してより厳格に決まったページだけからの送信を受け付けるようにしたいとかあればこれを使ってもよいかと。
- 文字
- リファラーに含まれているか調べる文字(含まれてなければエラー)。省略時はWikiのCGI(setup.plの$MAIN_SCRIPTで指定したもの)となる
spamurl
%spamurl% %spamurl 数% %spamurl 数,クエリー名%
URL数をチェックするスパムフィルタ。引数設定したクエリーに指定した数以上のURLが含まれている時はエラーとし、記録させない。画面上には出ないので、どこに書いてもOK
- 数
- エラーとするURL数。省略時は10
- クエリー名
- チェックするクエリー名。省略時はmessageクエリーをチェック
spamword
%spamword 文字% %spamword 文字,クエリー名%
禁止語句が含まれているかをチェックするスパムフィルタ。引数設定したクエリーに指定した文字が含まれている時はエラーとし、記録させない。画面上には出ないので、どこに書いてもOK。
なお、form.cgi自体がこれと同じIP制限チェック機能を持っていて(kinsiword.txtに書かれた文字を弾く)、Wiki管理者が永続的に禁止語句を指定したいのであれば、そちらを利用する方が汎用的で堅固なのでいいと思う。一時的対処として行う、また、フォームによって使わせない文字を設定するという使い方はありかと。
- 文字
- 制限したい文字。省略不可。「眼鏡.*.娘」(いや、別に他意はありません(^^;))のような正規表現での指定も可能、多分(^^;)。「|」で区切って複数指定可能
- クエリー名
- チェックするクエリー名。省略時はmessageをチェック
レシーブ整形用特殊パーツ (その他)
ip
%ip%
送信者のリモートホスト名(取得出来ない場合はIPアドレス)に置き換わる。迷惑な投稿への一応の対策として利用する等。
kesi
%kesi%
整形後消えるパーツ。レシーブ整形ページに書いたプラグイン構文や、フォームでフォーム用ページを作る際のパーツをそのまま書いたのでは誤動作してしまう事があり、それらの間にこのパーツを挟む事で誤動作を防ぐ。
例:
フォーム整形用ページ(A)をフォームBで作れるようにするとして、追加順番を決める「%reverse%」をフォーム整形用ページ(A)で使いたくて、フォームBのレシーブ整形ページでそのまま書いてしまうとフォームBの追加順番がReverseになってしまう。そこで、フォームBのレシーブ整形ページでは「%reve%kesi%rse%」としておけば、整形後%kesi%の部分が無くなり「%reverse%」となってフォーム整形用ページ(A)に書かれる。
makepage
%makepage ページ名,オブション%
フォームから送信され整形したものをページ中に追加する形で保存するのでなく、新たにページを作成しそこに保存する。ページ名は「引数で設定した名前/作成日時を表す数字」となる。画面上には出ないので、どこに書いてもOK (最後の方あたりに書くのが無難)
- ページ名
- ページに付ける名前。省略不可。省略時「PAGE」。ページ名が被ってページが作れないという事がないよう、実際のページ名はこの引数で設定した後ろに「/作成日時を表す数字」が自動的に付けられる
フォームから送られた文字をページ名に使いたい場合は「wikipage」とページ名引数を設定する。「wikipage」クエリーを入力送信するフォームを用意し(例えば「formtext wikipage」等)、レシーブ整形用Wikiページに「%makepage wikipage%」と書いておけば、「入力されたwikipageクエリー/作成日時を表す数字」のタイトルでページが新たに作られる。その場合、もしwikipageクエリーが送信されなかった時は「PAGE/作成日時を表す数字」というタイトルになる。
- makepageパーツでwikipageを引数にしていて、フォームからwikipageクエリーが送られていれば「wikipage」クエリー+「/時間を表す数値」(例えばwikipageクエリーが「テスト」なら「テスト/1221412924」のように)
- makepageパーツでwikipageを引数にしていて、フォームからwikipageクエリーが送られてこなければ「PAGE/時間を表す数値」
- makepageパーツで任意の文字を引数にしていれば「任意の文字/時間を表す数値」
- オプション
- 省略可能。引数に「notime」を設定するとページ名に「/時間を表す数値」を付けない。ただしその場合同じタイトルのページが既に存在する可能性が高まり、もし同じタイトルのページが既に存在する場合は同名のページがあって作れなかったというエラー表示となる
per
%per%
パーセント(%)に置き換わるパーツ。レシーブ整形パーツで使う%でなくパーセント(%)を使いたい時に。
textfile
%textfile テキストファイル名% %textfile テキストファイル名,クエリー名% 例: %textfile id.txt% %textfile id.txt:同じタイトルがあり保存出来ません,title%
引数設定したクエリーの文字が参照したテキストファイルにある時はエラーとし、記録させない。画面上には出ないので、どこに書いてもOK。テキストファイルにID等を記録しておき、同じIDを登録させない等に使える。参照するテキストファイルはCGIと同じディレクトリに置く必要があり、Wiki管理者でないと利用するテキストファイルを加えられない。(Wikiページのソースを利用出来るようにもいずれする予定)
- テキストファイル名
- 参照するテキストファイルの名前。省略不可。「テキストファイル名:エラーメッセージ」とすれば、任意のエラーメッセージを表示出来る(設定しない時は「重複等により保存出来ませんでした。」となる)
- クエリー名
- チェックするクエリー名。省略時はmessageクエリーをチェック
time
%time% %time 表示%
送信日時(〜年〜月〜日 〜時〜分〜秒)に置き換わる。%time 表示% とすると、日時全てでなく、引数で指定した一つだけを表示出来る。
- 表示
- 次の中から表示させるものを「一つ」のみ指定。「time:」(現在日時を表すtime関数の秒数値)、「year」(年)、「mon」(月)、「day」(日)、「hour」(時)、「min」(分)、「sec」(秒)。年と月とか、複数表示させたい場合は下の例のように複数書く
例 %time mon%月 %time day%日/%time hour%時 %time min%分 10月 11日/18時02分
レシーブ整形用特殊パーツ (スペシャル)
IOが改造したFSWikiLite用等の一般的でないパーツ、今後消える可能性がありえるパーツ。
new
{{new}}
オリジナルプラグインである、「new」プラグイン変換用。newプラグインはマークを生成し、生成した段階の日時を自動記録して(マークの上にポインタを持っていくとtitleチップ表示する)、1日以上経つと色が変わり、3日目以降は画面から消えるというもので、ページ内に設置して更新を知らせたり、新しい投稿と知らせたりする事に使う。
通常「new」プラグインを使う場合は「{ {new time}}」と書くが(ここでは変換されないよう空白入れてあるが実際は入れず・他の書き方もあり)、レシーブ整形ページ中でそのまま使う事は出来ないので、「{ {new}}」(ここでは変換されないよう空白入れてあるが実際は入れず)としておけば保存時「{ {new time}}」に置き換わる。
注意!!
以下の「delete」「linedelete」については思った通りに動く事もありますが、まだ上手く動かない事も多々あります(^^;)。レシーブ内で使わなければ何も問題ありませんので、必要なければ使わない方がいいかもしれません。
delete (暫定新仕様・現在オフ)
%delete クエリー名,消す文字%
- クエリー名
- 指定したクエリーを受信しなかった場合に、「消す文字」の引数で指定した文字がレシーブによって整形された後の文章中にあれば削除する。クエリー受信に関係なく文章中にあったら消したい場合は「d」とする
- 消す文字
- 存在したら消したい文字の指定。Perlの置き換え処理時に含まれていると問題となる「*|][」等の文字を消す文字として指定したい時は、Perlで使える16進数で表した文字にしておく必要がある(例えば「*」なら「\x2a」とする)。16進数での文字について、素人Perlerのメモに書いたのでご覧下さい。
良く分からないと思うので利用方法を。
例えば、コメント(メッセージ)、URL、URLタイトルを入力するフォームがあって、レシーブ側で一行目にリスト形式(行頭に「*」を付ける)でコメントを、二行目に一段下がったリスト形式(行頭に「**」を付ける)でURLとURLタイトル([ ]を使ったWikiのリンク形式)をという形に整形するようにしてたとします。この場合下のようになります。
*タイトル **[URLタイトル|URL]
フォームの全ての要素を記入していれば問題ありませんが、もしURL、URLタイトルを入力していないと、二行目にはURL、URLタイトルが抜けた「**[|]」というゴミが残ってしまいます。そのようなものがあったら自動的にそれを消そうというのがdeleteの役目です。この場合は
%delete d,\x2a\x2a\x5b\x7c\x5d%
とレシーブ内に書いておけば、「**[|]」が存在した場合に自動的にそれを削除します。
引っかかっていたのは16進数のせいと気づいて、一応稼働するようになったものの、レシーブの指定によって原因不明のエラーが出たりする事もまだあるような感じで、OKとは言えません。旧仕様に比べて使い勝手も劣り、このままでいくかはもう少し考えてみないと。これが進まないせいで他が滞ってしまっては困るので、稼働はした事だし、しばらく手をつけず後回しにします。
行削除 (旧・現在オフ)
%linedelete 文字% %linedelete 文字,文字,・・・%
文字で指定したクエリーを受信していない場合、%linedelete 文字% を書いたところから行末までを削除する。文字を二つ以上指定する場合はカンマで区切る(完成時、区切りはカンマでなく「|」になる予定)。省略されてフォームからクエリーが送信されてない場合に不必要だったり見苦しく見える部分を削除するのに使う
部分削除 (旧・現在オフ)
%delete 文字% 開始用 %delete 文字,文字,・・・% 開始用 %/delete% 閉じ用
文字で指定したクエリーを受信していない場合、%delete 文字% を書いたところから%/delete%までを削除する(指定は行単位で、行をまたいでは使えないかと)。文字を二つ以上指定する場合はカンマで区切る。省略されてフォームからクエリーが送信されてない場合に不必要だったり見苦しく見える部分を削除するのに使う。例えば、違う文字指定の開始用を二つと閉じ用を一つ用意して、クエリーの受信状況に応じて削除位置を変えるといった事も可能
削除機能は一応動くがプログラムとしてはあまりこなれていない。もう少し良い感じに出来ればいいんだろうが、とりあえず無いよりましという事で。
フォームサンプル
フォームサンプルページ
サイト内に表記された商品名、会社名等は各社の登録商標もしくは商標です。