Переключение тем в конттроллере

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
maxycws
Сообщения: 23
Зарегистрирован: 2015.03.31, 18:56

Переключение тем в конттроллере

Сообщение maxycws »

Возможно ли это? Или как это сделать правильно?
Ситуация такая. есть старый дизайн (выделил в папку def) и новый (basic)
так как весь дизайн еще не готов, то нужно часть страниц выдавать в старом дизайне, часть в новом.
хотел сделать в

Код: Выделить всё

'on beforeAction' => function ($event) {
        $controller = $event->action->controller;
}, 
но как я понял, из контроллера этого не сделать. хотя если не изменяет мне логика, лэйаут и вью должны инициализироваться в beforeaction
maxycws
Сообщения: 23
Зарегистрирован: 2015.03.31, 18:56

Re: Переключение тем в конттроллере

Сообщение maxycws »

попробую через наследование

Код: Выделить всё

<?php

$current_theme = 'basic';

return [
    'theme' => [
        'pathMap' => [
            '@dektrium/user/views' => [
                '@app/themes/def/views/user',
                '@app/themes/'.$current_theme.'/views/user'
            ],

            '@dektrium/user/views/admin' => [
                '@app/themes/def/modules/admin/views/user/admin',
                '@app/themes/'.$current_theme.'/modules/admin/views/user/admin',
            ],

            '@app/views' => [
                '@app/themes/def/views',
                '@app/themes/'.$current_theme.'/views'
            ],

            '@app/modules' => [
                '@app/themes/def/modules',
                '@app/themes/'.$current_theme.'/modules',
            ],
            
            '@app/widgets/views' => [
                '@app/themes/def/widgets',
                '@app/themes/'.$current_theme.'/widgets',
            ]

        ]
    ]

];
 
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

Re: Переключение тем в конттроллере

Сообщение mihail_dev »

Код: Выделить всё

'on beforeAction' => function ($event) {
        //$controller = $event->action->controller;
        
       \Yii::$app->view->theme = \Yii::createObject([
            'class' => 'yii\base\Theme',
            'basePath' => '@app/views/def'
        ]);
},
а так?
Изображение
maxycws
Сообщения: 23
Зарегистрирован: 2015.03.31, 18:56

Re: Переключение тем в конттроллере

Сообщение maxycws »

Код: Выделить всё

'on beforeAction' => function ($event) {
        $controller = $event->action->controller;

        switch($controller->id){
            default:
                \Yii::$app->view->theme = \Yii::createObject([
                    'class' => 'yii\base\Theme',
                    'basePath' => '@app/themes/basic/views'
                ]);
            break;
            case 'profile':
                \Yii::$app->view->theme = \Yii::createObject([
                    'class' => 'yii\base\Theme',
                    'basePath' => '@app/themes/def/views'
                ]);
            break;
        }

//        echo '<script>console.log(["'.$controller->layout.'", "'.$controller->id.'" ]);</script>';
    },

 

Invalid Parameter – yii\base\InvalidParamException
The view file does not exist: /var/www/sites/site.loc/views/profile/show.php

почему то теперь не ищет в темах
maxycws
Сообщения: 23
Зарегистрирован: 2015.03.31, 18:56

Re: Переключение тем в конттроллере

Сообщение maxycws »

вобщем наследование частично помогло
Аватара пользователя
irpsv
Сообщения: 65
Зарегистрирован: 2015.07.07, 18:03
Контактная информация:

Re: Переключение тем в конттроллере

Сообщение irpsv »

maxycws писал(а):вобщем наследование частично помогло
А если в представлении указать нужную тему?

http://www.yiiframework.com/doc-2.0/yii ... eme-detail

---

Прочитал тему уже после того как написал, так что сильно не ругайтесь! Сообщение не убрал, а то мало ли)))
...то что мы не понимаем, делает нас тупее...
Аватара пользователя
irpsv
Сообщения: 65
Зарегистрирован: 2015.07.07, 18:03
Контактная информация:

Re: Переключение тем в конттроллере

Сообщение irpsv »

maxycws писал(а):Возможно ли это? Или как это сделать правильно?
Ситуация такая. есть старый дизайн (выделил в папку def) и новый (basic)
так как весь дизайн еще не готов, то нужно часть страниц выдавать в старом дизайне, часть в новом.
хотел сделать в

Код: Выделить всё

'on beforeAction' => function ($event) {
        $controller = $event->action->controller;
},
но как я понял, из контроллера этого не сделать. хотя если не изменяет мне логика, лэйаут и вью должны инициализироваться в beforeaction
Либо, можно попробовать таким образом установить тему (не знаю, не пробовал, проекта с темами под рукой нет):

Код: Выделить всё

public function beforeAction($action) {
    $oldThemeActions = ['..','..','..'];
    if (in_array($action->id, $oldThemeActions)) {
        $this->view = \yii\web\View([
            "theme" => "название темы :-)",
        ]);
    }
}
...то что мы не понимаем, делает нас тупее...
Ответить