MODxのeFormでリファラを取得してみた。

MODx 1.0.5J-r3
eForm 1.4.4.6

MODxでリファラの取得方法を調べたが見つからないので、作ってみました。

まず2つのスニペットを用意します。

1つめのスニペット [[get_referer]]


<?php
if(! isset($_SESSION['ref'])){
$_SESSION['ref'] = $_SERVER["HTTP_REFERER"];
}
?>

2つめのスニペット [[echo_referer]]


<?php
$referer = $_SESSION['ref'];
echo $referer;
?>

テンプレートの1行目にスニペット [[get_referer]] を追加。


[[get_referer]]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

入力フォームのチャンク {{ContactForm}} に スニペット [[echo_referer]] を追加。


<input type="hidden" name="referer" id="referer" value="[[echo_referer]]"
 eform="::0::" />
<input type="submit" name="contact" id="cfContact" class="button"
 value="送信する" />
</fieldset>
</form>

チャンク {{ContactFormReport}} に [+referer+] を追加


ウェブサイトの問い合わせフォームからの送信です。

--------------------------------------------------------
お名前 : [+name+] さん
Email :  [+email+]
件 名  :  [+subject+]
内 容  :
[+message+]
--------------------------------------------------------
リファラ  :  [+referer+]

これでリファラが取得できるようになりました。

MODxでモバイルサイト構築 eFormの文字コード問題を解決

MODx:1.0.5J-r1
eForm:1.4.4.6
MODxエンコード:UTF-8
モバイルテンプレート:Shift_JIS
MobileConverter2.0設定:&charset=Charset;string;Shift_JIS

MODxでPCサイトとモバイルサイトを構築したが、モバイルのテンプレートの文字コードをShift_JISにしても、eFormのメールフォームで文字化けする問題が起きた。

モバイルサイトは文字化け等なく正常にSJIS表示されているのだが、eFormがデフォルトのUTF-8なので、フォームの入力内容が文字化けしてしまう。

3日ほど試行錯誤ののち、昔、EUC-JPで作った.phpを強制的にShift_JISで出力した方法を思い出した。

要はPHPはUTF-8で、出力されたhtmlはShift_JISであれば問題ないのだ

MODxのルート階層にある.htaccessの44行目あたりから


# サーバの日本語設定が不安定な場合は下記のコメントを外して有効にしてください
# For UTF-8
php_flag output_buffering Off
php_value output_handler none
php_value default_charset UTF-8
php_value mbstring.language Japanese
php_flag mbstring.encoding_translation Off
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_value mbstring.internal_encoding UTF-8
php_value mbstring.substitute_character none

マルチバイト文字列関数の以下の三カ所を変更


php_flag mbstring.encoding_translation On
php_value mbstring.http_input auto
php_value mbstring.http_output auto

これでDocomoの携帯でのeFormの文字化け問題が解消しました。

※絶対にやってはいけないこと!

PCサイトもモバイルサイトも両方Shift_JISでいいなどと考えて、mbstring.http_inputとmbstring.http_outputをSJISに指定するのは絶対やめましょう。
MODxの管理画面はUTF-8(もしくはEUC-JP)で動作しています。
間違えてここをSJIS指定にしてしまうと、管理画面で編集したチャンクやスニペットの日本語部分が文字化けします。
僕はうっかりチャンクを2つほど文字化けさせてしまい、修正が大変でした。
以上失敗談でした。

今回変更した三カ所はあまり推奨されてないみたいなので、自己責任でお願いいたします。