Темизация

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
BalykhinAS
Сообщения: 179
Зарегистрирован: 2018.02.05, 13:41
Контактная информация:

Темизация

Сообщение BalykhinAS »

Не до коца понял как правильно реализовать темизацию. На сколько я понимаю суть задачи темизации - хранить в одной директории все что принадлежит конкретному макету - шаблоны, стили, скрипты, картинки.

Но выходит так что views надо хранить в одном месте а все остальное в web что бы к данным ресурсам был доступ.

- можно настроить сервер что бы он смотрел на нужную директорию с темой которая лежит на уровень выше

- можно в asset указать sourcePath, положить в папку с темой картинки и они копируются в публичный раздел, но при этом создается директория с название 383f1521, путь к директории смотрим через Yii::$app->assetManager->getPublishedUrl('@themeDir/public/') при этом на кой нужен $this->theme->getUrl('images/logo.gif') совсем не понятно

разве что как то так $this->theme->setBaseUrl(Yii::$app->assetManager->getPublishedUrl('@themeDir/public/'));

- так же если добавить 'linkAssets' => true то как я понимаю создается просто ссылка, контент при этом не копируется.

- можно все же отправить views в публичный раздел и закрыть доступ настройками сервера.

Разделять запчасти по разным директориям не хочется.

какие еще есть варианты?
Последний раз редактировалось BalykhinAS 2018.03.23, 16:48, всего редактировалось 2 раза.
BalykhinAS
Сообщения: 179
Зарегистрирован: 2018.02.05, 13:41
Контактная информация:

Re: Темизация

Сообщение BalykhinAS »

выходит вот такой вот велосипед

компонент

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

        'assetManager' => [
            'linkAssets' => true,
        ],
bootstrap

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

        Yii::setAlias('@themeDir', '@frontend/themes/' . $theme_name);

        $app->view->theme = Yii::createObject([
            'class' => 'yii\base\Theme',
            'pathMap' => [
                '@app/views'   => '@themeDir/views',
                '@app/widgets' => '@themeDir/widgets'
            ]
        ]);

        $app->view->theme->setBaseUrl(
            $app->assetManager->getPublishedUrl('@themeDir/public/')
        );

        $app->view->theme->setBasePath(
            $app->assetManager->getPublishedPath('@themeDir/public/')
        );
asset темы

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

class AppAsset extends AssetBundle
{
    public $sourcePath = '@themeDir/public/';

    public $css = [
        'css/site.css',
    ];

    public $js = [
    ];

    public $depends = [
        'yii\web\YiiAsset',
        'yii\bootstrap\BootstrapAsset',
    ];
}
теперь папка темы может выглядеть так

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

themes
  - base
    - assets
    - public
      - css
      - js
      - images
    - views 
в web создается ссылка на содержимое каталога темы
Ответить