?>

Cómo conectar una plantilla separada para un dispositivo móvil en un proyecto Yii2.

Cómo conectar una plantilla separada para un dispositivo móvil en un proyecto Yii2.

Durante el trabajo en cualquier proyecto (utilizando el framework php Yii2), muy a menudo es necesario conectar una plantilla separada para diferentes dispositivos (tableta, teléfono, 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

todos los comentarios (0)
Sin comentarios