サンクスページの表示

サンクスページを作ってコンバージョン率を分析できるようにする

フォームは1枚のテンプレート( HTML )でフォームの入力から送信結果までが全て完結できます。この状態だと、最初から最後まで単一のURLで画面遷移が行われてしまうため、Google Analytics等でコンバージョンを調べる際に、ゴールページを設定することができませんでした。 サンキューページ( 送信のお礼ページ )を別で用意して、フォームの送信が完了したら、そのページが表示されるようにします。

サンキューページを用意する

thanks.html ファイルを作成し、この中にサンキューページの内容を入れていきます。まず、結果表示( step#result )のブロックをこのthanks.htmlに持ってきます。これで、送信完了画面でこのthanks.htmlのテンプレートが使われても、送信結果が表示できるようになります。

<!-- BEGIN_MODULE Form -->

<!-- BEGIN step#result -->
<!-- フォームステップ:完了画面 -->
<div class="acms-entry contactBox">
	<section class="entryColumn">
		<h2 class="contactH2">メールでのお問い合わせ</h2>
		<p class="message">お問い合わせありがとうございました。以下の内容で送信しました。</p>
		<!--#include file="/contact/form/confirm.html"-->
	</section>
</div>
<!-- END step#result -->

<!-- END_MODULE Form -->

確認ページからthanks.htmlに飛ぶようにする

確認ページにあるフォーム送信ボタンのformタグのactionにthanks.htmlに飛ぶように記述します。
フォームテンプレートの確認ボタンのactionを action="thanks.html" にしてください。

<!-- BEGIN step#confirm -->
<!-- フォームステップ:確認画面 -->
<!--#include file="/contact/form/confirm.html"-->
<form action="?step=reapply" method="post" class="acms-form acms-inline-btn">	<input type="hidden" name="step" value="reapply" />
	<input type="hidden" name="takeover" value="{takeover}" />
	<input type="submit" name="ACMS_POST_Form_Chain" value="入力画面へ戻る" id="btnToInput" class="acms-btn" />
</form>

<form action="thanks.html" method="post" class="acms-form">	<input type="hidden" name="To[]" value="{email}" />
	<input type="hidden" name="AdminReply-To[]" value="<{email}>" />
	<input type="hidden" name="AdminFrom[]" value="<{email}>" />
	<input type="hidden" name="step" value="result" />
	<input type="hidden" name="takeover" value="{takeover}" />
	<input type="hidden" name="id" value="contactForm" />
	<input type="submit" name="ACMS_POST_Form_Submit" value="送信" id="btnSubmit" class="acms-btn acms-btn-primary acms-btn-admin-save" />
</form>
<!-- END step#confirm -->

これで、完了ページを別URLで表示できるようになりました。

スマートフォンやタブレットのときにprettyPhotoを無効にする

エントリーの画像をクリックするとprettyPhotoで拡大されます。PCではprettyPhotoで画像を拡大してもいいのですが、スマートフォンやタブレットのときにprettyPhotoが動作してしまうと画面いっぱいに画像が広がってしまいprettyPhotoの閉じるボタンが押しづらかったりします。スマートフォンやタブレットのときはprettyPhotoを動作させずに、別ウィンドウで元画像が表示された方がいいです。

スマートフォンやタブレットのときはprettyPhotoを無効にする手順

フォームからのファイルの添付

フォームからアップロードされた画像やファイルを管理者宛てのメールに添付した状態で送ることができます。

この機能はVer. 1.6.0より使用できます。※ Ver. 1.6.0以前はWebサーバに置かれたファイルへのパスを管理者宛てのメールに記載する形を推奨していました

ファイルを添付するには、最低でも以下の設定が必要です。各項目の詳細については、本ページをご一読ください。

  • 「メールに添付する」を有効化する
  • formタグのenctypeを指定する

画像をアップロードして添付する場合は、合わせて以下の設定も必須です。

  • アップロード許可ファイル拡張子に画像ファイルの拡張子を追加する
  • 画像をアップロードする場合も、input要素に type="file"を指定する

「メールに添付する」を有効化する

サイト管理>フォームの順にページを移動し、任意のフォームIDのフォーム管理のページへ移動します。
「ファイル添付」項目の「メールに添付する」を選択して有効にします。


ファイル添付オプションの有効化

ファイル添付オプションの有効化


フォームからアップされた画像、ファイルはメールに添付された形式で送られます。
※メールのテンプレートファイルに特別な記述は不要です。


formタグのenctypeを指定する

また、formタグのenctype属性に enctype="multipart/form-data" と指定しないとファイル等をアップロードできないため、確認してください。

アップロード許可ファイル拡張子に画像ファイルの拡張子を追加する

画像を添付する場合、画像データとしてではなくファイルとしてアップロードを行います。コンフィグ>編集設定にあります、「アップロード許可ファイル拡張子」のドキュメントの欄に、許可する拡張子(例:png, jpg, jpeg など)を追記します。

アップデートできるファイル(拡張子)を限定する

添付できるファイル拡張子を限定することができます。

指定方法

<input type="hidden" name="pdf@extension[]" value="pdf" />
<input type="hidden" name="pdf@extension[]" value="zip" />

許可したい拡張子分だけ、カスタムフィールド名@extension[] で指定します。

エラーメッセージの記述方法

<!-- BEGIN pdf:v#extension -->許可されていない拡張子です<!-- END pdf:v#extension -->

ファイルサイズを限定する(Ver. 2.6.1.4 - )

サーバーの制限を超える容量のファイルを添付されるとPHPのエラーが表示されてしまい、メールも送信されません。そこで、ここでは添付ファイルの容量の制限を行いたいと思います。(Ver. 2.6.1.4より)

指定方法

<input type="hidden" name="pdf:v#filesize" value="200"> <!-- KBで指定(200KB) -->

上記のようにバリデータと同じようにテンプレート上に指定する方法もありますが、フォームの場合は合わせて管理画面からも設定する事をお勧めします。HTMLでの指定は、知識がある人ならブラウザ上から制限を解除する事ができてしまうからです。(それでもバリデータは適切なエラーメッセージを表示するために必要です)

フォーム詳細画面で「ファイルサイズ上限値」を設定してください。(KBで指定)


フォームオプションの設定

フォームオプションの設定


エラーメッセージの記述方法

指定した容量を超えた場合や、upload_max_filesizeを超えた場合のブロック

<!-- BEGIN pdf:v#filesize -->ファイルサイズが大きすぎます<!-- END pdf:v#filesize -->

post_max_sizeを超えた場合のメッセージブロック(全体)

upload_max_filesize超えた場合、POSTが空になるのでフィールド毎にエラーは表示できません。 なので、以下の記述で全体のエラーメッセージを出力します。

<!-- BEGIN post:v#filesize -->リクエストサイズが大きすぎます<!-- END post:v#filesize -->

ソースコードの例

以下は、変数名がpdfだった場合のソースコードの例です。

<tr>
    <th>PDF</th>
    <td>
        <!-- アップロード済みのファイルのプレビューエリア -->
        <!-- BEGIN_IF [{pdf@path}/nem/] -->
        <img src="%{ARCHIVES_DIR}{pdf@path}" width="450" alt="" /><br />
        <a href="%{ARCHIVES_DIR}{pdf@path}">{pdf@originalName}</a>
        <input type="hidden" name="pdf@old" value="{pdf@path}" />
        <input type="hidden" name="pdf@secret" value="{pdf@secret}" />
        <input type="hidden" name="pdf@originalName" value="{pdf@originalName}" />
        <label for="input-checkbox-pdf@edit">
            <input type="checkbox" name="pdf@edit" value="delete" id="input-checkbox-pdf@edit" />
            削除
        </label><br /><!-- END_IF -->

        <!-- ファイルをアップロードするフィールド -->
        <input type="hidden" name="pdf:v#filesize" value="500" id="pdf-v-filesize"> <!-- 500KBで制限 -->
        <input type="file" name="pdf" size="20" />
        <input type="hidden" name="field[]" value="pdf" />
        <input type="hidden" name="pdf:extension" value="file" />
        <input type="hidden" name="pdf@extension[]" value="pdf" />

        <!-- エラーメッセージ -->
        <div data-validator-label="pdf-v-filesize" class="validator-result-{pdf:v#filesize}">
            <p class="error-text"><span class="acms-icon acms-icon-attention"></span>ファイルサイズが大きすぎます。</p>
        </div>
        <div data-validator-label="pdf-v-extension" class="validator-result-{pdf:v#extension}">
            <p class="error-text"><span class="acms-icon acms-icon-attention"></span>許可されていない拡張子です。</p>
        </div>
    </td>
</tr>

<!-- BEGIN post:v#filesize -->リクエストサイズが大きすぎます<!-- END post:v#filesize -->

値を挿入するinput要素は、type="file"を指定する

画像をアップロードする場合も、値を挿入するinput要素の type属性にはfileを設定してください。

記述例

<input type="file" name="pdf" size="20" />

変数名

ここではファイル添付をした時に使用できる変数名を解説します。以下変数名が「pdf」だった場合で解説します。



変数名 出力される内容
{pdf@path} ファイルが実態があるURLです。ファイル名なランダムなものになっています。
{pdf@originalName} 元のファイル名です。ダウンロード時のファイル名も元のファイル名が使用されます。
{pdf@secret} セキュリティのためのランダム文字列です。

E: ちょっとリッチなテキストユニットを作ってみよう

Ver. 2.8 からテキストユニットにLiteEditorという弊社が独自に開発したJavaScriptライブラリが使用されるようになりました。

テキストユニット(LiteEditor)拡張方法基礎知識

テキストユニット(LiteEditor)のボタンは一からボタンを作っていくことや既にあるボタンに対して新しくボタンを追加することもできます。

デフォルトのボタンを残して新しいボタンを追加する

既存の、「リンク」「強調」「重要」などのボタンに加えて新しいボタンを追加する場合は、下のようなソースコードになります。

ACMS.Ready(function(){
  ACMS.Config.LiteEditorConf.btnOptions.push({
    label: '<span class="lite-editor-font-underline"></span>',
    tag: 'u'
  });
});

複数追加したい場合は、下記のように pushメソッド をその分実行してください。

ACMS.Ready(function(){
  ACMS.Config.LiteEditorConf.btnOptions.push({
    label: '<span class="lite-editor-font-underline"></span>',
    tag: 'u',
    group: 'mark'
  });
  ACMS.Config.LiteEditorConf.btnOptions.push({
    label: '<span class="lite-editor-font-italic"></span>',
    tag: 'i',
    group: 'mark'
  });
});

デフォルトで用意されているボタンを消して、一からボタンを作る

ボタンを一から作りたい人は、ACMS.Config.LiteEditorConf.btnOptions に新しく配列を代入することで可能になります。この際に、ACMS.Configの設定はACMS.Readyメソッドで括ることに注意してください。ACMS.ReadyがACMS.Configのデフォルトの設定を上書きする最適なタイミングになります。

ACMS.Ready(function(){
  ACMS.Config.LiteEditorConf.btnOptions = [];
});

配列には以下のようにオブジェクトを入れることができます。例えば下のソースコードでは、アンダーラインを挿入するためのボタンを追加しています。

ACMS.Ready(function(){
  ACMS.Config.LiteEditorConf.btnOptions = [{
    label: '<span class="lite-editor-font-underline"></span>',
    tag: 'u'
  }];
});

2つ以上ボタンを追加する場合はカンマ区切りでオブジェクトを渡してあげます。次の例ではアンダーライン挿入ボタンに加えて、斜体挿入ボタンを追加しています。

ACMS.Ready(function(){
  ACMS.Config.LiteEditorConf.btnOptions = [{
    label: '<span class="lite-editor-font-underline"></span>',
    tag: 'u'
  },
  {
    label: '<span class="lite-editor-font-italic"></span>',
    tag: 'i'
  }];
});

課題


完成図

完成図


上の画像のような以下5つの条件を満たすテキストユニットを作りましょう

  1. それぞれのボタンが用途に合わせてグルーピングされてある。
  2. メディア挿入ボタンがある。
  3. 進むボタン、戻るボタンがある。
  4. アイコンにはLiteEditorにデフォルトで用意されているアイコンフォントを使用。

1. それぞれのボタンが用途に合わせてグルーピングされてある

この際にgroupというプロパティを使用して例えば以下のようにボタンをグルーピングします。ボタン同士が同じグループに属するのであればgroupに同じ値を代入します。下の場合はmarkというボタングループにしています。

ACMS.Ready(function(){
  ACMS.Config.LiteEditorConf.btnOptions = [{
    label: '<span class="lite-editor-font-underline"></span>',
    tag: 'u',
    group: 'mark'
  },
  {
    label: '<span class="lite-editor-font-italic"></span>',
    tag: 'i',
    className: '',
    group: 'mark'
  }];
});

他にもボタンにはオプションとして以下のようなプロパティを設定可能です。



label ボタンのラベル内容です。テキストでもHTMLでも可
tag このボタンが押された時に挿入されるタグ
className このボタンが押された時にタグに追加されるクラスネーム
sampleText テキストが選択されていない時に挿入されるサンプルテキスト
action redo, undo, extraから選択可能。extraの場合は、ボタンクリック時にonClickが動作します。
group ボタンのグループ分けに使用します。同じ名前にすることでボタン同士を同じグループにできます。
selfClassName ボタン自体にクラスを付与したい時に指定します。
onClick ボタンを押された時に動作するコールバック
onInit テキストユニットがDOMに出現した際に動作するコールバック
onRender テキストユニットが再描画された時に動作するコールバック

2. メディア挿入ボタンがある

下記のように、js-media_insertというクラスが振られたボタンを追加することでメディアユニットを活用するボタンを追加可能です。js-media_insert自体は組み込みJSですのでテキストユニット(LiteEditor)とは関係ありません。

ACMS.Ready(function(){
  ACMS.Config.LiteEditorConf.btnOptions = [{
    label: '<span class=" acms-admin-icon acms-admin-icon-unit-image acms-admin-padding-none"></span>',
    selfClassName: 'js-media_insert',
    action: 'extra',
    group: 'extra',
    onClick: function(self) {
        self.saveSelection();
    }
  }];
});

3. 進むボタン、戻るボタンがある

以下のようにactionプロパティにundo/redoを代入することでそのボタンにundo/redoの機能を持たせることができます。

ACMS.Ready(function(){
    ACMS.Config.LiteEditorConf.btnOptions = [
        {
            label: '<span class="lite-editor-font-back"></span>',
            action: 'undo',
            group: 'action'
        },
        {
            label: '<span class="lite-editor-font-go"></span>',
            action: 'redo',
            group: 'action'
        }
    ]
});

4. アイコンにはLiteEditorにデフォルトで用意されているアイコンフォントを使用

またLiteEditorにはいくつかのアイコンフォントが用意されていますのでこれを活用してボタンのラベルを調整しましょう。



アイコン クラス名
lite-editor-font-back
lite-editor-font-go
lite-editor-font-bold
lite-editor-font-italic
lite-editor-font-underline
lite-editor-font-link

最終的なソースコード

最終的には以下のようなソースコードになります。この際に、下のJavaScriptはacms.jsを読み込んだ後に記述することに気をつけましょう。

ACMS.Ready(function(){
    ACMS.Config.mediaLibrary = 'off';
    ACMS.Config.LiteEditorConf.btnOptions = [
        {
            label: '<span class="lite-editor-font-back"></span>',
            action: 'undo',
            group: 'action'
        },
        {
            label: '<span class="lite-editor-font-go"></span>',
            action: 'redo',
            group: 'action'
        },
        {
            label: '<span class="lite-editor-font-link"></span>',
            tag: 'a',
            className: '',
            group: 'mark'
        },
        {
            label: '<span class="lite-editor-font-bold"></span>',
            tag: 'strong',
            className: '',
            group: 'mark'
        },
        {
            label: '<span class="lite-editor-font-italic"></span>',
            tag: 'i',
            className: '',
            group: 'mark',
        },
        {
            label: '<span class="lite-editor-font-underline"></span>',
            tag: 'u',
            className: '',
            group: 'mark',
        },
        {
            label: '<span class="acms-admin-icon acms-admin-icon-unit-image acms-admin-padding-none"></span>',
            selfClassName: 'js-media_insert',
            action: 'extra',
            group: 'extra',
            onClick: function(self) {
                self.saveSelection();
            }
        }
    ];
});

ハンズオンは以上で終わりですが、アイデア次第ではもっと便利なボタンが作れると思います。余力のある方はぜひチャレンジしてみてはいかがでしょうか?

動的フォームの基本

動的フォームはエントリーページに設置することができます。動的フォームはHTMLの知識のない人でもフォームを設置できる仕組みになっています。例えば採用ページのエントリーを書いて、更新者がそのページに採用フォームをつけることができます。

フォームでは以下のような種類のフォームパーツが用意されています。

  • テキスト
  • テキストエリア
  • ラジオ
  • セレクト
  • チェックボックス

動的フォームの導入方法

動的フォームはコンフィグ管理の機能設定から機能を有効にすることができます。動的フォーム項目の動的フォームを利用可能にするにチェックをしてください。


動的フォームの有効化

動的フォームの有効化


エントリーの詳細ページを見てみるとエントリー管理ボタンのところに[フォーム]というボタンが追加されています。このボタンを押してエントリーに動的フォームを作っていきます。


動的フォームの編集ボタン

動的フォームの編集ボタン


動的フォーム作成画面ではエントリーのユニットと同じようにフォームのパーツが追加できます。ここにはフォームIDを紐づけるフォームセットという項目があります。こちらにフォームIDを設定していきます。次は動的フォーム用のフォームIDの作り作り方について解説します。


動的フォーム編集画面

動的フォーム編集画面


フォームIDを作成

フォームIDは通常のフォームと同じようにフォーム管理の[フォームIDを作成]ボタンから作っていきます。 フォームID、フォーム名、一般のメールテンプレート、管理者のメールテンプレート、管理者のメールアドレスを設定していきます。

メールテンプレートのパスについて

動的フォームのメールテンプレートはsystemのテーマフォルダに用意されています。通常のフォームのメールテンプレートは自分で自由にレイアウトができますが、動的フォームでは自由にレイアウトなどカスタマイズができません。動的フォームのメールテンプレートのパスは以下のようになります。

SubjectTpl/include/form/subject.txt
BodyTpl/include/form/body.txt
AdminSubjectTpl/include/form/adminsubject.txt
AdminBodyTpl/include/form/adminbody.txt

上記は /themes/system/include/ 以下に存在する各ファイルとなりますが、実際に使用する場合には本文など適宜カスタマイズが必要になるため、使用するテーマディレクトリへのコピーをしてカスタマイズ・利用をすることをお勧めします。
一例として、 /themes/使用テーマディレクトリ/recruit/form/ 以下に各ファイルをコピーしカスタマイズしたものを使用する場合の設定画面は以下のようになります。他の内容に動的フォームを使いたい場合には、 /themes/使用テーマディレクトリ/aaaaa/form/ のようにもう1セットコピーして利用すれば、各フォームに合わせたメールテンプレートが使用できます。


フォームID作成画面

フォームID作成画面


動的フォーム画面からフォームIDをセット

動的フォームを設置したいエントリーに戻り、[フォーム]ボタンを押して動的フォーム作成画面で先ほど作成したフォームIDを設定してください。動的フォームで送信されたデータはこのフォームIDに蓄積されていきます。

動的フォームの項目を追加

フォームのパーツはテキスト、テキストエリア、ラジオ、セレクト、チェックボックスを追加することができます。フォームのパーツはエントリーのユニットと同じように項目を追加していってください。


動的フォーム編集ボタン

動的フォーム編集ボタン


[フォーム]ボタンを押すとフォームの編集画面に移動します。ここからテキスト、テキストエリア、ラジオ、セレクト、チェックボックスなどフォームの項目を追加することができます。


動的フォーム編集画面

動的フォーム編集画面


ラベルフォームの項目名{label}
説明このフォームユニットの説明{caption}

バリデータとコンバーターを使う

[入力チェック]のリンクをクリックすることでフォームの項目を必須にしたり、文字数制限をしたり、文字を変換したり設定することができます。フォームのバリデータとコンバーターの設定について一部ご紹介していきます。

必須にする

項目はrequiredを選択します。メッセージにエラーメッセージを入力してください。


必須入力

必須入力


数値になっているかチェック

項目はdigitsを選択します。メッセージにエラーメッセージを入力してください。


数値かチェック

数値かチェック


入力文字数を制限する

項目はminLengthか、maxLengthを選択します。値には制限したい文字数を入力し、メッセージにエラーメッセージを入力してください。


文字数のチェック

文字数のチェック


入力した文字を変換する

入力の変換 ( converter )を選択し、値に変換したい種類を入力してください。コンバーターの変換種類についてはリファレンスのconverter ( c )の項目を御参考ください。


「全角カタカナ」を「半角カタカナ」に変換

「全角カタカナ」を「半角カタカナ」に変換


1つのフォーム項目に複数のオプションを設定することができます。フォームの項目を保存するとエントリーに動的フォームが設置されました。


動的フォーム完成例

動的フォーム完成例


標準提供のテンプレートの中には、説明 {caption} が使われておりません。入力した内容を表示させる際には、テンプレートのカスタマイズが必要です。