バージョン選択

フォーラム

メニュー

オンライン状況

74 人のユーザが現在オンラインです。 (64 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 74
もっと...

サイト内検索

質問 > フロント機能 > 2.3系でPCと携帯&スマホの振り分けについて

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
popo
投稿日時: 2012/2/18 8:13
対応状況: −−−
長老
登録日: 2008/10/1
居住地:
投稿: 189
2.3系でPCと携帯&スマホの振り分けについて
EC-CUBEバージョン
2.3.0
PHPバージョン
PHP 5.2.17
DBバージョン
PostgreSQL 7.4.19

お世話になります。
2.3系と古いタイプで運営しているのですが、昨今スマートフォンでのアクセスが多くなってきており、PCのブラウザでエージェントをスマホにしてアクセスしてみると、PC用のページが表示されました。
スマホからPC用のページで注文はできるのでしょうか?
私はスマホを持っていないので、試す事ができません。

スマホは表示画面がPCより狭いので、携帯用のページを表示させて、携帯用のページから注文してもらおうかと考えています。

ですが、どこで携帯とPCを振り分けているのか分かりません。
古いタイプなので、分かる方がいるか分かりませんが、振り分けを行っているファイルなど御存知の方が入れば、教えて頂けると助かります。

よろしくお願い致します。
yona
投稿日時: 2012/2/20 17:55
対応状況: −−−
半人前
登録日: 2012/2/10
居住地:
投稿: 25
Re: 2.3系でPCと携帯&スマホの振り分けについて
スマホはjsも使えますし、ほぼPCと同じ挙動をすると考えてよいと思います。
PCページで注文もできますよ。
(ご指摘の通り画面サイズの関係で、非常に使いづらかったりしますが...)

UAで振り分け/リダイレクトを行っているのは、
/html/require.php です。
popo
投稿日時: 2012/2/21 7:32
対応状況: −−−
長老
登録日: 2008/10/1
居住地:
投稿: 189
Re: 2.3系でPCと携帯&スマホの振り分けについて
ご回答ありがとうございます。

エージェントの判別をして振り分けを行っているのは、下記のファイルだと分かりました。
data>class>SC_MobileUserAgent.php

ですが、どこを触ったら良いのか分からずです。
上記のファイルを修正して振り分けを行ったら良いのか、またはhtaccessで振り分けを行ったら良いのか、迷ってしまっております。

htaccessでの振り分けの場合、下記のサイトを見つけました。
http://www.realize-web.jp/blog/001/post_143.php

スマホからの「hogehoge.com」へのアクセスは、携帯と同じ「hogehoge.com/mobile/」へ飛ばしたいと考えています。

htaccessで「RewriteEngine On」での振り分けの場合は、下位フォルダまで影響してしまうので、そのままではループしてしまいそうなので、どのフォルダへ「RewriteEngine Off」を設置したら良いのかも分かりません。

「SC_MobileUserAgent.php」での対応、または「htaccess」での対応のどちらでも良いので、スマホからのアクセスは携帯ページへ飛ばす方法をアドバイス頂ければ助かります。
yona
投稿日時: 2012/2/21 14:03
対応状況: −−−
半人前
登録日: 2012/2/10
居住地:
投稿: 25
Re: 2.3系でPCと携帯&スマホの振り分けについて
おっしゃっている通り、SC_MobileUserAgent->isMobile() でUA判別していますので、
ここにスマートフォンUAの場合もtrueで返す処理を入れればアクセス振り分けはできます。


    function isMobile() {
        $objAgent =& Net_UserAgent_Mobile::singleton();
        if (Net_UserAgent_Mobile::isError($objAgent)) {
            return false;
        } else {
            return $objAgent->isDoCoMo() || $objAgent->isEZweb() || $objAgent->isVodafone() || $this->isSmartPone();
        }
    }


ちなみに、$this->isSmartPhone() は、取得したUAからスマートフォンかを判別するメソッドを
自作するという前提で書いています。
ご存知かもしれませんが、たとえばドコモのUA判定だと以下のようなことをやっています。
(SC_MobileUserAgent->isMobile()でreturnするときに呼んでいるメソッドです。)
これと同じことを、「iPhone」「iPod」「Android」でやればスマートフォン判定ができます。

/data/module/Net/UserAgent/Mobile.php


    function isDoCoMo($userAgent = null)
    {
        if (is_null($userAgent)) {
            $userAgent = $_SERVER['HTTP_USER_AGENT'];
        }

        if (preg_match('!^DoCoMo!', $userAgent)) { // ←DoCoMo をスマートフォンのUAにする
            return true;
        }

        return false;
    }
popo
投稿日時: 2012/2/22 20:31
対応状況: −−−
長老
登録日: 2008/10/1
居住地:
投稿: 189
Re: 2.3系でPCと携帯&スマホの振り分けについて
アドバイスありがとうございます。

PHPの知識がないため、「$this->isSmartPhone()」の自作に自信ができないです(>_<)

まずやる事は、「SC_MobileUserAgent.php」を下記のように修正。
「$this->isSmartPone();」は、「$objAgent->isEZweb()」のように、「$objAgent->isSmartPone()」ではなく、「$this->isSmartPone();」で正しいでしょうか?


    function isMobile() {
        $objAgent =& Net_UserAgent_Mobile::singleton();
        if (Net_UserAgent_Mobile::isError($objAgent)) {
            return false;
        } else {
            return $objAgent->isDoCoMo() || $objAgent->isEZweb() || $objAgent->isVodafone() || $this->isSmartPone();
        }
    }



次にUAの追加についてですが、例えば、下記のように書き換えれば良いのでしょうか?
/data/module/Net/UserAgent/Mobile.php

    function isSmartPhone($userAgent = null) //「isDoCoMo」を「isSmartPhone」に変更
    {
        if (is_null($userAgent)) {
            $userAgent = $_SERVER['HTTP_USER_AGENT'];
        }

        if (preg_match('!^iPhone!', $userAgent)) { // ←UAに「iPhone」が含まれているか判別
            return true;
        }

        return false;
    }




あと「/data/module/Net/UserAgent/Mobile/」フォルダの中に、各キャリアごとにファイル(DoCoMo.php、EZweb.phpなど)が入っていますが、ここにはファイルを追加する必要はないでしょうか。

お手数をおかけしますが、アドバイスをお願い致します。
yona
投稿日時: 2012/2/23 10:48
対応状況: −−−
半人前
登録日: 2012/2/10
居住地:
投稿: 25
Re: 2.3系でPCと携帯&スマホの振り分けについて
引用:

「$this->isSmartPone();」は、「$objAgent->isEZweb()」のように、「$objAgent->isSmartPone()」ではなく、「$this->isSmartPone();」で正しいでしょうか?

isSmartPhone() をどこに実装するかで変わります。
SC_MobileUserAgentクラス内に実装し SC_MobileUserAgentクラス内で呼べば $this->isSmartPhone() ですし、
Net_UserAgent_Mobilelクラス内に実装し SC_MobileUserAgentクラス内で呼べば $objAgent->isSmartPhone() です。
(このあたりは PHP の基本的なところなので、 解説サイトなどで調べればすぐわかると思いますよ^^)

個人的に Net_UserAgent_Mobile をいじるのが嫌なので、SC_MobileUserAgent 内に実装するのを想定していました。
分かりづらい書き方ですみません;


引用:

次にUAの追加についてですが、例えば、下記のように書き換えれば良いのでしょうか?
/data/module/Net/UserAgent/Mobile.php

    function isSmartPhone($userAgent = null) //「isDoCoMo」を「isSmartPhone」に変更
    {
        if (is_null($userAgent)) {
            $userAgent = $_SERVER['HTTP_USER_AGENT'];
        }

        if (preg_match('!^iPhone!', $userAgent)) { // ←UAに「iPhone」が含まれているか判別
            return true;
        }

        return false;
    }



問題ないと思いますが、このままだと iPhone だけしか判定できませんが大丈夫ですか??
ほかのスマートフォンUAの追加は以下のような処理でできるかと思います。

if (    preg_match('!^iPhone!',  $userAgent)
     || preg_match('!^iPod!',    $userAgent)
     || preg_match('!^Android!', $userAgent)) {
    return true;
}


引用:

あと「/data/module/Net/UserAgent/Mobile/」フォルダの中に、各キャリアごとにファイル(DoCoMo.php、EZweb.phpなど)が入っていますが、ここにはファイルを追加する必要はないでしょうか。

キャリア毎のphpは、固有の処理(キャリアやモデル取得とか)を行っているようですが、
今回はUA判定だけなので必要ないです。
popo
投稿日時: 2012/2/24 9:17
対応状況: −−−
長老
登録日: 2008/10/1
居住地:
投稿: 189
Re: 2.3系でPCと携帯&スマホの振り分けについて
アドバイスをして頂いた通りに記述してみましたが、上手くできませんでした。
UAをスマホにしてもPCにしても、画面が真っ白になってしまい何も表示されなくなってしまいました。


data>class>SC_MobileUserAgent.php
上記のファイルに「$this->isSmartPhone()」を追記。

    function isMobile() {
        $objAgent =& Net_UserAgent_Mobile::singleton();
        if (Net_UserAgent_Mobile::isError($objAgent)) {
            return false;
        } else {
            return $objAgent->isDoCoMo() || $objAgent->isEZweb() || $objAgent->isVodafone() || $this->isSmartPhone();
        }
    }


/data/module/Net/UserAgent/Mobile.php
上記のファイルに下記を追記。

    function isSmartPhone($userAgent = null)
    {
        if (is_null($userAgent)) {
            $userAgent = $_SERVER['HTTP_USER_AGENT'];
        }

        if (preg_match('!^iPhone!', $userAgent) || preg_match('!^iPod!', $userAgent) || preg_match('!^iPad!', $userAgent) || preg_match('!^Android!', $userAgent)) {
            return true;
        }

        return false;
    }


特に複雑な追記をしているわけではないので、間違っていないと思いますが、何が悪いのかが分かりません。

また試しに「Mobile.php」のDocomoの箇所を下記のようにしてみました。
「SC_MobileUserAgent.php」はデフォルトに戻してあります。
要するにスマートフォンのUAがあった場合は、DoCoMoと判別するようにしました。

    function isDoCoMo($userAgent = null)
    {
        if (is_null($userAgent)) {
            $userAgent = $_SERVER['HTTP_USER_AGENT'];
        }

        if (preg_match('!^DoCoMo!', $userAgent) || preg_match('!^iPhone!', $userAgent) || preg_match('!^iPod!', $userAgent) || preg_match('!^iPad!', $userAgent) || preg_match('!^Android!', $userAgent)) {
            return true;
        }

        return false;
    }


上記のようにするとPCからのアクセスでは問題なくトップページは表示されますが、スマートフォンのUAに変更してからアクセスしてもPC用のトップページが表示されてしまいます。
ちなみに、UAは「Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML,like Gecko) Version/5.0.2」としています。


