石輪っぷり!
エントリーの追加をメールフォームの項目に反映させる
2007年6月 2日 2時34分 | コメント(0) | トラックバック(0)
※この投稿は180日以上前のものです。最新の情報とは異なる場合があります。
今日も数時間、いや、今日は十数時間ある仕組みの実装に頭をかかえました。
それは、MT でメールフォームを使った注文の仕組みを構築しているのですが、注文アイテムをエントリーとして追加し、それをフォームの項目に反映させるというもの。つまり、フォームのinput要素がエントリーに連動して追加されていくという仕組みです。
メールフォームの実装は H.Fujimoto氏のメールフォームプラグインを利用させていただき、任意のフィールドを追加できるので、とりあえずフォーム入力画面は簡単にできました。
<MTEntries>
<dt><label for="c<$MTEntryID$>"><$MTEntryTitle$></labrl></dt>
<dd><input type="text" name="c<$MTEntryID$>" id="c<$MTEntryID$>" size="30"></dd>
</MTEntries>
このようにすれば、エントリーの追加に連動して、input要素が追加されます。
しかし、問題は確認画面やメール本文への反映です。
メールフォームプラグインで追加した任意のフィールドの値を、確認画面等のテンプレートに表示するためには、<$MTMailPreviewExtParam name="フィールド名"$>という書き方をします。
この"フィールド名"には、通常任意に設定した名前を入れるのですが、今回はエントリーIDから自動生成した名前が入りますので、これを当てはめると、<$MTMailPreviewExtParam name="c<$MTEntryID$>"$>となります。
しかし!MTタグのアトリビュートにMTタグを使うという“入れ子”はできないのです。
そして、探すこと数時間。MTTagInvoke というプラグインが使えそうだということがわかりました。このプラグインは、個別ページに同じカテゴリーに属するエントリーの一覧を表示するといったことの実装によく使われています。
で、このプラグインを導入してテンプレートを編集するも、c<$MTEntryID$>のフィールドの値がうまく取得できません。
再び悩むこと数時間。メールフォームプラグインと MTTagInvoke プラグインを組み合わせた例は探しても見つからないし、やっぱり無理なのかなとあきらめかけた丑三つ時、悩んだ甲斐あって実装に成功。思わず「出来た!」と声を発しました。
<MTEntries>
<dt><$MTEntryTitle$></dt>
<dd><MTTagInvoke tag_name="MTMailPreviewExtParam">
<MTTagInvokeAttribute name="name">c<MTEntryID></MTTagInvokeAttribute>
</MTTagInvoke></dd>
</MTEntries>
これで、エントリーID から自動生成した個々のフィールドの値を表示することができました。
また、確認画面から送信データに渡す部分は次のようになります。
<MTEntries>
<input type="hidden" id="c<MTEntryID>" name="c<MTEntryID>" value="<MTTagInvoke tag_name="MTMailPreviewExtParam">
<MTTagInvokeAttribute name="name">c<MTEntryID></MTTagInvokeAttribute>
</MTTagInvoke>" />
</MTEntries>
一時は当初導入を検討していた Movable Type EC Pack にしなきゃダメかと考えたのですが、何とか MT +メールフォームによる簡易ショッピングシステムが構築できそうです。
トラックバック(0件)
- :
- « 前の記事
- Movable Type と SSL
- 次の記事 »
- Movable Type 4 発表

コメント(0件)
コメントする