?>

Comment connecter un modèle séparé pour un périphérique mobile dans un projet Yii2.

Comment connecter un modèle séparé pour un périphérique mobile dans un projet Yii2.

Pendant le travail sur tout projet (en utilisant le framework Yii2 php), il est très souvent nécessaire de connecter un modèle séparé pour différents périphériques (tablette, téléphone, PC).

В ходе работы над любым проектом (с использованием Yii2 php фреймоврка), очень часто возникает потребность подключения отдельного шаблона для разных устройств (планшет, телефон, ПК).

Решается задача очень просто.

1) В проекте необходимо поставить и настроить расширение: skeeks/yii2-mobile-detect

Главный конфиг проекта:

'components' => [
    'mobileDetect' => [
        'class' => '\skeeks\yii2\mobiledetect\MobileDetect'
    ]
]

2) Создать простой yii2 компонент

<?php
/**
 * @author Semenov Alexander <semenov@skeeks.com>
 * @link http://skeeks.com/
 * @copyright 2010 SkeekS (СкикС)
 * @date 05.07.2015
 */
namespace common\components;

use skeeks\yii2\mobiledetect\MobileDetect;
use yii\base\BootstrapInterface;
use yii\base\Component;
use yii\base\Theme;
use yii\web\Application;

class AppComponent extends Component implements BootstrapInterface
{
    public function bootstrap($app)
    {
        \Yii::$app->on(Application::EVENT_BEFORE_REQUEST, function()
        {
            //Если это мобильный телефон
            if (\Yii::$app->mobileDetect->isMobile())
            {
                //определение пути к папке с шаблоном
                \Yii::$app->view->theme = new Theme([
                    'pathMap' =>
                    [
                        '@app/views' =>
                        [
                            '@app/templates/mobile',
                        ],
                    ]
                ]);
            }
        });
    }
}

3) Подключить в конфиге проекта, и добавить в автозагрузку

'components' => [
    'appComponent' =>
        [
            'class' => \common\components\AppComponent::className()
        ],
    ]
]

'bootstrap' => ['appComponent'],

4) Структура папок


Теперь если в коде встретится обращение к какому либо файлу шаблона. Например:

echo \Yii::$app->view->render('@app/view/site/index');

При просмотре сайта с телефона, файл шаблона будет браться из папки templates/mobile/site/index.php, ну а если же этого файла там не окажется то будет подключен файл по адресу views/site/index.php

Tous les commentaires (0)
Sans commentaires