人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

KENT-WEB の ClipMail (http://www.kent-web.com/data/clipmail.html)で
”送信”ボタンを押すと確認画面になります。
この現在の仕様から確認画面なしでダイレクトに送信できるボタンも追加したいのです。
(つまりユーザが選択できる)

CGIの知識がないので以下のような答えを望んでいます。

-------------------
#clipmail.cgi

何行目これを追加↓
なんちゃらかんちゃら・・
-------------------

まるなげですが満足する動作を答えてくれた方に500pt 差し上げます。
(はてなのルールが変わったようなので分配しかできなかったら申し訳りません)

よろしくお願いします。

●質問者: tontonpokopoko
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● rouge_2008
●500ポイント ベストアンサー

ボタンの場合、以下のようにするといいです。

<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にチェックを入れた場合は両方同じ動作になります。


tontonpokopokoさんのコメント
望んだ回答、わかりやすい解説をありがとうございます。modeで振り分けてるのを探せませんでした。しかしmodeという単語はどこで使われてるのでしょう?「clipmail.cgi」「conf.html」「clipmail.html」にも見当たらないようですが・・。いずれにしてもお約束の500ptをお支払して問題は締め切らせていただきます。

rouge_2008さんのコメント
テキストエディタで検索すればすぐ見つかりますが、「clipmail.cgi」にあります。 プレビュー処理「sub preview { ? }」の部分で、modeにsendを指定した項目をhiddenで埋め込んでいます。 デフォルトでは、プレビュー表示の時のみ追加されている項目でしたので、プレビュー表示画面で送信ボタンを押した時にメールが送信される仕組みでした。 195行目 >|| # 引数 my $hidden .= qq|<input type="hidden" name="mode" value="send" />\n|; ||< フォームデコード処理「sub parse_form { ? }」の部分で、フォームから送信されてきたデータをハッシュに格納しています。 586行目以降 >|| sub parse_form { my ($clip,@key,@need,%in); foreach my $key ( $cgi->param() ) { (?略?) $val = join(" ", $cgi->param($key)); (?略?) # %inハッシュに代入 $in{$key} = $val; (?略?) # リファレンスで返す return (\@key,\@need,\%in); } ||< CGI::Minimalのparamメソッドで、フォームから送信されたデータの項目名を取得し、param('項目名')メソッドで取得した項目名を使用して値を取得しています。 ※作者さんのコメントもついているので、おそらく大体分かると思います。 http://search.cpan.org/~snowhare/CGI-Minimal-1.29/lib/CGI/Minimal.pod >> param([$fieldname]); Called as $cgi->param(); it returns the list of all defined form fields in the same order they appear in the data from the user agent. Called as $cgi->param($fieldname); it returns the value (or array of values for multiple occurances of the same field name) assigned to that $fieldname. If there is more than one value, the values are returned in the same order they appeared in the data from user agent. <<

tontonpokopokoさんのコメント
rouge_2008さん。 さらなる解説をありがとうございます。本当に参考になります。 解説画面から戻った時に内容が保持されない環境があることが1つの問題でした。 (クッキーで対策してましたが) もう1つは簡単な改造でタグを埋め込み、今の延長で送られた時点で骨組みページを生成しようと考えてます。 ポイントの大半をポイント付きメール?で私にお返しくださったようで なんだか悪いような気分になってしまいます(m_m) 今後もここで質問することもあると思いますがまたよろしくお願いします。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