ページ 11

直前のページのURLを拾う方法

Posted: 2017年11月13日(月) 19:03
by maki
いつもお世話になります。
お問い合わせフォームでどのページからの問い合わせだったのかを拾い、フォームで送る仕様にするため、直前のページのURLを拾うスニペットを
return $_SERVER['HTTP_REFERER'];
として作ってみたのですが、どうも動作が不安定で、値を拾ったり拾わなかったりします。PHPが不得手で申し訳ありません。
MODxの機能を使って安定的に取得する方法があれば教えていただけると助かります。
どうぞよろしくおねがいいたします。

直前のページのURLを拾う方法

Posted: 2017年11月14日(火) 16:00
by maki
すみません、追記です。どうやら私の勘違いで、動作が不安定なのではなく、いったんキャッシュに入ったデータがフォームを送信するまで温存されてしまうようです。フォーム送信にはcfFormMailerを使っています。
事象はこうです。
Aという画面からフォーム入力画面に行く→確認画面に行く(確認画面にはAから遷移したと記載されている)→送信はやめてBというページに遷移する→Bからフォーム入力画面に行く→確認画面に行く
すると、確認画面にはAから遷移したと記載されたままになっており、Bから遷移してきた情報が入りません。
ですので、最初に入ってしまった情報が都度クリアされればよいのですが。。。

直前のページのURLを拾う方法

Posted: 2017年11月16日(木) 00:36
by mod_kks
フォーム入力画面→確認画面の受け渡しでリファラをどのように受け渡しているのかが不明ですが、「フォームデータが変化しない」とのことなので、cfFormMailerで定義したinputでの受け渡しをしているものと仮定します。
cfFormMailerは確認画面から入力画面に戻った時のために、入力された項目のデータを一旦セッションに退避させて、戻った場合に入力値を戻すという動作が含まれています。この時退避したデータが次に入力画面に入った際復元されてしまうということでしょう。

スニペット本体「class.cfFormMailer.inc.php」の122行目あたりに退避、338行目あたりから復元の動作になっているのですが、338行目あたりに「復元処理しないタグ」というコメントがあり、この条件文で復元しない(リセットしたい)項目を追加することができます。方法としては次のような形になります。

※こんな形かどうかわかりませんが、例えば以下のようにしていた場合
<input type="hidden" name="f_page" id="f_page" value="[!referer!]">

※class.cfFormMailer.inc.php:338行目付近
// 復元処理しないタグ
if ($fieldName == 'f_page' || $fieldName == '_mode' || $fieldType == 'submit' || $fieldType == 'image' || $fieldType == 'file' || $fieldType == 'button') continue;

$fieldNameはname属性値のことで、これが定義したタグのname属性と合致していれば、リファラが必ず入るかどうか、また正しいかどうかは別として、とりあえず項目の復元回避はできると思います。

意図しているものかどうかわかりませんが参考までに。

直前のページのURLを拾う方法

Posted: 2017年11月21日(火) 16:20
by maki
お返事が遅くなり大変失礼いたしました。
解決方法ありがとうございました!
$fieldName == 'XXX' (XXXに当該のタグのname)を加えたところ、無事この値は都度書き換わるようになりました!意図したとおりの動きで、助かりました!