Temas

Nota: Esta sección está en desarrollo.

Un tema (theme) es un directorio de archivos y de vistas (views) y layouts. Cada archivo de este directorio sobrescribe el archivo correspondiente de una aplicación cuando se renderiza. Una única aplicación puede usar múltiples temas para que pueden proporcionar experiencias totalmente diferentes. Solo se puede haber un único tema activo.

Nota: Los temas no están destinados a ser redistribuidos ya que están demasiado ligados a la aplicación. Si se quiere redistribuir una apariencia personalizada, se puede considerar la opción de asset bundles de archivos CSS y Javascript.

Configuración de un Tema

La configuración de un tema se especifica a través del componente view de la aplicación. Para establecer que un tema trabaje con vistas de aplicación básicas, la configuración de la aplicación debe contener lo siguiente:

'components' => [
    'view' => [
        'theme' => [
            'pathMap' => ['@app/views' => '@app/themes/basic'],
            'baseUrl' => '@web/themes/basic',
        ],
    ],
],

En el ejemplo anterior, el pathMap define un mapa (map) de las rutas a las que se aplicará el tema mientras que baseUrl define la URL base para los recursos a los que hacen referencia los archivos del tema.

En nuestro caso pathMap es ['@app/views' => '@app/themes/basic']. Esto significa que cada vista de @app/views primero se buscará en @app/themes/basic y si existe, se usará la vista del directorio del tema en lugar de la vista original.

Por ejemplo, con la configuración anterior, la versión del tema para la vista @app/views/site/index.php será @app/themes/basic/site/index.php. Básicamente se reemplaza @app/views en @app/views/site/index.php por @app/themes/basic.

Temas para Módulos

Para utilizar temas en los módulos, el pathMap debe ser similar al siguiente:

'components' => [
    'view' => [
        'theme' => [
            'pathMap' => [
                '@app/views' => '@app/themes/basic',
                '@app/modules' => '@app/themes/basic/modules', // <-- !!!
            ],
        ],
    ],
],

Esto permite aplicar el tema a @app/modules/blog/views/comment/index.php con la vista @app/themes/basic/modules/blog/views/comment/index.php.

Temas para Widgets

Para utilizar un tema en una vista que se encuentre en @app/widgets/currency/views/index.php, se debe aplicar la siguiente configuración para el componente vista, tema:

'components' => [
    'view' => [
        'theme' => [
            'pathMap' => ['@app/widgets' => '@app/themes/basic/widgets'],
        ],
    ],
],

Con la configuración anterior, se puede crear una versión de la vista @app/widgets/currency/index.php para que se aplique el tema en @app/themes/basic/widgets/currency/index.php.

Uso de Multiples Rutas

Es posible mapear una única ruta a múltiples rutas de temas. Por ejemplo:

'pathMap' => [
    '@app/views' => [
        '@app/themes/christmas',
        '@app/themes/basic',
    ],
]

En este caso, primero se buscara la vista en @app/themes/christmas/site/index.php, si no se encuentra, se intentará en @app/themes/basic/site/index.php. Si la vista no se encuentra en ninguna de rutas especificadas, se usará la vista de aplicación.

Esta capacidad es especialmente útil si se quieren sobrescribir algunas rutas temporal o condicionalmente.