Manual:Forms/ja

導入直後の状態の MediaWiki においても、さまざまなページ保守と管理機能のために フォーム 形式によるデータ入力が行われます. MediaWiki の記事自体が、自由書式の wiki テキスト フォームを使用して作成されます. MediaWiki の他のほとんどの機能と同様、フォーム入力に関してもカスタマイズの可能性は無数にあります. その実現方法には、既存の拡張機能を使用する方法や、既定のフォームをカスタマイズするテクニックがあります. またさらに高度な方法として、カスタムフォームを作成してインストールするテクニックがあります.

構造化されたデータを持つ記事を作成／編集する
 記事の中には、構造化されたデータと自由書式テキストが混在する場合があります. 例えば営業連絡先やバグレポート等を記録した記事には、一般的に、要件を満たした記事を作成するために必ず記入すべき、一定の入力項目があるものです. この場合には、何らかのフォームか、またはプリロードされた wiki テキストがあればより適当でしょう.

MediaWiki はこの状況を解決するために 4 つの戦略を有しています:


 * ページ作成時にテキストをプリロードする: 自由書式テキストにパラメータ値が空白になったテンプレートを記述することはごく一般的な手法です. ユーザは wiki テキスト中に記述されたこのテンプレートに、パラメータを一種のフォームとして記入します. このアプローチの利点は、2、3 の拡張機能を使用するだけで、基本的な wiki テキストと テンプレート の知識を持つエンドユーザによって簡単に実装できることです. 不利な点は、フォームが wiki テキスト中に記述されているため、ユーザによって不用意に上書きされる可能性があることです. このアプローチに関する詳細情報については Manual:Creating pages with preloaded text/ja を参照してください.


 * 特別ページ: 特別ページ は "仮想的" な MediaWiki 記事であり、その内容は PHP コードまたは JavaScript コードによって動的に生成されます(i.e. it's not saved as a wiki article in the database). They can be used to provide forms for structured input. For information on adding your own special page, see Manual:Special_pages.


 * 埋め込みフォームを持つ記事: フォームを利用したデータ入力の別アプローチとして、データ入力フォームを定義することをだけを目的とする記事を 1 つ作成する方法があります. この記事は一種の不可変な特殊ページのように見えます. このアプローチが特別ページ拡張機能アプローチに勝る主な利点は、ユーザがデータ入力フォームを通常の MediaWiki 編集プロセスの一部として作成できるようにする環境基盤により、基盤を統合できることです. 詳細情報は Intercepting page actions を参照してください.


 * 編集プロセスを代行する: 4 つ目のアプローチは、MediaWiki 編集プロセスの全部または一部を代行することです. MediaWiki がページをロードする際には、MediaWiki はアクション クエリパラメータをチェックし、その値に基づいて 1 つ、または複数のフック関数を呼び出します. これらのフックの 1 つに関数を付加することで、ページ編集プロセス全体を作り直すことができます. 詳細情報は 編集プロセスを代行する を参照してください.

埋め込みフォームを持つ特別ページ
拡張機能のいくつかは、特別ページを使用したフォームを作るためのフレームワークを提供します. 例えば:


 * Extension:Semantic Forms 拡張機能は、フォームを使って記事を追加・編集するための特別ページを提供します. この拡張機能には、この種のフォームを設計・保存するためのフレームワークが含まれています.
 * Extension:StructuredInput 拡張機能は、作成しようとする記事のタイプ別の特別ページを提供します. フォームは各々の特別ページに関連付けされ、フォームを生成する HTML コードを返す関数として保存されます.

自分で 1 から特別ページを開発するか、あるいは既存のフレームワークを改良して代替しようと考える読者は Manual:Special pages/ja を参照してください.

埋め込みフォームを持つ記事
埋め込まれたページ作成フォームを持つ記事を作成するには、2 段階の設計手順が必要です: セキュリティ上の理由から、MediaWiki は wiki テキストに直接記述できる HTML を一部制限しています. 導入直後の MediaWiki では、wiki テキストにデータ入力フォームを直接記述することはできません. しかしながら、一定の制約下で HTML を再び使用できるようにするための、様々な拡張機能が存在します.
 * 1) 記事にフォームを埋め込む
 * 2) 当該記事のページを自動編集する

Extension:Simple Forms 拡張機能は、上記の両方の段階をサポートします. HTML フォームは パーサ関数 を利用してページに埋め込まれます. フォームにより収集されたデータは、記事の場所と挿入する内容を定義したクエリパラメータをセットする JavaScript に渡されます. Simple Forms 拡張機能は、これらのパラメータを解釈し記事を編集するプロセスを適切に処理します.

もしページ生成プロセス全体をコントロールしたいなら、または単純に埋め込みフォームを持つ記事を生成するフレームワークについてより良いアイデアがある場合には、Extension:HTMLets 拡張機能の使用を検討するとよいでしょう. この拡張機能により HTML フォームを記述したファイルを定義できます. これらのファイルは MediaWiki インストレールディレクトリのサブディレクトリに保存します （この時当該ディレクトリには、保存したファイルの無作為更新やサーバへの直接アクセスを防止するために、適切にアクセス許可を設定しておきます）. ここで保存したファイル名が  であるなら、wiki テキストに   タグを記述すると、タグの位置にファイルで定義した HTML が挿入されます.

フォームファイル定義の次に、フォームによって収集されたデータを使用して記事を作成する必要があります. これは  クエリパラメータを含む URL を生成するフォームがあれば実現できます. MediaWiki はページをロードするとき action クエリパラメータをチェックし、その値に基づいて 1 つまたは複数のフック関数を呼び出します.

これらのほとんどのアクションには所定の意味があるので、標準アクション名を使うよりも、むしろ "autocreate" とか "autoedit" とかの独自のアクション名を作成して使うほうがよいでしょう. これを行うには UnknownAction フックに関数を追加します.

ページ内容の自動作成・更新の詳細に関しては、下記を参照してください:
 * EditPage.php
 * Manual:Edit token/ja

編集プロセスを代行する
特別ページや埋め込みフォームを持つ記事の代替手段として、ページの編集プロセスを代行させる方法があります. これは、一連の編集プロセス中に呼び出されるいくつかのフックの 1 つまたは複数に、カスタム関数を追加することで実現できます.


 * AlternateEdit フックは、action=edit 時に呼び出されます. このフックは、MediaWiki 導入サイトに対して edit アクションへの代替応答手段の使用を可能にする自由度を提供します.


 * EditPage::showEditForm:initial フックは、MediaWiki テキストを入力するためのテキストウィンドウを表示する際に呼び出されます. 拡張機能開発者はこのフックを使用して、単純な編集ボックスの代替機能を定義できます. このフックを使用する拡張機能の一覧については Category:EditPage::showEditForm:initial extensions を参照してください.

構造化データを E メールする
ウェブフォームもまた、構造化データを収集し、収集したデータを E メールまたは他の通知システムを利用して配信するためによく使用されます. いくつかの拡張機能は、フォームのこの使用目的を容易に実現するために設計されています. メールメッセージや差出人をカスタマイズするために使用できる一般用途の拡張機能を以下に示します:


 * Extension:EmailForm および Extension:FormHandler send form by Email 拡張機能は、記事テキストに埋め込み可能な wiki タグを提供します. このタグはフォームを使ってデータを収集し、収集したデータを事前定義した宛先一覧に E メールで送信します.
 * Extension:FormProc および Extension:FormTools 拡張機能は、MediaWiki 記事に記述した PHP コードを使用して E メールコンテンツを定義するためのフレームワークです. (注: PHP コードの埋め込みは潜在的セキュリティリスクを伴います. Extension:Runphp/Extension:Runphp page を参照してください. ）
 * Extension:FormMailer 拡張機能は、E メールメッセージ事前定義リスト宛に送信します. E メールメッセージの内容は、Extension:Simple Forms で作成したフォームの他、いかなるフォームにも対応します(???).

特殊用途の E メール送信用拡張機能もまた利用できます. これらの拡張機能を利用する上で設計作業はさほど必要とはされませんが、カスタマイズ可能な範囲はより限定されたものになります:


 * Extension:Mailman 拡張機能は、記事中に単純なフォームを埋め込みます. このフォームは Mailman が管理するメーリングリストを購読するために、簡単なフォームを生成します.

関連項目

 * Enhancing User Input
 * WYSIWYG editor