EC-CUBE 2.4系でGoogle Analytics Mobileを設置する方法


EC-CUBEの2.4系にGoogle Analyticsを埋め込むのに時間がかかったのでメモ

任意の場所に、ga.phpを設置します。
今回は、/mobile/の中に設置しました。
モバイル用のテンプレートにGoogle Analyticsのコードを埋め込んでいきます。
site_frame.tplのhtml開始タグの前に

<!--{php}-->
// Copyright 2009 Google Inc. All Rights Reserved.
function googleAnalyticsGetImageUrl() {
    $GA_ACCOUNT = "◯◯-◯◯◯◯◯◯◯◯-◯";
    $GA_PIXEL = "/mobile/ga.php";        // ←ga.phpまでのパス
    $url = "";
    $url .= $GA_PIXEL . "?";
    $url .= "utmac=" . $GA_ACCOUNT;
    $url .= "&utmn=" . rand(0, 0x7fffffff);
    $referer = $_SERVER["HTTP_REFERER"];
    $query = $_SERVER["QUERY_STRING"];
    $path = $_SERVER["REQUEST_URI"];
    if (empty($referer)) {
        $referer = "-";
    }
    $url .= "&utmr=" . urlencode($referer);
    if (!empty($path)) {
        $url .= "&utmp=" . urlencode($path);
    }
    $url .= "&guid=ON";
    return str_replace("&", "&amp;", $url);
}
<!--{/php}-->

を追加します。
次に、site_main.tplのbody終了タグの前に

<!--{php}-->
$googleAnalyticsImageUrl = googleAnalyticsGetImageUrl();
<!--{/php}-->
<img src="<!--{php}-->echo $googleAnalyticsImageUrl<!--{/php}-->" width="1" height="1" />

を追加します。
このままでは、imgタグが上手く表示されないので
/data/class/SC_MobileImage.phpの92行目あたりの処理に一文加えます。

// HTML中のIMGタグを変換後のファイルパスに置換する
foreach ($images[1] as $key => $value) {
    if (preg_match('|/ga.php|', $value)) continue;    // この行を追加
    $converted = $imageConverter->execute(preg_replace('|^' . URL_DIR . '|', HTML_PATH, $value));
    if (isset($converted['outputImageName'])) {
        $buffer = str_replace($value, MOBILE_IMAGE_URL . '/' . $converted['outputImageName'], $buffer);
    } else {
        $buffer = str_replace($images[0][$key], '<!--No image-->', $buffer);
    }
}

ここまでで上手くいくと思いますが、ならない場合はga.phpの138行目あたりの

$cookie = $_COOKIE[COOKIE_NAME];
$guidHeader = $_SERVER["HTTP_X_DCMGUID"];
if (empty($guidHeader)) {
    $guidHeader = $_SERVER["HTTP_X_UP_SUBNO"];
}
if (empty($guidHeader)) {
    $guidHeader = $_SERVER["HTTP_X_JPHONE_UID"];
}
if (empty($guidHeader)) {
    $guidHeader = $_SERVER["HTTP_X_EM_UID"];
}

$cookie = (isset($_COOKIE[COOKIE_NAME])) ? $_COOKIE[COOKIE_NAME] : '';
$guidHeader = (isset($_SERVER["HTTP_X_DCMGUID"])) ? $_SERVER["HTTP_X_DCMGUID"] : '';
if (empty($guidHeader)) {
    $guidHeader = (isset($_SERVER["HTTP_X_UP_SUBNO"])) ? $_SERVER["HTTP_X_UP_SUBNO"] : '';
}
if (empty($guidHeader)) {
    $guidHeader = (isset($_SERVER["HTTP_X_JPHONE_UID"])) ? $_SERVER["HTTP_X_JPHONE_UID"] : '';
}
if (empty($guidHeader)) {
    $guidHeader = (isset($_SERVER["HTTP_X_EM_UID"])) ? $_SERVER["HTTP_X_EM_UID"] : '';
}

のように変更すれば上手くいくと思います。


Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>