フォームに項目を追加する

目標

お問い合わせフォームに「年齢」という項目を追加しましょう。

解説使用テーマbeginner

Before

After

目次

  1. カスタムフィールドメーカーを使って入力欄を作成する
  2. 追加した項目を入力内容確認画面で表示する
  3. 送信するメールの本文に追加した項目を表示する
  4. 補足:JavaScriptによるバリデート

カスタムフィールドメーカーを使って入力欄を作成する

レベル7「フィールドの入力項目をカスタマイズする①テキストのみ」や、レベル8「フィールドの入力項目をカスタマイズする②テキスト+画像」ではカスタムフィールドメーカーを使ってテキストや画像の入力欄をカスタマイズしてきましたが、a-blog cms では複雑な条件付けが必要なフォームの入力項目についても、カスタムフィールドメーカーを利用して作成することができます。

今回は入力欄の種類について、セレクトボックスで実装していきましょう。作成モードはデフォルトの「カスタムフィールド」のまま、以下のように入力してソースを生成します。

入力欄の種類セレクトボックス
タイトル年齢
フィールドage
選択項目10歳未満10歳未満
10代10代
20代20代
30代30代
40代40代
50代50代
60歳以上60歳以上


<table class="acms-admin-table-admin-edit">
  <tr>
    <th>年齢</th>
    <td><select name="age" class="acms-admin-form-width-full">
        <option value=""></option>
        <option value="10歳未満" {age:selected#10歳未満}>10歳未満</option>
        <option value="10代" {age:selected#10代}>10代</option>
        <option value="20代" {age:selected#20代}>20代</option>
        <option value="30代" {age:selected#30代}>30代</option>
        <option value="40代" {age:selected#40代}>40代</option>
        <option value="50代" {age:selected#50代}>50代</option>
        <option value="60歳以上" {age:selected#60歳以上}>60歳以上</option>
      </select>
      <input type="hidden" name="field[]" value="age"></td>
  </tr>
</table>

この作業で生成された入力用ソースは上記になります。

一般的なカスタムフィールドを設置する際はソースの生成は以上になりますが、フォームを作成する場合はこの限りではありません。場合によっては、入力を必須にしたい項目や最大文字数などを設定したい項目が出てくるかと思います。そのような時は、オプション機能を利用することで入力情報を精査することができます。



「選択項目」の下部に表示されている「オプション」をクリックすると、入力チェック項目について指定するボックスが表示されます。今回は試しに「必須(required)」を指定してみましょう。

入力チェック必須(required)
メッセージ年齢を選択してください

「値」の項目は、入力チェックを「最大文字数」などと設定した際に、その文字数(例:400 など)を指定するためのものです。今回は入力チェックに「必須」を設定したので空欄にしておきます。

オプションを指定して再度 [生成] をクリックすると、下記のようなソースが表示されます。

<table class="acms-admin-table-admin-edit">
  <!-- 先ほど生成したソースコードの下に生成されます -->
  <tr>
    <th>年齢</th>
    <td><select name="age" class="acms-admin-form-width-full">
        <option value=""></option>
        <option value="10歳未満" {age:selected#10歳未満}>10歳未満</option>
        <option value="10代" {age:selected#10代}>10代</option>
        <option value="20代" {age:selected#20代}>20代</option>
        <option value="30代" {age:selected#30代}>30代</option>
        <option value="40代" {age:selected#40代}>40代</option>
        <option value="50代" {age:selected#50代}>50代</option>
        <option value="60歳以上" {age:selected#60歳以上}>60歳以上</option>
      </select>
      <input type="hidden" name="field[]" value="age">
      <input type="hidden" name="age:v#required" id="age-v-required" value="">
      <!-- BEGIN age:validator#required -->
      <p class="acms-admin-text-error">年齢を選択してください。</p>
      <!-- END age:validator#required -->
    </td>
  </tr>
</table>

先ほど生成したソースと見比べてみると、td タグ内末尾に下記のバリデーターが追記されていることがわかりますね。このバリデーターによって入力チェックが行われます。

<input type="hidden" name="age:v#required" id="age-v-required" value="">
<!-- BEGIN age:validator#required -->
<p class="acms-admin-text-error">年齢を選択してください</p>
<!-- END age:validator#required -->

では、生成した入力用ソースをテンプレートに追記していきましょう。お問い合わせページに関するテンプレートは contact フォルダにまとめられており、その中でもフォームに関わるものは form フォルダで管理されています。以下はそれぞれのテンプレートの説明です。

/contact/form

step.htmlページの表示状況に合わせて、フォームの上部に「1.内容の入力」「2.内容の確認」「3.送信完了」の見出しを表示するためのテンプレートです。

1.入力の内容 2.内容の確認 3.送信完了

ページの表示状況


input.htmlページの表示状況が「1.内容の入力」の時に表示するテンプレートです。新規項目の入力ソースについてはこのテンプレートに追記します。
confirm.htmlページの表示状況が「2.内容の確認」の時に表示するテンプレートです。新規項目の出力ソースについてはこのテンプレートに追記します。
main.htmlstep.html input.html confirm.html を総括するテンプレートです。

カスタムフィールド メーカーで生成したフォームの入力用ソースを記述するテンプレートは input.html になります。では早速、該当のファイルを開いて先ほどの入力用ソースを追記しましょう。テンプレート内の一番最後にコピー&ペーストしてください。

/contact/form/input.html

省略
</ul>

<table class="acms-admin-table-admin-edit">
  <tr>
    <th>年齢</th>
    <td><select name="age" class="acms-admin-form-width-full">
        <option value=""></option>
        <option value="10歳未満" {age:selected#10歳未満}>10歳未満</option>
        <option value="10代" {age:selected#10代}>10代</option>
        <option value="20代" {age:selected#20代}>20代</option>
        <option value="30代" {age:selected#30代}>30代</option>
        <option value="40代" {age:selected#40代}>40代</option>
        <option value="50代" {age:selected#50代}>50代</option>
        <option value="60歳以上" {age:selected#60歳以上}>60歳以上</option>
      </select>
      <input type="hidden" name="field[]" value="age">
      <input type="hidden" name="age:v#required" id="age-v-required" value="">
      <!-- BEGIN age:validator#required -->
      <p class="acms-admin-text-error">年齢を選択してください。</p>
      <!-- END age:validator#required -->
    </td>
  </tr>
</table>

お問い合わせフォームに年齢の項目が追加されました。



またセレクトボックスで何も選択しないまま [送信内容の確認へ] のボタンをクリックすると、バリデーターの挙動を確認することができます。先ほどカスタムフィールドメーカーで入力した「年齢を選択してください」が注意文として表示されたら成功です。



最後に仕上げとして既存のフォームに習ってスタイルを整えていきましょう。

構造や変数などは保持したまま、タグやクラスを書き換えると以下のようになります。また場所についても、フォーム全体を含む ul タグ内に移動してください。

<li class="contact-form-group">
	<p class="contact-form-label"><label for="age">年齢</label><span class="label-required">必須</span></p>
	<div class="contact-form-control">
		<select name="age" class="form-select" name="age">
			<option value="" selected="selected">選択してください</option>
			<option value="10歳未満" {age:selected#10歳未満}>10歳未満</option>
			<option value="10代" {age:selected#10代}>10代</option>
			<option value="20代" {age:selected#20代}>20代</option>
			<option value="30代" {age:selected#30代}>30代</option>
			<option value="40代" {age:selected#40代}>40代</option>
			<option value="50代" {age:selected#50代}>50代</option>
			<option value="60歳以上" {age:selected#60歳以上}>60歳以上</option>
		</select>
			<input type="hidden" name="field[]" value="age">
			<input type="hidden" name="age:v#required" id="age-v-required" value="">
			<!-- BEGIN age:validator#required -->
			<p class="error-text"><span class="acms-icon acms-icon-attention"></span>年齢を選択してください</p>
			<!-- END age:validator#required -->
	</div> 
</li>


以上で入力欄の作成は完了です。

追加した項目を入力内容確認画面に表示する

さて、年齢の入力欄を設置したところで、一度フォームから記入事項を送信してみましょう。

「必須」と表記のある全ての項目について入力し、[送信内容の確認へ] ボタンをクリックすると、入力内容の確認画面が表示されます。しかし現状では、新規追加項目の「年齢」は表示されていません。



確認画面で年齢を表示させるには、テンプレート confirm.html に出力用ソースを記述する必要があります。

/contact/form/confirm.html

<tr class="contact-form-group">
	<th class="contact-form-label">ご用件</th>
	<td class="contact-form-control">{description}</td>
</tr>

該当テンプレートを開くと、上記の方式でそれぞれの項目の入力事項を出力していることがわかります。記述自体が短く編集しやすい形になっているので、今回はこのソースを型としてコピー&ペーストし、年齢の出力用ソースを作成していきましょう。変更は2箇所です。

  • 「ご用件」を「年齢」へ変更
  • {description} を {age} へ変更

場所については「お客様情報」table 内の一番下に設置します。

<table class="contact-form">
   省略
	<tr class="contact-form-group">
		<th class="contact-form-label">年齢</th>
		<td class="contact-form-control">{age}</td>
	</tr>
</table>

保存をしたら再度フォームから記入事項を送信してみましょう。セレクトボックスで選択した項目が確認画面に表示されていれば成功です。



送信するメールの本文に追加した項目を表示する

サイト内に新設するカスタムフィールドならば以上で作業は終了ですが、フォームのカスタマイズでは送信するメールへの記載も必要になります。現状では、送信されるメールには年齢は表示されていません。


管理者宛メール内容

管理者宛メール内容


一般メール内容

一般メール内容


レベル5「お問い合わせフォームの設定を最適化する」でも記載した通り、フォームのメールの管理はフォーム設定画面で行います。

  1. 管理ボックスから [管理ページ] ボタンをクリックする
  2. サイドメニュー内 [フォーム] をクリックする
  3. リスト内「お問い合わせフォーム」右側の [変更] ボタンをクリックする

下図のようにそれぞれの件名・本文について管理画面で設定していれば、画面内より「一般メール設定」と「管理者宛メール設定」の2箇所を編集します。それらが空欄の場合は a-blog cms のテンプレートを使用することになりますので、作業は該当テンプレート /contact/form/body.html , /contact/form/adminbody.html 内になります。なお、編集場所がどちらの場合でも追記する内容は変わりません。




メール内で「ご住所」を表示している下に「年齢」の記述を追加しましょう。全体像は以下です。

会社名    : {organization}[raw]
お名前    : {family-name}[raw] {given-name}[raw]
メールアドレス: {email}
お電話番号  : {tel}
ご住所    : 〒{postal-code} {address-level1} {address1} {address2}
年齢     : {age}[raw]

設定を保存したら、再びフォームよりメールを送信しましょう。以下のように年齢について表示されていれば、チュートリアルの課題は達成です。


一般メール内容

一般メール内容


管理者宛メール内容

管理者宛メール内容


補足:JavaScriptによるバリデート

今回フォームの入力欄を新設するにあたりバリデータを利用しましたが、a-blog cms ではカスタムフィールドのオプションから指定する方法の他に、JavaScript を使用する方法を用意しています。



双方の主な違いは処理タイミングです。オプションから指定する場合は、サーバー側でエラー検出しているため「送信内容の確認へ」ボタンをクリックした後にエラー判定をしています。一方、JavaScriptを利用したバリデーター機能を使うとブラウザ側で処理できるため、入力していたテキストボックスからカーソルが外れたタイミングでエラー判定することができます。さらに、サーバーにかかる負荷を軽減することもできます。 JavaScriptを利用したバリデーターについては少々発展的な内容になるため、詳しくはJavaScriptによるバリデート | フォーム | ドキュメント | a-blog cms developerをご覧ください。

サイトを公開するには

目標

サイトを公開するまでの手順を学びましょう。

解説使用テーマbeginner2020

目次

  1. サイトを公開する手順について
  2. チェックリスト機能を活用しよう

サイトを公開する手順について

a-blog cms で制作したサイトを実際に公開するには以下の作業が必要です。

  1. 本番環境に a-blog cms を無料でダウンロードする
  2. テストサイトがある場合:テストサイトのファイルを本番環境に移動する
  3. テストサイトがある場合:テストサイトのデータベースのデータを本番環境に移動する
  4. ドメイン名の設定を変更する
  5. 公開前チェックをする
  6. 公開!

それぞれの詳しい操作方法については 下記ドキュメントページに記載しています。本チュートリアルは a-blog cms.io を使ったお試し環境を想定していますが、本番環境でのサイト制作に挑戦する際には是非こちらを参考にしてください。

サイト公開時 | ドキュメント | a-blog cms developer

また、a-blog cms はダウンロードからテストサイトの構築までは無料で行っていただけます。a-blog cms.io は30日限定ですが、公式サイトからのダウンロードは無期限で使用可能です。

ダウンロード方法としては、ご利用の PHP のバージョンに合わせたパッケージを落として手作業で設置する方法のほかに、シェア率の高いサーバーを対象とした「簡単セットアップ」を用意しています。簡単セットアップはパッケージを該当ディレクトリに設置するだけで自動的に全てのファイルが展開して環境が構築されるので、サーバーサイドに詳しくない方もお気軽にご利用いただけます。是非一度、下記ダウンロードページより詳細をご覧ください。

ダウンロードページはこちら

またサイトを公開する際は、下記ライセンス購入ページよりログインとサイト登録・購入を行い、 licence.php を発行してください。licence.php を該当のディレクトリに設置するまでは制作中のサイトはインデックスされず、サイトアクセス時には警告が表示されます。

ライセンス購入ページはこちら

チェックリスト機能を活用しよう

a-blog cms はサイト公開にあたり、各々の項目が本番サイトに最適な設定にされているかチェックする「チェックリスト機能」を用意しています。このリストは管理画面よりご覧になれます。

  1. 管理画面へアクセスする
  2. [チェックリスト] をクリックする


公開前はこの画面より、以下の 項目について確認していきましょう。

デバッグモードを OFF にする

制作時にはデバッグモードがONになっています。



デバッグモードがONになっている時は、サイトの修正を即時に反映するために全ブログのキャッシュ機能が無効になっています。また、ブラウザからHTMLソース内を確認した時にはインクルード先のパスがコメント表示されます。

このデバッグモードをOFFにしてキャッシュを有効にすることで、サイトの表示速度が早くなり、HTMLソースについても不要な部分については表示されなくなります。以上のことから、公開時には必ずOFFに設定するようにしましょう。

この作業はテンプレートで行う必要があります。ルートフォルダ直下にある config.server.php を開き、以下のソース部分について 1 となっている部分を 0 に書き換えてください。

// 本番運用時にDEBUG_MODEを 0 に設定して下さい
define('DEBUG_MODE', 1);
define('BENCHMARK_MODE', 0);
// 本番運用時にDEBUG_MODEを 0 に設定して下さい
define('DEBUG_MODE', 0);
define('BENCHMARK_MODE', 0);

再度チェックリスト機能を確認して、デバックモードの状態が OFF と表記されていれば完了です。



キャッシュ機能を ON にする

キャッシュ機能はブログごとに ON / OFF が設定でき、チェックリストでこの一覧を確認することができます。キャッシュを有効にしておくことでサーバの不可軽減や、サイト表示速度の向上につながるので、基本的には ON にしておきましょう。



もし off と表示されている項目があれば、右側に表示されている [編集] ボタンより変更することができます。機能設定画面一番上の「キャッシュ」の項目にチェックをいれてください。




フォームIDに設置しているメールアドレスが正しいか確認する

レベル5「お問い合わせフォームの設定を最適化する」では、フォーム送信のテストとして設定画面で自分のメールアドレスを設定しました。サイト公開時にこの部分の編集を忘れてしまうと、フォームから送られてくる内容はサイトの管理者に届けることができません。したがって公開前にはメールアドレスが正規の管理者のものになっているか確認することが必要です。

チェック機能では、フォーム設定画面でアドレスを記入している全ての部分を一覧で表示しています。



正しいアドレスが設定されていたら、念のためサイト管理者にフォームから送信のテストをしておくとサイト公開後もより安心です。

テストデータを削除する

サイト制作時には、動作確認のため度々テストエントリーやテストファイルを作成するかと思います。サイト公開後に誤ってそれらの情報が残ってしまわないようテストデータについてはひと通りチェックし、不要なものを削除しておきましょう。

確認するのは以下のようなデータです。

  • テストエントリー:動作確認のためのエントリーなど
  • テストユーザー:制作のためのユーザーなど
  • テストフォルダ・テストファイル:試作のためサーバー上に残っているテストデータなど
  • テンプレート上に残ってしまった制作環境のホストやパス

チェックリストの最後にある「コンフィグ検索」からは、キーワードを入力してこれらのテストデータがデータベースに残っていないか確認することができます。この機能を使えば一覧で確認できるので時間短縮にもつながります。



またテストデータが見つかった際にはテキストリンクから直接設定画面に移動することができるので、修正作業についても簡潔に行っていただけます。

正式ライセンスをあてる

このチュートリアルで想定している a-blog cms.io では作業はできませんが、実際にサイトを公開する際には「ライセンス」の項目も確認するようにしましょう。正式なライセンスがあたっている場合は、チェックリストにその状態が表示されます。



公開にあたって最低限チェックする項目は以上になります。公開時の作業を効率的にするために、是非このチェックリストを有効活用してくださいね。

Ver. 3.1.6 リリースのお知らせ


この記事では、2023年12月19日にリリースした Ver. 3.1.6 の修正内容について紹介いたします。

現在お困りの問題に該当する項目がありましたら、お早めにバージョンアップのご検討をお願いいたします。

Ver. 3.1.6 リリースノート

  • CMS-6588 メール認証前のユーザーが別ブログに存在する場合、読者を「どこでもログイン」を有効で作成する設定で会員登録を行った場合でも同一メールアドレスのユーザーが作成されてしまう問題の修正
  • CMS-6595 カスタムユニットでメディアフィールドがあると、パフォーマンスが低下する問題を修正
  • CMS-6597 ログイン中にユーザー権限が入ったCookieを追加で付与するオプションを用意(extra_logged_in_cookie)
  • CMS-6599 カスタムフィールドの検索機能で、「.」を含む文字列で検索した場合、「.」以降の文字列がファイルの拡張子として判断され、a-blog cms が動作しない問題の修正
  • CMS-6600 PHP8.0以上の環境で、エラー制御演算子(@)を利用して発生したエラーが監査ログとして保存されてしまう問題の修正
  • CMS-6603 PHP8.1環境で acmsSetCookie 関数の$valueにnullを渡すとPHPエラーが発生する問題の修正
  • CMS-6604 エントリーのWebhook機能実行時にPHPの型エラーが発生する問題の修正
  • CMS-6605 子ブログからのサインインをした時のリダイレクト先が404になる問題を修正
  • CMS-6607 引用ユニットでアクセスできないURLを入力するとPHPエラーが出てしまい保存できない問題を修正
  • CMS-6609 スケジュールモジュールの表示設定でユニットが空で設定されている場合、PHPエラーが出る問題を修正

主なリリースノートの詳細な内容

CMS-6595 カスタムユニットでメディアフィールドがあると、パフォーマンスが低下する問題を修正

カスタムユニットやカスタムフィールドにメディアのカスタムフィールドが存在する場合のパフォーマンスが低下する問題を修正しました。

特に複数のメディアフィールドがある場合や、メディアに登録しているデータの件数が多い場合にWebサイトの表示スピードが低下する現象が確認されたため、メディアのカスタムフィールドを多く利用されている方はアップデートをおすすめいたします。

CMS-6599 カスタムフィールドの検索機能で、「.」を含む文字列で検索した場合、「.」以降の文字列がファイルの拡張子として判断され、a-blog cms が動作しない問題の修正

こちらは、簡単アップデートやオンラインアップデートでは修正されません。問題に該当される方はサーバーのファイルを手動で修正してください。


a-blog cmsをダウンロードしたときに同梱されている .htaccess に問題があり、カスタムフィールドの検索機能で、.(ドット)を含む文字列で検索した場合サーバーの404エラーが表示されてしまう問題を確認しました。


Ver. 3.1.6 より同梱される .htaccess は修正されておりますが、.htaccess は簡単アップデートやオンラインアップデートでは更新されないため、既にa-blog cmsを利用していて問題に該当する方はサーバーのファイルを手動で編集する必要があります。

問題に該当する方は、a-blog cms 設置ディレクトリの .htaccess 内、CMSを実行するための設定を以下のように修正してください。

# ---------------------------
# CMSを実行
# ---------------------------
RewriteRule . index.php [L]

トラブルシューティングのページにも掲載いたしましたので、詳しくは以下の記事をご確認ください。


最後に

該当する問題がありましたら、お早めにバージョンアップのご検討をお願いいたします。
また、迅速にご報告いただいたユーザーの皆さま、誠にありがとうございました。

今後もご報告いただいた内容に対して真摯に受け止め修正と改善を行ってまいります。
今後ともどうぞよろしくお願いいたします。