Yii - Tematización
La creación de temas le ayuda a reemplazar un conjunto de vistas por otro sin la necesidad de modificar los archivos de vistas originales. Deberías configurar eltheme propiedad del componente de la aplicación de vista para usar la temática.
También debe definir las siguientes propiedades:
yii\base\Theme::$basePath - Define el directorio base para CSS, JS, imágenes, etc.
yii\base\Theme::$baseUrl - Define la URL base de los recursos temáticos.
yii\base\Theme::$pathMap - Define las reglas de reemplazo.
Por ejemplo, si llamas $this->render('create') en UserController, el @app/views/user/create.phpSe renderizará el archivo de visualización. Sin embargo, si habilita la temática como en la siguiente configuración de la aplicación, en su lugar se procesará el archivo de vista @ app / themes / basic / user / create.php.
Step 1 - Modificar el config/web.php archivar de esta manera.
<?php
$params = require(__DIR__ . '/params.php');
$config = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'bootstrap' => ['log'],
'components' => [
'request' => [
// !!! insert a secret key in the following (if it is empty) - this
//is required by cookie validation
'cookieValidationKey' => 'ymoaYrebZHa8gURuolioHGlK8fLXCKjO',
],
'cache' => [
'class' => 'yii\caching\FileCache',
],
'user' => [
'identityClass' => 'app\models\User',
'enableAutoLogin' => true,
],
'errorHandler' => [
'errorAction' => 'site/error',
],
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
// send all mails to a file by default. You have to set
// 'useFileTransport' to false and configure a transport
// for the mailer to send real emails.
'useFileTransport' => true,
],
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
],
],
'view' => [
'theme' => [
'basePath' => '@app/themes/basic',
'baseUrl' => '@web/themes/basic',
'pathMap' => [
'@app/views' => '@app/themes/basic',
],
],
],
'db' => require(__DIR__ . '/db.php'),
],
'modules' => [
'hello' => [
'class' => 'app\modules\hello\Hello',
],
],
'params' => $params,
];
if (YII_ENV_DEV) {
// configuration adjustments for 'dev' environment
$config['bootstrap'][] = 'debug';
$config['modules']['debug'] = [
'class' => 'yii\debug\Module',
];
$config['bootstrap'][] = 'gii';
$config['modules']['gii'] = [
'class' => 'yii\gii\Module',
];
}
return $config;
?>
Hemos agregado el componente de aplicación de vista.
Step 2 - Ahora crea el web/themes/basic estructura de directorio y themes/basic/site. Dentro de la carpeta themes / basic / site, cree un archivo llamadoabout.php con el siguiente código.
<?php
/* @var $this yii\web\View */
use yii\helpers\Html;
$this->title = 'About';
$this->params['breadcrumbs'][] = $this->title;
$this->registerMetaTag(['name' => 'keywords', 'content' => 'yii, developing,
views, meta, tags']);
$this->registerMetaTag(['name' => 'description', 'content' => 'This is the
description of this page!'], 'description');
?>
<div class = "site-about">
<h1><?= Html::encode($this->title) ?></h1>
<p style = "color: red;">
This is the About page. You may modify the following file to customize its content:
</p>
</div>
Step 3 - Ahora, ve a http://localhost:8080/index.php?r=site/about, la themes/basic/site/about.php se procesará el archivo, en lugar de views/site/about.php.
Step 4 - Para los módulos de tema, configure la propiedad yii \ base \ Theme :: $ pathMap de esta manera.
'pathMap' => [
'@app/views' => '@app/themes/basic',
'@app/modules' => '@app/themes/basic/modules',
],
Step 5 - Para widgets de temas, configure el yii\base\Theme::$pathMap propiedad de esta manera.
'pathMap' => [
'@app/views' => '@app/themes/basic',
'@app/widgets' => '@app/themes/basic/widgets', // <-- !!!
],
A veces es necesario especificar un tema básico que contiene un aspecto básico de la aplicación. Para lograr este objetivo, puede utilizar la herencia de temas.
Step 6 - Modifique el componente de la aplicación de vista de esta manera.
'view' => [
'theme' => [
'basePath' => '@app/themes/basic',
'baseUrl' => '@web/themes/basic',
'pathMap' => [
'@app/views' => [
'@app/themes/christmas',
'@app/themes/basic',
],
]
],
],
En la configuración anterior, el @app/views/site/index.phpEl archivo de visualización tendrá un tema como @ app / themes / christmas / site / index.php o @ app / themes / basic / site / index.php, según el archivo que exista. Si existen ambos archivos, se utilizará el primero.
Step 7 - Crea el themes/christmas/site estructura de directorios.
Step 8 - Ahora, dentro de la carpeta themes / christmas / site, cree un archivo llamado about.php con el siguiente código.
<?php
/* @var $this yii\web\View */
use yii\helpers\Html;
$this->title = 'About';
$this->params['breadcrumbs'][] = $this->title;
$this->registerMetaTag(['name' => 'keywords', 'content' => 'yii, developing,
views, meta, tags']);
$this->registerMetaTag(['name' => 'description', 'content' => 'This is the
description of this page!'], 'description');
?>
<div class = "site-about">
<h2>Christmas theme</h2>
<img src = "http://pngimg.com/upload/fir_tree_PNG2514.png" alt = ""/>
<p style = "color: red;">
This is the About page. You may modify the following file to customize its content:
</p>
</div>
Step 9 - Si vas a http://localhost:8080/index.php?r=site/about, verá la página Acerca de actualizada utilizando el tema de Navidad.