何か別の箇所にも修正を加えないといけないのかもしれません。

アドバイスをお願い致します。
yona
投稿日時: 2012/2/24 10:03
対応状況: −−−
半人前
登録日: 2012/2/10
居住地:
投稿: 25
Re: 2.3系でPCと携帯&スマホの振り分けについて
すみません、 isMobile() の記述が間違っていました;
SC_MobileUserAgent 内に書くならば以下になります。

    function isMobile() {
        $objAgent =& Net_UserAgent_Mobile::singleton();
        if (Net_UserAgent_Mobile::isError($objAgent)) {
            return false;
        } else {
            return $objAgent->isDoCoMo() || $objAgent->isEZweb() || $objAgent->isVodafone() || SC_MobileUserAgent::isSmartPhone();
        }
    }


popo様は
/data/module/Net/UserAgent/Mobile.php に isSmartPhone() を実装されたとのことなので、
実際は $objAgent->isSmartPhone() ですが。


また、スマートフォンのUA判定ですが、
preg_match('!^iPhone!', $userAgent) という記述では、UAの文字列の先頭に iPhone がこないと true が返ってこないので、
preg_match('!iPhone!', $userAgent) または strstr($userAgent, 'iPhone')
でUA判定ができます。

2.4.1ベースですが、これでモバイルサイトが表示されました。
popo
投稿日時: 2012/2/24 13:43
対応状況: 解決済
長老
登録日: 2008/10/1
居住地:
投稿: 189
Re: 2.3系でPCと携帯&スマホの振り分けについて
yona様のアドバイス通りに修正をしたら、無事にスマートフォンを判別する事ができました。

何度もアドバイスをして頂きありがとうございました。
またお手数をおかけして、申し訳ありませんでした。

デフォルの状態では、スマートフォーンはPC用のページが表示されますが、2.4系を利用しているyona様はそのままの状態にしているのでしょうか?
スマホを持っていないので、スマホの画面でPCページの表示では見難いと思い、携帯ページを表示させようと思ったのですが、yona様やその他の2.3系や2.4系を利用している方は、スマホからのアクセスについてどのように対応にしているのか興味があります。

無事に解決できて良かったです。
ありがとうございました。
yona
投稿日時: 2012/2/24 17:06
対応状況: −−−
半人前
登録日: 2012/2/10
居住地:
投稿: 25
Re: 2.3系でPCと携帯&スマホの振り分けについて
うーん、SPの対応は特に気にしてなかったです。デフォの状態です^^;
言われてみれば使いづらかったかもしれないですね...

これまでバージョンアップでSP対応があったりしたので、
意識している方はSPの用意もちゃんとされているのでしょうか。

なにはともあれ、解決できてよかったです。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,860名です
総投稿数は109,996件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1294
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.