Maison >développement back-end >tutoriel php >TP5 détermine entre le téléphone mobile et le PC

TP5 détermine entre le téléphone mobile et le PC

不言
不言original
2018-07-05 14:25:016031parcourir

Cet article présente principalement le jugement du téléphone portable et du PC dans TP5. Il a maintenant une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

Jugement du téléphone portable et du PC dans. TP5

1. Utilisez une méthode de détermination personnalisée

  1. Écrivez d'abord la méthode ismobile pour déterminer la connexion de l'appareil dans le application>common.php fichier public :

    function ismobile()
    {
        // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
        if (isset ($_SERVER['HTTP_X_WAP_PROFILE']))
            return true;
    
        //此条摘自TPM智能切换模板引擎,适合TPM开发
        if (isset ($_SERVER['HTTP_CLIENT']) && 'PhoneClient' == $_SERVER['HTTP_CLIENT'])
            return true;
        //如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息
        if (isset ($_SERVER['HTTP_VIA']))
            //找不到为flase,否则为true
            return stristr($_SERVER['HTTP_VIA'], 'wap') ? true : false;
        //判断手机发送的客户端标志,兼容性有待提高
        if (isset ($_SERVER['HTTP_USER_AGENT'])) {
            $clientkeywords = array(
                'nokia', 'sony', 'ericsson', 'mot', 'samsung', 'htc', 'sgh', 'lg', 'sharp', 'sie-', 'philips', 'panasonic', 'alcatel', 'lenovo', 'iphone', 'ipod', 'blackberry', 'meizu', 'android', 'netfront', 'symbian', 'ucweb', 'windowsce', 'palm', 'operamini', 'operamobi', 'openwave', 'nexusone', 'cldc', 'midp', 'wap', 'mobile'
            );
            //从HTTP_USER_AGENT中查找手机浏览器的关键字
            if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
                return true;
            }
        }
        //协议法,因为有可能不准确,放到最后判断
        if (isset ($_SERVER['HTTP_ACCEPT'])) {
            // 如果只支持wml并且不支持html那一定是移动设备
            // 如果支持wml和html但是wml在html之前则是移动设备
            if ((strpos($_SERVER[&#39;HTTP_ACCEPT&#39;], &#39;vnd.wap.wml&#39;) !== false) && (strpos($_SERVER[&#39;HTTP_ACCEPT&#39;], &#39;text/html&#39;) === false || (strpos($_SERVER[&#39;HTTP_ACCEPT&#39;], &#39;vnd.wap.wml&#39;) < strpos($_SERVER[&#39;HTTP_ACCEPT&#39;], &#39;text/html&#39;)))) {
                return true;
            }
        }
        return false;
    }
  2. Réécrivez ensuite la méthode fetch dans le contrôleur de classe de base Base du application>index>controller>Base.php module d'index frontal :

    /**
     *加载模板输出(电脑和手机)
     * @accessprotected
     * @paramstring$template模板文件名
     * @paramstring$mobiletemplate手机模板文件名
     * @paramarray$vars模板输出变量
     * @paramarray$replace模板替换
     * @paramarray$config模板参数
     * @returnmixed
     */
    protected
    function fetch($template = &#39;&#39;, $mobiletemplate = &#39;&#39;, $vars = [], $replace = [], $config = [])
    {
        if (ismobile()) {
            return $this->view->fetch($mobiletemplate, $vars, $replace, $config);
        } else {
            return $this->view->fetch($template, $vars, $replace, $config);
        }
    }
  3. Enfin dans application>index>controller>Index Dans la méthode index du contrôleur Index qui hérite de la classe de base Base, il suffit de passer respectivement le chemin du côté PC et le chemin du côté mobile.

    return $this->fetch(&#39;default/index/index&#39;,&#39;mobile/index/index&#39;);

    Le devant default/index/index est le chemin correspondant au côté PC, et le suivant mobile/index/index est le chemin correspondant au côté mobile.

2. Utilisez la méthode de jugement fournie avec TP5 (recommandée, optimisée)

Grâce à la méthode ci-dessus, nous pouvons voir que même si cela fonctionne , mais il est très fastidieux de passer à chaque fois sur deux chemins.

  1. Écrivez d'abord les constantes utilisées pour déterminer la connexion de l'appareil dans le application>common.php fichier public VIEW_PATH :

    if (\think\Request::instance()->isMobile()) {
        define(&#39;VIEW_PATH&#39;, __DIR__ . &#39;/../application/index/view/mobile/&#39;);
    } else {
        define(&#39;VIEW_PATH&#39;, __DIR__ . &#39;/../application/index/view/default/&#39;);
    
    }
  2. Remplacez ensuite les variables du modèle dans le fichier de configuration config.php de l'index du module application>index>config.php :

    return [
        "template"=>[
            // 模板路径
            &#39;view_path&#39; => VIEW_PATH,
        ],
    ];
  3. Enfin, dans la méthode contrôleur uniquement Vous venez besoin de récupérer un chemin directement.

    return $this->fetch();

Astuce : La structure des répertoires de la page d'accueil est telle qu'elle est illustrée dans la figure :
Notez que la structure des répertoires sous default et mobile est cohérente

TP5 détermine entre le téléphone mobile et le PC

Ce qui précède est l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !

Recommandations associées :

Comment attribuer des valeurs dans un tableau à un ensemble de variables en PHP

Laravel dans le terminal Comment afficher les journaux dans

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn