こんにちは、ディレクターの[[八木]]です。

Movable Typeのテンプレートをカスタマイズして応募フォームつきのエントリーを生成するようにしました。特別なPlugInは不要で定型のフォームをイベントごとに一部差し替えて使い回したいケースに適しています(フォームの処理CGIは別途必要です)。
&ref(20070426_1123.png);

#blikimore

*目次 [#u1d8a29d]
#contents();

**要件 [#j09f358e]
- 月に何件かのイベントを開催しており、開催要項のお知らせをすると共に、それぞれ個別に応募フォームを設けたい。
- 応募フォームの入力項目(数・要素)は毎回同じだが、イベント名や参加希望日など毎回value値が変わる項目がある。
- イベントのお知らせはブログ(Movable Type)のエントリーとして配信することにし、各エントリー内に応募フォームも表示させる。

- お知らせだけでフォームを必要としないケースや、応募終了時にはフォーム部分を非表示にしたい。

**実装のポイント [#h8641491]
-1イベント-1エントリーで配信することにし、エントリー・アーカイブのテンプレート内に応募フォームを埋め込んだ。メンテナンス性を考慮して、応募フォーム部分はモジュール化しておく。
- 投稿時のユーザビリティを考慮してRight Fieldsを使った(ただし、やろうと思えばMTの標準だけでも実装可能)

***フォームを表示する/しないの切り替え [#dec5b1c4]
Right Fieldsで「募集中」のフィールドを設けた(チェックボックス)。このフィールド値のある/なしでフォームの表示モジュールのインクルードする/しないを判定する。

 <MTExtraFields>
   <MTIfExtraField field="formActive">
     <$MTInclude module="応募フォームのモジュール"$>
   </MTIfExtraField>
 </MTExtraFields>
-※"formActive"はRight Fieldsを使って追加した入力フィールド
-※Right Fieldsを使わないなら<MTIfNonEmpty tag="EntryMore">〜</MTIfNonEmpty> などを使って同じことができる。
|&ref(20070426_0948.png,,50%);|


***イベント名など毎回変わる要素に対応する [#x9a4dfbd]
Right Fieldsでイベント名、開催日などのフィールドを追加して、フォーム内に埋め込むことにした

 参加イベント:<$MTEventTitle$>
 <input name="event" type="hidden" value="<$MTEventTitle$>" />
-※<$MTEventTitle$>はRight Fieldsを使って追加したフィールドのカスタム・テンプレート・タグ

***イベント種別によってフォームを切り替える [#e1765058]
イベント種別によって入力項目のパターンが2種類あったので、2パターンのフォーム部分をそれぞれモジュール化し、カテゴリ判別でいずれかのフォームを呼び出すようにした。
 <!--
  "講演会"カテゴリのエントリーには講演会用フォームのフォームを表示させる
  -->
 <MTIfCategory name="講演会">
 <MTInclude module="講演会用フォーム">
 </MTIfCategory>
 
 <!--
 "説明会"カテゴリのエントリーには説明会参加フォームを表示
  -->
 <MTIfCategory name="説明会">
 <MTInclude module="説明会用フォーム">
 </MTIfCategory>
 
 <!-- 上記どちらでもなければフォームは表示されない -->
 ・・・

** まとめ [#n85da528]
- 定型のフォームをイベントごとに一部差し替えて使い回したいケースで有用。
- フォーム用の特別なプラグインなしで実現できる。でもRight Fieldsはあったほうがベター。
- MT標準の<MTIfNonEmpty tag="・・・">にしろ、Right Fieldsの<MTIfExtraField field="・・・">にしろ ELSE文が使えないので複雑な分岐処理には向かない。例えば「募集中」のチェックがあったら(IF)フォームを表示して、なかったら(ELSE)「終了しました」と表示させたい程度の簡単なことでも、エレガントな実装は難しい。


** 参考:フォーム関連のPlugIn [#u9fcca4f]
-[[メールフォームプラグイン>http://www.h-fj.com/blog/archives/2007/01/23-111038.php]]
--ブログサイトにいわゆるお問い合わせフォームを追加するプラグイン。藤本 壱さんが開発。
--CGI(フォームの処理プログラム部分)も同梱。
--Ajax対応らしい
-[[JMForm>https://sourceforge.net/projects/jmforms/]]
--エントリー内に、フォームを挿入するプラグイン。フォーム項目が毎回変わるならこれを使うとよさそう。
--[[世界中の1%の人々へ - 今日の開発::Movble Typeのエントリーにフォームを追加するプラグイン、JMForm>http://www.dakiny.com/archives/movable-type/timcejmform_movble_type/]] でTinyMCEに組み込みTinyMCE Plugin for Movable Typeの拡張機能キットとして配布する予定とのこと

#blikifooter(八木)
#comment

tag: [[MT>tag/MT]],[[MTテンプレート>tag/MTテンプレート]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

アークウェブのサービスやソリューションはこちら