”送信”ボタンを押すと確認画面になります。
この現在の仕様から確認画面なしでダイレクトに送信できるボタンも追加したいのです。
(つまりユーザが選択できる)
CGIの知識がないので以下のような答えを望んでいます。
-------------------
#clipmail.cgi
何行目これを追加↓
なんちゃらかんちゃら・・
-------------------
まるなげですが満足する動作を答えてくれた方に500pt 差し上げます。
(はてなのルールが変わったようなので分配しかできなかったら申し訳りません)
よろしくお願いします。
ボタンの場合、以下のようにするといいです。
<button type="submit" name="mode" value="preview">確認する</button><button type="submit" name="mode" value="send">送信する</button>
※通常の「<input type="submit" ~>」は必要ありません。
※確認画面でmodeが表示されてしまうので、「clipmail.cgi」の206行目を次のように変更してください。
if ($key eq "need" || $key eq "match" || ($$in{match} && $key eq $match2)) {
上記の行を次のように変更します。
if ($key eq "mode" || $key eq "need" || $key eq "match" || ($$in{match} && $key eq $match2)) {
【追記】
「clipmail.cgi」の106行目でモードを判定して、送信モード(※フォームで「name="mode" value="send"」を指定した項目がある場合は送信モードと判定)ではない場合にpreviewの処理に移行します。
# プレビュー if ($$in{mode} ne "send") { &preview;
※確認表示で「name="mode" value="preview"」としていますが、こちらのvalue値は何でも大丈夫ですが、送信は「name="mode" value="send"」のように必ずmodeをsendに指定する必要があります。(buttonタグのテキスト表示は任意で大丈夫です。)
> もしボタンが2つある場合はcheckboxをどこに置いても両方同じ動作をしてしまいますよね?
上記の理由(※モードの判定)から、コメントに記載したcheckboxにチェックを入れた場合は両方同じ動作になります。
テキストエディタで検索すればすぐ見つかりますが、「clipmail.cgi」にあります。
プレビュー処理「sub preview { ~ }」の部分で、modeにsendを指定した項目をhiddenで埋め込んでいます。
デフォルトでは、プレビュー表示の時のみ追加されている項目でしたので、プレビュー表示画面で送信ボタンを押した時にメールが送信される仕組みでした。
195行目
フォームデコード処理「sub parse_form { ~ }」の部分で、フォームから送信されてきたデータをハッシュに格納しています。
586行目以降
2012/02/04 05:41:11CGI::Minimalのparamメソッドで、フォームから送信されたデータの項目名を取得し、param('項目名')メソッドで取得した項目名を使用して値を取得しています。
※作者さんのコメントもついているので、おそらく大体分かると思います。
http://search.cpan.org/~snowhare/CGI-Minimal-1.29/lib/CGI/Minimal.pod
rouge_2008さん。
2012/02/05 16:53:45さらなる解説をありがとうございます。本当に参考になります。
解説画面から戻った時に内容が保持されない環境があることが1つの問題でした。
(クッキーで対策してましたが)
もう1つは簡単な改造でタグを埋め込み、今の延長で送られた時点で骨組みページを生成しようと考えてます。
ポイントの大半をポイント付きメール?で私にお返しくださったようで
なんだか悪いような気分になってしまいます(m_m)
今後もここで質問することもあると思いますがまたよろしくお願いします。