В каком скрипте находится проверка подключения шаблона мобильной версии? Есть решение


Вопрос по сабжу.

Я собственно так понял, что

?mobile=1 удаляет флаг 'nomobile' в файле сессии.

Если этот параметр указать в десктопной версии браузера, то шаблон мобильной версии не подключается.

Если на мобильных устройствах, то подключается.

Где эта проверка (подключения мобильной версии) находится?

Да и кстати, в хелпере $wa->isMobile() функция определена без параметра $check

Спасибо.

2 ответа

  • 1
    Minya Jam 14 октября 2015 08:43 # Решение

    Вот допиленный вариант для Shop-Script 6:


        public static function isMobile($check = true)
        {
            if ($check) {
    
                if (self::get('nomobile') !== null) {
                    if (self::get('nomobile')) {
                        waSystem::getInstance()->getStorage()->write('nomobile', false);
                    }
                } elseif (self::get('mobile')) {
                    waSystem::getInstance()->getStorage()->write('nomobile', true);
    
                }
    
                $is_mobile = waSystem::getInstance()->getStorage()->read('nomobile');
    
                if($is_mobile !== null) {
                    if(self::$mobile !== null)
                    {
                        return self::$mobile;
                    }
                    self::$mobile = $is_mobile;
                    return self::$mobile;
                }
            }
            if (self::$mobile !== null) {
                return self::$mobile;
            }
            $user_agent = self::server('HTTP_USER_AGENT');
            $desktop_platforms = array(
                'ipad'       => 'ipad',
                'galaxy-tab' => 'android.*?GT\-P',
            );
            foreach ($desktop_platforms as $pattern) {
                if (preg_match('/'.$pattern.'/i', $user_agent)) {
                    self::$mobile = false;
                    return false;
                }
            }
            $mobile_platforms = array(
                "google-mobile" => "googlebot\-mobile",
                "android"    => "android",
                "blackberry" => "(blackberry|rim tablet os)",
                "iphone"     => "(iphone|ipod)",
                "opera"      => "opera (mini|mobi|mobile)",
                "palm"       => "(palmos|avantgo|blazer|elaine|hiptop|palm|plucker|xiino)",
                "windows"    => "windows\sce;\s(iemobile|ppc|smartphone)",
                "generic"    => "(kindle|mobile|mmp|midp|o2|pda|pocket|psp|symbian|smartphone|treo|up.browser|up.link|vodafone|wap)"
            );
            foreach ($mobile_platforms as $id => $pattern) {
                if (preg_match('/'.$pattern.'/i', $user_agent)) {
                    self::$mobile = $id;
                    return $id;
                }
            }
            self::$mobile = false;
            return false;
        }
  • 1
    Minya Jam 13 октября 2015 05:30 #

    В общем сам задал вопрос, сам и решил.

    Было бы правильно изменить функцию isMobile в классе waRequest, например так, в моем случаи (да и в остальных случаях):

            if ($check) {
                if (self::get('nomobile') !== null) {
                    if (self::get('nomobile')) {
                        waSystem::getInstance()->getStorage()->write('nomobile', true);
                        return false;
                    } else {
                        waSystem::getInstance()->getStorage()->remove('nomobile');
                        return false;
                    }
                } elseif (self::get('mobile')) {
                    waSystem::getInstance()->getStorage()->remove('nomobile');
                }
                if (waSystem::getInstance()->getStorage()->read('nomobile')) {
                    return false;
                } else {
                    return true;
                }
            }

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите