メールフォーム

入力画面 -> 確認画面 -> 完了画面

上記のように遷移するオーソドックスなメールフォームのサンプルモジュールです。

DEMO

http://lmd.root-n.com/demo/mailform/

上記DEMOは、アプリケーションのルートディレクトリが /demo であり、モジュールグループは「mailform」になります。

DOWNLOAD

mailform モジュール一式をダウンロードできます。

※このモジュールは Windows に対応していません。

設置手順

  1. モジュール一式をダウンロードし、展開します。
  2. mailform/
        +—mailform/
        |       complete.view.php
        |       confirm.view.php
        |       foot.view.php
        |       head.logic.php
        |       head.view.php
        |       index.logic.php
        |       index.view.php
        |
        +—mailtemplates/
        |       mailform.php
        |
        +—resources
        |       browser.php
        |       os.php
        |       within.php
        |
        \—validators/
                mailform.php

     
  3. ファイルを所定の位置にアップロードします。
    • モジュール
    • mailform/* ⇒ Lambda/apps/<APP_DIR>/mailform/*
    • メールテンプレート
    • mailtemplates/mailform.php ⇒ Lambda/mailtemplates/mailform.php
    • リソース
    • resources/* ⇒ Lambda/resources/*
    • バリデーター
    • validators/mailform.php ⇒ Lambda/validators/mailform.php
     
  4. 定数「MAILTO_ADMIN」の設定変更
  5. Lambda/apps/<APP_DIR>/mailform/index.logic.php

    define('MAILTO_ADMIN', '');
      ↓
    define('MAILTO_ADMIN', 'your_name@example.com');

    メールアドレスを指定することで、実際に送信を行う設定になります。

     
  6. ブラウザでアクセスして、動作確認を行います。
  7. http://<DOMAIN>/mailform/

プログラムコードの一部抜粋

プログラムコードを一部抜粋して掲載します。
下記は、DEMOで動作している、mailform.index ロジックモジュラーのソースコードになります。

/path/to/Lambda/apps/<APP_DIR>/mailform/index.logic.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php

/*****************************************************************************
 *
 * サンプルのため、冗長なコメントになっています。
 *
 ****************************************************************************/


/**
 * 送信テストを行う場合は、メールアドレスを設定してください。
 *
 *   サンプルのため、ここに定義していますが、本来このような定数は、
 *   Lambda/apps/<APP_DIR>/app.conf.php に定義することが推奨されます。
 */

define('MAILTO_ADMIN', '');

/**
 * POSTパラメーターを配列に格納。
 *
 *   こうしておくと、後続処理の setResponse や invokeValidator に値を渡す際に
 *   簡素に記述できます。
 */

$p = array(
    'name'    => $lmd->httpPost('name'),
    'email'   => $lmd->httpPost('email'),
    'os'      => $lmd->httpPost('os'),
    'within'  => $lmd->httpPost('within'),
    'browser' => $lmd->httpPost('browser', array()),
    'message' => $lmd->httpPost('message'),
);

/**
 * レスポンスをアサインしておく
 */

$lmd->setResponse($p);

if ($lmd->hasHttpPost('confirm') || $lmd->hasHttpPost('complete')) {
    /**
     * 【確認】または【送信】ボタンが押された。
     *
     *   バリデーターを実行して、入力値の検証を行います。
     *   ※ バリデーター定義は、Lambda/validators/mailform.php にあります。
     */

    $lmd->invokeValidator('mailform', $p);
}

if ($lmd->hasValidatorError()) {
    /**
     * 入力エラーが発見された。
     *
     *   ⇒ 「入力画面」に遷移させる。
     */

    return $lmd->setPrep('mailform.index');
}

if ($lmd->hasHttpPost('confirm') && ! $lmd->hasValidatorError()) {
    /**
     * 【確認】ボタンが押され、入力エラーが無い。
     *
     *   ⇒ 「確認画面」に遷移させる。
     */

    return $lmd->setPrep('mailform.confirm');
}

if ($lmd->hasHttpPost('complete') && ! $lmd->hasValidatorError()) {
    /**
     * 【送信】ボタンが押され、入力エラーが無い。
     *
     *   ⇒ メール送信を実行します。
     *
     *   ※ テンプレートは、Lambda/mailtemplates/mailform.php にあります。
     */

    $to   = MAILTO_ADMIN;
    $from = $p['email'];
    Mail::setTemplate('mailform');
    Mail::setParams($p);
    if ($to) Mail::send($to, $from);

    /**
     * リロード操作での二重送信を防止するため、「完了画面」へはリダイレクトさせます。
     */

    $lmd->redirect($lmd->httpRequestDir().'/complete');
    exit;
}



/*****************************************************************************
 * ここまで来たら、暗黙のうちに mailform/index.prep.php に処理が移ります。
 * mailform/index.prep.php がない場合は、mailform/index.view.php に処理が移ります。
 */