新フォームのテスト
Perl(CGI)を書き換える事無く、Wikiページを作るだけで簡易かつ自由に入力フォームや出力スタイルを幾らでも追加出来るフォームCGIのテスト(完成の暁には新たにちゃんとページを作って整理)。利用の仕方に応じた(フォームとレシーブの組み合わせ、フォーム内やレシーブ内の組み合わせに応じた)、様々なパターンを簡単に用意可能。
まだまだCGIは手直し作成中で、これまで用意した色々なフォームが移行出来るようにパーツ増やしたり、更なる機能追加をしていく、かも。
CGIファイル
現時点でのCGI関係ファイルをZIPでまとめてとりあえずアップしましたので、必要なら落として下さい。でも、いつ仕様が変わったりバージョンが上がるか分かりませんので、その点と自己責任という事を了承の上で。
CGI関係ファイル
- 2006/10/5 13:41 区切りを「< >」から「% %」に変更。テキストファイルを利用する形から、Wikiページを利用する形に変更
- 2006/10/6 20:30 フォームのパーツ区切りを「% %」から「{{ }}」に変更。その他色々変更や付け加え
- 2006/10/11 1:39 URLクエリー処理を変更。delete処理中止。その他11日以降諸々変更。更なる修正も予定しているので、一旦ファイルアップを中止 (以前のものでは確実に問題があるので、実際に利用していて困るという人でもいれば直ぐさまアップしますけれど)
意見、質問等あればとりあえず当Wiki内で関連がありそうなこちらに掲示板を暫定的に用意したので、そちらにでも書いて下さい (ここに設置してもいいのですが、なんせ掲示板だらけでゴチャついてるので/(^^;))。
独り言?
2006/10/5
FSWikiのページを見てたらBugTrack-plugin/215が更新リストにあって、それを見てフォームを作り出す流れが少し近い事に気づきました(^^;;;)。そのようなものがあるとは知らず。
なので、こちらもフォームを記したテキストファイルを読み込んで利用するのでなくWikiページを利用する形に、パーツの区切りを「< >」から他の形にしました。
ただ、ただでさえプラグインを多く作ってるので(^^;)、パーツをプラグイン({{form〜)にする形で設置するのはやめておきます。
その他にもBugTrack-plugin/215を参考にして合わせられるところは合わせるようにしています。
あと、今はフォーム側は細かく切り分けてチェックし出力してますが、レシーブ側は切り分けてチェックしてず、そのため、複数の置き換え処理が出来ていません(例えばdeleteを複数用意して何パターンかの条件で不必要部分を削除する等といった事が出来ない)。ちょっと不便なので、作り直してレシーブ側も細かく置き換え処理出来るようにします。
えーと、本家に書いてオープンにしてしまった手前、一応書いておきます。
万が一使いたい等の希望があればとりあえずCGIの提供はしますが、未完成であったり、上手くいくとは限らず、サポートも出来るかは分からず、利用者の自己責任で行うという事でお願いします。最低でもform.cgiとform.plプラグインファイルの導入、setup.plの書き換えが必要です(スパム対策等用として、kinsiword.txt、kinsiip.txt等も)。
考え始めた時は単にこれまでのcommentプラグインの置き換えがしたいという事しか考えてなくて、データベース的な使い方なんて全く頭になかったけど、確かに出力を定型にしてWikiページとして保存するなら、キーワードでソートや抜き出し位なら出来るかも。作ろうと思ってたものが完成して落ち着いたら・・・というところです。
これまで独自に作って利用しているプラグイン同様、今回も本家に提案したりして展開する事は全く考えてなかったので、正直どうしたものかと思ってます。プラットフォームがFSWikiとFSWikiLiteという違いはあれ、BugTrack-plugin/215と被ってしまうかもという懸念もありますし(まあ考え方が完全に被る事はないでしょうが似通ってしまうという事はあるかと)。
なので、今のところは本家での提案は控えたいと思います。FSWikiLiteのプラグイン導入や改造等については当方のWikiでも書きたいと思ってとりあえずタイトルページだけは作ってあるので、もしかしたらそちらに書き加えていく事になるかも。
BugTrack-plugin/215を落として、ソースがどうなってるのかを見てみました。・・・やっぱLiteでないFSWikiのソースは多くて複雑で難しい(^^;)。読み取るのは無理そうなので直ぐ閉じました(^^;;;)。あと気づいたけど、外部テキストファイルでなくWikiページを利用する場合、インクルードに一応注意しとかないとダメですね(読み込み時無効化すればいいか)。こればかりに時間を割いているわけにはいかないので、さっさと手直しして終わらせたいところ。
2006/10/6
ようやくフォーム表示側が大体固まりました(結局はBugTrack-plugin/215に合わせた感じに)。もう大きい変更はないと思います(^^;)。つーか、一日で三回も大きく仕様を変えて疲れました(^^;)。
続いて、レシーブ側もこれから大きく変更します。それが終わったら考えているパーツの追加等して完成となるかと(最低でもこれまでのcommentプラグインとbbsプラグインが移行出来るようなものにはする)。
決められたページ名と定型で出力したWikiページからのデータベース的データ抜き出し(ソート等含み)は、作れそうですが、他にも時間を回したいし、落ち着くまではやめときます(多分(^^;))。
とりあえず完成というか一区切り付いたかも。deleteがどうにも上手く動かないので(スクリプトが悪いためです(^^;))、それについては保証無し、どうしても必要でなければ使わないという事で。他にもまだ付け加えたい機能は色々あるが、週末に向けてやる事があったりして忙しいので、週明けまで休み。
2006/10/11
レシーブでのurlクエリーの処理が少しおかしくなってました(新しいものにした際、色々なパターンをテストしなかったため)。なので、元の、特に何もせず置き換えるだけの処理に戻しました。よく考えれば、新規ウインドウで開くにしてもそっちの方が柔軟だし。
delete処理もおかしいのでやはり一旦中止。
レシーブでのpassクエリーの将来改造予定を記しました。他にやる事が色々あって、下に書いたようにまず当方がLiteを改造して付けたパス機能を手直ししないと意味がないのでまだ先の話(そもそもパス機能のない普通のLiteではあまり意味もなく)。
メモ用のフォームを用意。でも本当は新しいフォームを作る前にcommentプラグインからの移行をさっさと進めなければ。
レシーブでのtimeの処理を増やしました。これで送信日時もフォーム(レシーブ)毎に思った形に整形出来るかと。
2006/10/15
レシーブでのスパムフィルター系パーツを追加拡充しました。詳しくはそれぞれの説明を見て下さい。
レシーブでのパーツ「IP」を追加しました。
passクエリーの将来改造のためにも、間違いなく制限するWikiパス制限機能にするためにも直す必要があるedit.cgiとinclude系プラグインの修正、そのうちedit.cgiについては修正完了。includeの方もそんな難しくはないが、時間がない(^^;)。
今のところ特に反響もないので、納得いくレベルにいくまではCGIのダウンロード提供しない方向をこのまま続けます。
2006/10/16
レシーブでのパーツ「delete」が一応出来たが、説明にあるようにまだ完成とは言えず。他のパーツも進めたいし、Wikiに付けたeditbuttonの修正等もしたいので、「delete」については後回しにします。
formプラグインについての説明を書き忘れてたようなので(^^;)、項を追加しました。
通常はフォームから送信されたものをページに追加して書き込む位置はフォームの前後かtailに限られてますが、formプラグインの設定と決められたコメント行を書く事で任意の位置に追加出来るようになっています。使いづらかったnormal順も使いやすくなったりと、結構使える機能ではと。
レシーブでのパーツ「category」「mail」「pass」に機能を追加しました。
2006/10/17
formdateの追加、dateネームの追加、nameネームの変更。後でもう少し詳しく書きます
フォーム利用までの流れ
利用者
- formプラグインによってWikiに設置されたフォームを利用、記入や選択して送信
- 送信内容がform.cgiに送られ、設定されたフォームレシーブWikiページに応じた形で整形されてページに反映保存される
ページ作成者
- フォームの形となるフォーム用Wikiページを作成、もしくは既存のフォーム用Wikiページから選択
- フォームから送られたクエリーを整形して保存するフォームレシーブ用Wikiページを作成、もしくは既存のフォームレシーブ用Wikiページから選択
- その二つ(やページ名等)を指定したformプラグインをページ内に設置
- これによってページの作り手であり利用者である者それぞれが多彩にフォーム利用出来る
代表的な設定形式
formプラグイン (フォーム設置)
{{form フォーム用Wikiページ名,レシーブ用Wikiページ名,フォーム名(ID),設置ページ名,戻りページ名}}
フォーム用Wikiページ
お名前:{{formtext name}} コメント:{{formtext message}} {{formsubmit 送信}}
レシーブ用Wikiページ
*%message% - %name% (%time%)
formプラグイン
Wikiにフォームを設置するにはformプラグインを使います(FSWiki(Lite)で使われているcommentプラグイン、bbsプラグインに該当)。プラグインの引数で、フォーム用Wikiページやレシーブ用Wikiページを指定する事で、それに応じたフォームの形、フォームから送られた内容の整形ルールを決める事が出来ます。
{{form フォーム用Wikiページ名,レシーブ用Wikiページ名,フォーム名(ID),設置ページ名,戻りページ名}}
- フォーム用Wikiページ名
- フォーム用に用意されたWikiページ名を指定。指定したWikiページの内容でフォームの形(送信可能なクエリー)が決まる。省略不可
- レシーブ用Wikiページ名
- フォームからの送信を整形保存するためのレシーブ用Wikiページ名を指定。指定したWikiページの内容で保存する形(受信可能なクエリー)が決まる。省略不可
- フォーム名(ID)
- フォームに付ける任意の名前。省略不可。フォームから書き込んだものを保存する位置はフォームに付けられた名前をチェックして決められるので、他に存在しない(他のフォームとバッティングしない)固有の名前を付ける必要がある(formプラグインのページ名引数等とも被らないように付ける方が無難)
- 設置ページ名
- formプラグインを設置するWikiページ名。省略した場合は自動的にページ名を取得するが、なるべく自分で付けておいた方が無難。ページをインクルードして使う場合等に間違いないよう付ける必要がある
- 戻りページ名
- フォームから送信した後に移動するWikiページ名(通常は設置ページ名と一緒)。省略した場合は自動的に設置ページ名の省略同様のページ名を取得するが、なるべく自分で付けておいた方が無難。ページをインクルードして使って、書き込み後、フォームを設置したページではないページに移動させたい等に使える
commentプラグイン等では通常、フォームから送信した文の保存位置はフォームの前後かページ下(tail)に限られるが、このプラグインではページの任意の位置に書き込む(保存する)事も可能です。
任意の位置に書き込みたい場合は以下の事をする必要があります。
- formプラグインでのフォーム名の引数を「//〜〜〜」とする
- 例
- //質問意見用フォーム01
- ページ中に「//form 〜〜〜」というコメント行を書く(コメント行のため画面上には表示されない)
- 例
- //form 質問意見用フォーム01
このようにすると、フォームの位置にとらわれず、そのコメント行のある位置にフォームから送信された文が書き込まれます。
通常のcommentプラグインでは、書き込み順をnormalにするとフォームの上に下の方が新しい順で追加されていき、reverseにするとフォームの下に上の方が新しい順で追加されていきます。reverseなら問題ないのですが、normalだと書き込まれる程にフォームが下にいってしまい使いづらかったけれど、この機能を使えばその問題を解消する事が出来ます。
クエリー用ネーム
このCGIでは、フォームの送受信に使うクエリーに付ける名前 (テキストフィールドに付ける名前等)は決められたものしか使用出来ない仕様となっています (CGI内で様々な変換を行うため・受け取ったクエリーの全てを展開、という事も考えられるんでしょうがめんどいので(^^;)・大体は決められたもので十分でしょうし)。以下を参考にして、目的にあったものを使用して下さい (名前に応じて特殊な変換を行うものもありますので、それも考慮して)。
現在使用可能なクエリーネーム
「name」「title」「message」「urltitle」「url」「mail」「id」「pass」「q1」〜「q20」「wikiname」「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のクエリーが受け取れない場合は何も送信されてないと判断して記録保存されない仕様なので
クエリー送信関係パーツ
1行テキストフィールド
{{formtext name}} {{formtext name(省略不可),size,max,value}} {{formtext name,20,100,名無しさん}}
引数設定
- name
- テキストフィールド名。省略不可。レシーブ側とのやりとりの関係上、以下にある、決められた中の名前しか付けられないので注意。付けられる名前についてはクエリー用ネームの説明参照
- size
- フィールド幅サイズ。数値のみで指定
- max
- 送信出来る最大文字数。数値のみで指定
- value
- フィールドに挿入しておく初期値(文字)
date picker用1行テキストフィールド
{{formdate name}} {{formdate name(省略不可),表示パターン}} {{formdate name,mm月dd日}}
フィールドをクリックすると、カレンダーがレイヤー表示され、カレンダーから選択した日付をフィールドに入力出来る(入力後の編集も可能)。
この機能を使うにあたって幾つか注意が。
- 実際に機能させるには、ブラウザ側でJavaScriptを使用出来るようにしていなければならない。
- この機能を実現するために、高橋登史朗さんが作り、角田桂一さんが改良したJavaScript「calendarlay.js」「HolidayChk.js」を利用していて、それらをサーバにアップし、setup.plでJavaScriptの置き場所を設定する必要がある(詳しくはform.pl内の説明を参照)。
引数設定
- name
- テキストフィールド名。省略不可。レシーブ側とのやりとりの関係上、以下にある、決められた中の名前しか付けられないので注意。付けられる名前についてはクエリー用ネームの説明参照
- 表示パターン
- 表示させるパターン
送信ボタン
{{formsubmit}} {{formsubmit value}} {{formsubmit 送信}}
引数設定
- value
- ボタンに表示する文字。省略時「実行」
リセットボタン
{{formreset}} {{formreset value}} {{formreset リセット}}
入力内容をキャンセルし初期化するボタン
引数設定
- value
- ボタンに表示する文字。省略時「リセット」
セレクトメニュー
{{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については現在未実装
パスワードフィールド
{{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」(改行無し・スクロールバー表示)の中から指定
チェックボックス
{{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}}{{formcheck q1,みかん}}{{formcheck q1,バナナ}}
ラジオボタンを表示する。
引数設定
- name
- ラジオボタン名。同じ選択肢グループには同じ名前を付ける。省略不可。レシーブ側とのやりとりの関係上、以下にある、決められた中の名前しか付けられないので注意。付けられる名前についてはクエリー用ネームの説明参照
- value
- 選択時に送信される文字。省略不可
- checked
- 最初から選択された状態にしたい時に指定。チェックボックスと違って、同じ選択肢グループからは一つしか選べないので注意(複数選択されてないかのチェックはしてません)。引数の内容は何でも良い(分かりやすくcとかでいいのでは)
hidden
{{formhidden name,value}} {{formhidden title,質問用フォーム}}
自動的に送信される隠しクエリー要素。
- name
- 送信アイテム名。省略不可。レシーブ側とのやりとりの関係上、以下にある、決められた中の名前しか付けられないので注意。付けられる名前についてはクエリー用ネームの説明参照
- value
- 送信する値。省略不可
まだ未実装だが、決められたvalueと共に末尾に自動的に数字(ディレクトリを探って低い順で存在しない数字とか)や保存日時等が付く機能も用意するかも
クエリー送信関係の特殊ネーム
テキストフィールドやセレクトメニュー等に以下の名前を付けた場合(例えばformtextのnameの引数をspam1にする等)に、送られたクエリーに応じて専用の処理が行われるもの
spam1
送信されたvalueがok以外だとスパムと見なされ、エラーとし、記録させない。テキストフィールド、セレクトメニュー等で使用可能。実際使う際は説明か質問文を前に書いて使う事になるだろう
●テキストフィールドの場合
okという文字を打って送信しないとスパムと見なされる。
{{formtext spam1}}
実際例
スパム対策:半角英小文字で「オーケー」を記入して下さい{{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
送信されたvalueが今月を表す半角数字以外だとスパムと見なされ、エラーとし、記録させない。送信準備をしている間に月が変わっても大丈夫なよう、一月分余裕を持たせてある。テキストフィールド、セレクトメニュー等で使用可能。実際使う際は説明か質問文を前に書いて使う事になるだろう
●テキストフィールドの場合
今月を表す半角数字を打って送信しないとスパムと見なされる。
{{formtext spam2}}
実際例
スパム対策:今何月か半角数字で記入して下さい{{formtext spam2}}
●セレクトメニューの場合
メニュー項目(option)から今月を選ばないとスパムと見なされる。
実際例
スパム対策:今何月?{{formselect spam2,1,2,3,4,5,6,7,8,9,10,11,12}}月
spam3
送信されたvalueが今日を表す半角数字以外だとスパムと見なされ、エラーとし、記録させない。送信準備をしている間に日が変わっても大丈夫なよう、一日分余裕を持たせてある(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}}日
表示関係パーツ
フォームの表示を多彩にする、使いやすくするためのもの
日時
{{formtime}}
現在の日時を表示する。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のソースとなる)。
当然ながら、設定したフォームが送信しないクエリーはレシーブに反映されないし、逆に、フォームがクエリーを送信してもレシーブ側でパーツを用意していないと表示しないので注意。
*%message% - %name% (%time%)%reverse%
- こんにちは - IO (2006年10月03日 18時58分12秒)
レシーブ用パーツの基本
基本的にはフォームから送信された文字(クエリー)とパーツが置き換わる。
例えば、フォームに「name」と名付けたテキストフィールドがあって、名前を記入して送信した場合、レシーブ用ページ中に %name% とあれば、%name%の部分が送られてきた「name」クエリー(記入した名前)に置き換わって保存される。
パーツの区切りとしてでなく「%」を使いたい場合は「%per%」と表記する事。
レシーブ用クエリー置き換えパーツ (名前順)
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を導入していなければ機能しない)。レシーブファイル中でmailtoプラグインを使いたいのであれば、下のように書くのでも良い (mailtoプラグインの他の設定もしたい時等は)。
{{mailto %mail%}}
message
%message%
「message」クエリーと置き換わる。
name
%name% %name 文字%
「name」クエリーと置き換わる (プラグインで生成されたフォームのhtmlソースを見ると、「name="name"」と設定した場合は「name="namae"」と(「namae」クエリーと)変わっていますが、レシーブでの指定はフォーム用Wikiページでの指定と同じくnameでOKです)。
引数設定
- 文字
- 「name」クエリーが送信されていない時に置き換わる文字 (例えば、%name 名無しさん% としたら、名前が送信されていない場合は「名無しさん」となる)
pass
%pass% %pass パスワード%
「pass」クエリーと置き換わる。%pass パスワード%の形で引数を設定すると、クエリーの置き換えではなくて「pass」クエリーと設定したパスワードを照合して同じでないならエラーとして書き込めない機能となる。レシーブ用ページの該当部分を見られてしまえばパスは丸分かりだが、レシーブ用ページの参照にパス制限を付けておく事で一応は保護出来る (ノーマルのFSWikiLiteにはそのようなパス制限機能はないので出来ません・IOが改造したFSWikiLiteはパス機能があります)。
引数設定
- パスワード
- 「pass」クエリーと照合させるパスワード。パスワードが異なっていたら、エラーで書き込み出来ない。パスワードを設定した場合はクエリーの置き換えはせず、何も表示しない
q1 〜 q20
%q1% 〜 %q20%
「q1」〜「q20」クエリーと置き換わる。様々なクエリー送受信用途に使えるよう、20個分確保されている。
rate
%rate%
「rate」クエリーと置き換わる。
stat
%stat%
「stat」クエリーと置き換わる。
subject
%subject%
「subject」クエリーと置き換わる。
title
%title%
「title」クエリーと置き換わる。
url
%url%
「url」クエリーと置き換わる。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」クエリーと置き換わる。
user
%user%
「user」クエリーと置き換わる。
wikiname
%wikiname%
「wikiname」クエリーと置き換わる。ページ生成機能が出来たら、それに応じて機能が付く予定。
レシーブ用特殊パーツ (保存位置指定)
基本的には、保存位置はフォームの前後かtailに限られるが(以下のパーツの利用による)、formプラグインの設定によって保存位置をフォームと切り離す事も可能(詳しくはformプラグインの説明にあり)。
normal
%normal%
保存位置指定。書き込み保存位置をフォームの上とし、保存順を下が最新のものにする。画面上には出ないので、どこに書いてもOK
reverse
%reverse%
保存位置指定。書き込み保存位置をフォームの下とし、保存順を上が最新のものにする。画面上には出ないので、どこに書いてもOK
tail
%tail%
保存位置指定。書き込み保存位置をページの一番下とする。画面上には出ないので、どこに書いてもOK
レシーブ用特殊パーツ (スパムフィルター等)
設置する事で、送信されたクエリーをチェックしてスパム等を排除するパーツ。
spamenglish (英語のみかチェック)
%spamenglish% %spamenglish クエリー名%
スパムフィルタ。送信されたクエリーに日本語(全角)が含まれていない時はエラーとし、記録させない。画面上には出ないので、どこに書いてもOK
引数設定
- クエリー名
- チェックするクエリー名。省略時はmessageをチェック
spamip (リモートホスト、IPアドレスをチェック)
%spamip IP%
スパムフィルタ。送信者のリモートホスト(もしくはIPアドレス)をチェックして、引数で指定したものが含まれている場合(制限したいIPである場合)はエラーとし、記録させない。画面上には出ないので、どこに書いてもOK。
なお、今現在はこれを使わなくても、form.cgi自体がこれと同じIP制限チェック機能を持っている(kinsiip.txtに書かれたホスト名、IPを弾く)。フォーム毎にチェックするしないを決められるこちらの機能のみを使って、form.cgiでのIPチェック機能がいらないようであれば、form.cgiの該当部分を削除しても良い (フォーム毎にこれで設定するのは大変だろうし、kinsiip.txtでのチェックの方がいいとは思うが、一時的対処として行うというのはありかと)
引数設定
- 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で指定したものが含まれていなければエラー)。フォーム毎にチェックするしないを決められるこちらの機能のみを使って、form.cgiでのリファラーチェック機能がいらないようであれば、form.cgiの該当部分を削除しても良い (あるフォームだけにリファラーチェックを埋め込みたいとか、引数を指定してより厳格に決まったページだけからの送信を受け付けるようにしたいとかに有効かと)
引数設定
- 文字
- リファラーに含まれているか調べる文字(含まれてなければエラー)。引数を指定しない場合、WikiのCGI(setup.plの$MAIN_SCRIPTで指定したもの)となる
spamurl (URL数をチェック)
%spamurl% %spamurl 数% %spamurl 数,クエリー名%
スパムフィルタ。送信されたクエリーに指定した数以上のURLが含まれている時はエラーとし、記録させない。画面上には出ないので、どこに書いてもOK
引数設定
- 数
- エラーとするURL数。引数を指定しない場合の数は10
- クエリー名
- チェックするクエリー名。省略時はmessageをチェック
spamword (禁止語句が含まれているかをチェック)
%spamword 文字% %spamword 文字,クエリー名%
スパムフィルタ。送信されたクエリーに指定した文字が含まれている時はエラーとし、記録させない。画面上には出ないので、どこに書いてもOK
なお、今現在はこれを使わなくても、form.cgi自体がこれと同じ禁止語句制限チェック機能を持っている(kinsiword.txtに書かれた文字を弾く)。フォーム毎にチェックするしないを決められるこちらの機能のみを使って、form.cgiでのワードチェック機能がいらないようであれば、form.cgiの該当部分を削除しても良い (フォーム毎にこれで設定するのは大変だろうし、kinsiword.txtでのチェックの方がいいとは思うが、一時的対処として行う、フォームによって使わせない文字を設定するというのはありかと)
引数設定
- 文字
- 制限したい文字。「眼鏡.*.娘」(いや、別に他意はありません(^^;))のような正規表現での指定も可能、多分(^^;)。「|」で区切って複数指定可能
- クエリー名
- チェックするクエリー名。省略時はmessageをチェック
textfile (指定テキストファイルに書かれた語句が含まれているかをチェック)
%textfile テキストファイル名% %textfile テキストファイル名,クエリー名%
送信されたクエリーに指定したテキストファイル内に書かれた文字(行毎)があるかチェックし、あった場合は「重複等により保存出来ませんでした。」というエラーメッセージを表示し、記録させない。画面上には出ないので、どこに書いてもOK
スパム対策用という事だけでなく、エラーメッセージからも分かるように重複を防ぐ等にも使える(というかむしろこっち用を考えて作ったもの)。
テキストファイルはform.cgiと同じディレクトリに入れなければならず、サーバにアップロード出来るWiki管理者か、管理者にテキストファイルアップロードを頼む事でしか使えないので注意。
引数設定
- テキストファイル名
- チェックに使用するテキストファイル名。指定したファイルがサーバに無い場合は「ファイルのオープン、入出力に失敗」というエラーメッセージになるので注意。「テキストファイル名:エラーメッセージ」というように「:」で区切って指定すれば任意のエラーメッセージを表示する事も可能。(例「check.txt:重複してるみたいだニャン」)
- クエリー名
- チェックするクエリー名。省略時はmessageをチェック
レシーブ用特殊パーツ (その他)
ip
%ip%
送信者のリモートホスト名(取得出来ない場合はIPアドレス)に置き換わる。迷惑な投稿への一応の対策として利用する等。
time
%time% %time 表示%
送信日時(〜年〜月〜日 〜時〜分〜秒)に置き換わる。「%time 表示%」とすると、日時全てでなく、引数で指定した一つだけを表示出来る。
引数設定
- 表示
- 日時の中から表示させるものを指定。以下の中から一つのみ設定可能。「year」(年)、「mon」(月)、「day」(日)、「hour」(時)、「min」(分)、「sec」(秒)
例 %time mon%月 %time day%日/%time mon%時 %time min%分 10月 11日/18時02分
レシーブ用特殊パーツ (スペシャル)
IOが改造したFSWikiLite用等の一般的でないパーツ、消える可能性がありえるパーツ。
注意!!
以下の「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%までを削除する(指定は行単位で、行をまたいでは使えないかと)。文字を二つ以上指定する場合はカンマで区切る。省略されてフォームからクエリーが送信されてない場合に不必要だったり見苦しく見える部分を削除するのに使う。例えば、違う文字指定の開始用を二つと閉じ用を一つ用意して、クエリーの受信状況に応じて削除位置を変えるといった事も可能
削除機能は一応動くがプログラムとしてはあまりこなれていない。もう少し良い感じに出来ればいいんだろうが、とりあえず無いよりましという事で。
new
{{new}}
オリジナルの「new」プラグイン変換用。newプラグインはマークを生成し、生成した段階の日時を自動記録して(マークの上にポインタを持っていくとtitleチップ表示する)、1日以上経つと色が変わり、3日目以降は画面から消えるというもので、ページ内に設置して更新を知らせたり、新しい投稿と知らせたりする事に使う。通常は{new time}と書くが(他の書き方もあり)、レシーブページ中でそのまま使う事は出来ないので(貼ったとたん古くなっていき使えなくなってしまうので(^^;))、レシーブファイル中では{new}としておいて({new}はtime関数での今の時間を表示する機能を持つ)、{new time}に置き換える
ページ生成
アイデアだけでまだ未作成。フォームが存在するページ中に付け加える形で保存するのでなく、一つのページとして保存する。ページタイトルはpageというクエリー、もしくはpageが無い場合はtitle、もしくはtitleもない場合はmessageとか?
各種フォームテスト
フォーム「form/normal」レシーブ「formrec/normal」
- テスト - IO (2006年10月17日 18時09分23秒)
- テスト - IO (2006年10月16日 14時43分11秒)
- テスト - IO (2006年10月15日 18時14分24秒)
- ノーマル - IO (2006年10月05日 12時19分36秒)
フォーム「form/normal-spam1?」レシーブ「formrec/normal」
その名のフォームWikiページは存在しません。- spam1フォーム - IO (2006年10月05日 12時21分49秒)
フォーム「form/normal-spam2?」レシーブ「formrec/normal」
その名のフォームWikiページは存在しません。- spam2フォーム - IO (2006年10月05日 12時22分24秒)
フォーム「form/normal-spam3?」レシーブ「formrec/normal」
その名のフォームWikiページは存在しません。- spam3フォーム - IO (2006年10月05日 12時23分03秒)
フォーム「form/normal」レシーブ「formrec/normal-redname」
- 名前が赤 - IO (2006年10月05日 12時30分23秒)
フォーム「form/normal」レシーブ「formrec/normal-greenname」
- 名前がグリーン - IO (2006年10月05日 12時30分45秒)
フォーム「form/normal」レシーブ「formrec/normal-small」
- 文字小さい - IO (2006年10月05日 12時31分09秒)
フォーム「form/normal」レシーブ「formrec/anacha」
- IO : 穴チャライク - (2006年10月05日 12時41分23秒)
フォーム「form/hensyu」レシーブ「formrec/hensyu」
- EDIT(黒) (2006年10月05日 12時43分39秒)
- NEW(黒) (2006年10月05日 12時43分05秒)
- EDIT(グレー) (2006年10月05日 12時42分48秒)
- NEW(グレー) (2006年10月05日 12時42分27秒)
- 種類無し (2006年10月05日 12時42分06秒)
フォーム「form/kao」レシーブ「formrec/kao」
- 星 - IO (2006年10月05日 13時09分10秒)
- ハート - IO (2006年10月05日 13時08分52秒)
- 怒り - IO (2006年10月05日 13時08分35秒)
- 泣き(T_T) - IO (2006年10月05日 13時08分19秒)
- 悲しい - IO (2006年10月05日 13時08分02秒)
- ウインク - IO (2006年10月05日 13時07分42秒)
- 良さそう(huh) - IO (2006年10月05日 13時07分25秒)
- 汗(^_^;) - IO (2006年10月05日 13時07分07秒)
- 大笑い - IO (2006年10月05日 13時06分50秒)
- 笑顔(^_^) - IO (2006年10月05日 13時06分35秒)
- 笑顔 - IO (2006年10月05日 13時05分59秒)
- アイコン無し - IO (2006年10月05日 13時05分31秒)
フォーム「form/link01」レシーブ「formrec/link01」
http://hpcgi3.nifty.com/%7Eio/fswiki-l/wiki.cgi
- -- (2006年10月11日 12時42分43秒)
ANA-NOTE
- テスト -- IO (2006年10月11日 02時21分30秒)
ANA-NOTE
- -- (2006年10月11日 02時21分06秒)
http://hpcgi3.nifty.com/%7Eio/fswiki-l/wiki.cgi
- -- (2006年10月11日 02時20分44秒)
フォーム「form/link01」レシーブ「formrec/link02」
- http://hpcgi3.nifty.com/%7Eio/fswiki-l/wiki.cgi (投稿:2006年10月11日 12時42分27秒)
- --
- ANA-NOTE (投稿:2006年10月11日 02時23分19秒)
- テスト -- IO
- ANA-NOTE (投稿:2006年10月11日 02時23分01秒)
- --
- http://hpcgi3.nifty.com/%7Eio/fswiki-l/wiki.cgi (投稿:2006年10月11日 02時22分48秒)
- --
フォーム「form/memo01」レシーブ「formrec/memo01」
- 【Wiki】コメント (2006年10月16日 12時06分06秒)
- 【未定】formrec/memo01の設定で、コメントのみだと二行目に残る** [|@@]を消すようになっている (2006年10月16日 12時05分06秒)
- 【アドレス】 (2006年10月16日 12時02分49秒)
- 【Wiki】テスト (2006年10月16日 12時10分10秒)
- [ANA-NOTE|@@]
- 【アドレス】 (2006年10月16日 12時00分42秒)
- 【アドレス】コメントとURL (2006年10月16日 11時59分43秒)
- 【未定】コメントのみ (2006年10月16日 11時59分04秒)
フォーム「form/memo01」レシーブ「formrec/memo02」
【Wiki】 | ANA-NOTE | 最初の行が見出しになってしまうのは仕様なのでしようがなく(^^;) | 2006-10-16 13:08 |
---|---|---|---|
【Wiki】 | ANA-NOTE | 2006-10-16 13:07 | |
【未定】 | [リンクタイトル|@@] | コメント | 2006-10-16 13:06 |
【Wiki】 | http://hpcgi3.nifty.com/%7Eio/fswiki-l/wiki.cgi | コメント | 2006-10-16 13:06 |
【Wiki】 | http://hpcgi3.nifty.com/%7Eio/fswiki-l/wiki.cgi | 2006-10-16 13:04 | |
【未定】 | コメントのみ | 2006-10-16 13:03 |
フォーム「form/normal」レシーブ「formrec/normal02」
- 日時が時間無しで簡易に - IO (2006-10-11)
フォーム「form/message」レシーブ「formrec/message02」
- テスト - (2006年10月16日 14時43分38秒)
- メッセージのみ - (2006年10月11日 15時29分40秒)
サイト内に表記された商品名、会社名等は各社の登録商標もしくは商標です。