本文へ移動
FreelanceForm 購入者向け設置ガイド

コード解説

フォーム設定とHTMLのつながり

forms.phpのfieldsと入力名の対応、必須条件・選択肢・復元の仕組み。

このページの目次

FreelanceFormでは、入力ページのHTMLと、PHPの用途別設定を組み合わせて1つのフォームを動かします。「どの値を変えると、どこに反映されるか」を、お問い合わせ用途の実際の設定で確認しましょう。

このページのゴール HTMLの入力名とPHPの項目定義を対応付け、表示名・必須条件・選択肢をそろえて変更できること。

contactが用途を選び、fieldsが項目を決める

入力ページ index-contact.php の $mfFormId = 'contact'; は、form/php/config/forms.php の contact を選びます。その中の fields が、入力内容を受け取るための項目定義です。

次は設定の構造を示す抜粋です。ファイル全体を置き換えず、既存の該当箇所を編集します。

PHP
'contact' => [
    'title' => 'お問い合わせ',
    'page' => 'index-contact.php',
    'mail_subject' => 'お問い合わせフォームからの受付',
    'fields' => [
        'company' => [
            'label' => '会社名・団体名',
            'type' => 'text',
            'required' => false,
            'max_length' => 150,
        ],
        // この前後にも、お名前やメールなどの既存項目があります。
    ],
],
設定 変わる部分
title 共通画面やメールで使う用途名。入力HTMLの見出しは別に編集
page 共通処理から戻る入力ページ
mail_subject この用途の運営者通知の件名
fields 受け取る項目、検証ルール、確認・メールでの並び

fields を変更しても、入力HTMLが自動で書き換わるわけではありません。一般の入力項目は、HTML側も合わせて編集します。商品一覧はカタログ設定から描画する仕組みなので、商品・価格・送料を参照してください。

HTMLのnameと、fields内のキーをそろえる

会社名欄には name="company" があり、PHPにも 'company' => [...] があります。この一致によって、どの入力にどのルールを使うかが決まります。

TEXT
入力HTMLの name="company"
        ↓
forms.php の contact → fields → company
        ↓
PHPで入力を検証
        ↓
確認画面とメールへ label・入力値を表示

fields の順番が確認画面・メールの順番になります。HTMLだけ項目を並べ替えた場合、確認画面は同じ順番にはなりません。

変更例1:会社名の表示と文字数を変える

「会社名・団体名」を「会社名」にし、100文字までにする場合です。

編集箇所 変更前 変更後
HTMLの .label-title の中身 会社名・団体名 会社名
HTMLの入力欄 maxlength="150" maxlength="100"
PHPの company → label 会社名・団体名 会社名
PHPの company → max_length 150 100

company という内部名、id="mf-company"、エラー表示の対応はそのままで構いません。入力欄の文言だけなら、処理用の名前を変える必要はありません。

max_length はPHP側で受け取り時に検証する設定です。HTMLの maxlength も合わせることで、利用者が入力中に気付けるようにします。

変更例2:任意から必須にする

会社名を必須にする場合は、次の3か所をそろえます。

場所 変更する内容
HTMLのラベル class="optional" を class="required" にし、「任意」の補足を外す
HTMLの入力欄 required aria-required="true" を追加
PHPの company 'required' => true に変更

必須バッジの色はCSSですが、必須かどうかのルールはHTMLとPHPで管理します。バッジだけを変えると、表示と実際の判定が食い違います。

条件付き必須は、選択肢の値まで対応させる

お問い合わせの電話番号は、この設定です。

PHP
'phone' => [
    'label' => '電話番号',
    'type' => 'tel',
    'required' => false,
    'required_if' => ['contact_method' => '電話'],
    'max_length' => 11,
],

contact_method は条件を判定する入力名、電話 は選択肢の値です。HTML側の value="電話"、contact_method の options、上の required_if が対応します。

選択肢を「電話連絡」に変えるなら、表示文だけでなく、変更する value・PHPの options・required_if もそろえます。条件が複数ある場合は、いずれかが一致すると必須になる実装です。

共通の input-state.js が、PHPから渡された定義を使って画面の必須属性や表示を切り替えます。送信時にはPHPでも条件を確認するため、HTMLの見た目だけの判定ではありません。

選択肢・複数選択・メールの名前

種類 そろえる内容
select・radio HTMLの各 value と、PHPの options
複数checkbox HTMLの name="項目名[]" と、[] を付けないPHPのキー
同意欄 既存の privacy-policy と 同意する という値
自動返信先 既存の mail_address。共通の送信処理もこの名前を参照

項目名を変更する場合は、PHP定義だけでなく、条件付き必須やJavaScriptの参照も確認します。特に mail_address はそのまま使いましょう。単に別の名前へ変更すると、自動返信やReply-Toの取得と一致しなくなります。

入力の復元も、同じ設定を使っている

フォーム内の <?php mfInputState(); ?> は、用途ID・確認用トークン・入力復元用JSONを出力します。そのJSONには用途の fields も含まれます。

TEXT
入力ページ先頭で input.php を読み込む
        ↓
フォーム内で mfInputState() を呼ぶ
        ↓
input-state.js が前の入力とルールを読み取る
        ↓
確認から戻った入力を復元・条件付き必須を反映

このため、先頭のPHPと mfInputState()、form/js/main.js の読み込みはセットで残します。部署名のような通常のテキスト項目を追加するだけなら、復元用のJavaScriptを項目ごとに書き足す必要はありません。

メール設定との境界

運営者への受信先やSMTPは config.php、用途別の通知件名は forms.php の mail_subject です。mail_subject を変えても、自動返信の件名が同じ値に変わるわけではありません。

また、従来の index.php とデザイン見本が使う legacy の定義は common.php 側にあります。forms.php の contact を編集しても、それらの入力項目には反映されません。まず使用中の入力ページの $mfFormId を確認してください。

メールの本文・自動返信の編集範囲はメールの件名・本文にまとめています。

編集後に確認すること

  1. 入力画面で、変更した文言・必須表示・文字数を確認します。
  2. 空欄や不正な入力で、想定した案内が出るか確かめます。
  3. 確認画面で、項目名・値・順番を確かめます。
  4. 修正で戻り、値の復元と条件付き必須の切り替えを確かめます。
  5. 自分のテスト用受信先へ送信し、運営者通知と自動返信の内容を確認します。

ここまでできたらOK 入力・確認・修正・メールで、変更した項目が同じ意味と条件で扱われていればOKです。

新しい項目を追加する完成形の例は入力項目の追加・削除、名前の読み方はクラス名と命名ルールで確認できます。