[EC-CUBE 2.11.5] スマートフォンでPCサイトを表示

もはやネタ切れなので、やったことないネタを開発者フォーラムから拾ってみた。

data/class/SC_Display.php の 144行目をコメントアウト。その下で DEVICE_TYPE_PC を返すように定義する。

    function detectDevice(){
        $nu = new Net_UserAgent_Mobile();
        $su = new SC_SmartphoneUserAgent_Ex();
        $retDevice = 0;
        if ($nu->isMobile()) {
            return DEVICE_TYPE_MOBILE;
        } elseif ($su->isSmartphone()) {
            //return DEVICE_TYPE_SMARTPHONE;
            return DEVICE_TYPE_PC;
        } else {
            return DEVICE_TYPE_PC;
        }
    }

ちなみに全ての端末でPCサイトを表示したければ、端末による条件分岐をやめて、常にDEVICE_TYPE_PC を返せばよい。

    function detectDevice(){
        return DEVICE_TYPE_PC;
    }

さらに、スマートフォンかどうかはどこで判断しているのかなと見てみたら、
data/module/Net/UserAgent/Mobile.php の 400行目付近にある isSmartphone メソッドでやってるみたい。

    // }}}
    // {{{ isSmartphone()

    /**
     * Checks whether or not the user agent is Smartphone by a given user agent string.
     *
     * @param string $userAgent
     * @return boolean
     * @since Method available since Release 0.31.0
     */
    function isSmartphone($userAgent = null)
    {
        if (is_null($userAgent)) {
            $userAgent = @$_SERVER['HTTP_USER_AGENT'];
        }

        $useragents = array(
            'iPhone',         // Apple iPhone
            'iPod',           // Apple iPod touch
            'Android',        // 1.5+ Android
            'dream',          // Pre 1.5 Android
            'CUPCAKE',        // 1.5+ Android
            'blackberry9500', // Storm
            'blackberry9530', // Storm
            'blackberry9520', // Storm v2
            'blackberry9550', // Storm v2
            'blackberry9800', // Torch
            'webOS',          // Palm Pre Experimental
            'incognito',      // Other iPhone browser
            'webmate'         // Other iPhone browser
        );

        $pattern = implode("|", $useragents);
        return preg_match('/'.$pattern.'/', $userAgent);
    }

$_SERVER[‘HTTP_USER_AGENT’] を取得して、各スマートフォン固有の文字列とマッチするかどうかを調べてるのね。