メールフォームのフィールドごとにテンプレートを分けて表示する方法

2015.07.10

はじめまして。福岡でWEBエンジニアをしているryskです。

メールフォームを作っていて、あるフィールドを別のtableタグに分けたり、ある部分だけ違うHTMLタグで表現したいと思ったことはありませんか?

そんなときに便利な方法を今回紹介したいと思います!

メールフォームのフィールドごとに
テンプレートを分けて表示する

メールフォームをカスタマイズする場合はコアには直接手を入れずファイルをコピーし、 そのファイルを編集していくことが大事です。

理由としては、コアのファイルを直接編集してしまうとアップデートの際に編集した内容が上書きされてしまうからです。

<手順>

  1. ・/lib/Baser/Plugin/Mail/View/Elements/mail_form.php
    ・/lib/Baser/Plugin/Mail/View/Elements/mail_input.php
    上記2ファイルを自分が使っている
    ・theme/{自分のテーマ}/Elements/配下にコピーします。

  2. コピーしてきたmail_form.phpを編集する

※・mail_form.phpはフォーム本体を表示するためのファイルです。
 ・mail_input.phpはメールフィールドを表示するためのファイルです。

変更前 ( mail_form.php L.41行目, baserCMS ver3.0.7を使用 )

     $this->BcBaser->element('mail_input', array('blockStart' => 1));

変更後 ( mail_form.php )

     $this->BcBaser->element('mail_input', array('blockStart' => 1, 'blockEnd' => 4));
   	$this->BcBaser->element('mail_input_another', array('blockStart' => 5, 'blockEnd' => 7));

<解説>

$this->BcBaser->element()のオプションで"blockStart"と"blockEnd"というものがあります。 このオプションは、どこからどこまでのフィールドを表示するかを指定することができます。

スクリーンショット_2015-07-06_16_31_56.png

変更後のmail_form.phpを例にすると、1番目から4番目のフィールドは、mail_input.phpというエレメントプレートを使ってフィールドを表示し、
5番目から7番目のフィールドは、mail_input_another.phpというエレメントプレートを使って表示するということになります。

つまり、この$this->BcBaser->element()のオプション'blockStart', 'blockEnd'に値をセットすることで、どのフィールドはどのテンプレートで表示するかを指定できる事ができるようになります!

あとは、自分の好きなようにエレメントテンプレートを編集するだけです!

ぜひ試してみてくださいね!

木田 亮介  - 株式会社キャッチアップ / ウェブエンジニア

大阪生まれ。大学卒業後WEBエンジニア目指して動いてたら、気づいたら福岡にいました。よくぼーっとして口が開いてます。2014年10月より株式会社キャッチアップでWEBエンジニアしています。スターバックスと読書が好物。