フォームからのファイルの添付
フォームからアップロードされた画像やファイルを管理者宛てのメールに添付した状態で送ることができます。
この機能は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つの条件を満たすテキストユニットを作りましょう
- それぞれのボタンが用途に合わせてグルーピングされてある。
- メディア挿入ボタンがある。
- 進むボタン、戻るボタンがある。
- アイコンには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(); } } ]; });
ハンズオンは以上で終わりですが、アイデア次第ではもっと便利なボタンが作れると思います。余力のある方はぜひチャレンジしてみてはいかがでしょうか?
Ver. 2.0.0.1
CPI向け a-blog cms(通常版)ダウンロード
動的フォームの基本
動的フォームはエントリーページに設置することができます。動的フォームは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に蓄積されていきます。
動的フォームの項目を追加
フォームのパーツはテキスト、テキストエリア、ラジオ、セレクト、チェックボックスを追加することができます。フォームのパーツはエントリーのユニットと同じように項目を追加していってください。
[フォーム]ボタンを押すとフォームの編集画面に移動します。ここからテキスト、テキストエリア、ラジオ、セレクト、チェックボックスなどフォームの項目を追加することができます。
ラベル | フォームの項目名 | {label} |
---|---|---|
説明 | このフォームユニットの説明 | {caption} |
バリデータとコンバーターを使う
[入力チェック]のリンクをクリックすることでフォームの項目を必須にしたり、文字数制限をしたり、文字を変換したり設定することができます。フォームのバリデータとコンバーターの設定について一部ご紹介していきます。
必須にする
項目はrequiredを選択します。メッセージにエラーメッセージを入力してください。
数値になっているかチェック
項目はdigitsを選択します。メッセージにエラーメッセージを入力してください。

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

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

「全角カタカナ」を「半角カタカナ」に変換
1つのフォーム項目に複数のオプションを設定することができます。フォームの項目を保存するとエントリーに動的フォームが設置されました。
標準提供のテンプレートの中には、説明 {caption} が使われておりません。入力した内容を表示させる際には、テンプレートのカスタマイズが必要です。