Не до коца понял как правильно реализовать темизацию. На сколько я понимаю суть задачи темизации - хранить в одной директории все что принадлежит конкретному макету - шаблоны, стили, скрипты, картинки.
Но выходит так что 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 в публичный раздел и закрыть доступ настройками сервера.
Разделять запчасти по разным директориям не хочется.
какие еще есть варианты?
Темизация
-
- Сообщения: 179
- Зарегистрирован: 2018.02.05, 13:41
- Контактная информация:
Темизация
Последний раз редактировалось BalykhinAS 2018.03.23, 16:48, всего редактировалось 2 раза.
-
- Сообщения: 179
- Зарегистрирован: 2018.02.05, 13:41
- Контактная информация:
Re: Темизация
выходит вот такой вот велосипед
компонент
bootstrap
asset темы
теперь папка темы может выглядеть так
в web создается ссылка на содержимое каталога темы
компонент
Код: Выделить всё
'assetManager' => [
'linkAssets' => true,
],
Код: Выделить всё
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/')
);
Код: Выделить всё
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