2014年9月27日土曜日

EC-CUBEにスマホでアクセスしてもPCサイトを表示するには(完全版)

SYSTEM_KDです。

少し前に、EC-CUBEにスマホでアクセスしてもPCサイトを表示するにはという記事を書かせて頂いたのですが、その際の下記の問題の対処方を書きたいと思います。

その問題というのは、デバイスタイプを強制的にPCへ書き換えているので、受注データ作成時に設定されるデバイスがPCになってしまうというものです。

問題をおさらいすると、スマホでアクセスした際にPCサイト(ページ)を表示するのは、SC_Display.phpをちょこっと書き換えれば良いけど、それだけでは、実際にスマホから購入されても、管理画面の受注管理で表示される端末種別が「PC」になってしまうということでした。

さっそく対処法です。

今回も、data/class/SC_Display.php を書き換えます。

スマホでもPCページを返すため「detactDevice」を変更しましたが、まずこのメソッドをコピーして、名前を「detectDevice」から「detectDeviceReal」へ変更します。
(detectDeviceとは別に、detectDeviceRealを追加する感じです)

そして、中身をこんな感じで書き換えます。

// 本来のデバイスタイプを返却
public static function detectDeviceReal($reset = FALSE) {
$nu = new Net_UserAgent_Mobile();
$su = new SC_SmartphoneUserAgent_Ex();
if ($nu->isMobile()) {
$device_type = DEVICE_TYPE_MOBILE;
} elseif ($su->isSmartphone()) {
$device_type = DEVICE_TYPE_SMARTPHONE;
} else {
$device_type = DEVICE_TYPE_PC;
}
return $device_type;
}

何をしているかと言いますと、コメントの通り「本来のデバイスタイプ」を返却しているだけです。

あとは、前回の記事でも少し書いたとおり、「SC_Helper_Purchase.php」の「saveOrderTemp」でデバイス情報をDBへ設定する際に、このメソッドから正しいデバイスを取得して、設定すればOKです。

[変更ソース]
data/class/helper/SC_Helper_Purchase.php

function saveOrderTemp($uniqId, $params, &$objCustomer = NULL) {
if (SC_Utils_Ex::isBlank($uniqId)) {
return;
}
$params['device_type_id'] = SC_Display_Ex::detectDeviceReal();
$objQuery =& SC_Query_Ex::getSingletonInstance();
// 存在するカラムのみを対象とする
$cols = $objQuery->listTableFields('dtb_order_temp');
$sqlval = array();
foreach ($params as $key => $val) {
if (in_array($key, $cols)) {
$sqlval[$key] = $val;
}
}
// 以下 省略 //

5ステップ目の部分を、

$params['device_type_id'] = SC_Display_Ex::detectDevice();

から

$params['device_type_id'] = SC_Display_Ex::detectDeviceReal();

へ変更します。

これで、スマホからアクセスして購入した場合に、端末種別が「PC」ではなく「スマートフォン」として表示されます。

0 件のコメント:

コメントを投稿