4 关注者

主题

主题是一种用另一种替换一组 视图 的方法,而无需触碰原始视图渲染代码。您可以使用主题来系统地更改应用程序的外观和感觉。

要使用主题,您应该配置 主题 属性的 view 应用程序组件。该属性配置一个 yii\base\Theme 对象,它控制如何替换视图文件。您应该主要指定以下 yii\base\Theme 的属性

例如,如果您在 SiteController 中调用 $this->render('about'),您将渲染视图文件 @app/views/site/about.php。但是,如果您在以下应用程序配置中启用主题,则将渲染视图文件 @app/themes/basic/site/about.php,而不是。

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

信息: 路径别名受主题支持。在进行视图替换时,路径别名将转换为实际文件路径或 URL。

您可以通过 yii\base\View::$theme 属性访问 yii\base\Theme 对象。例如,在视图文件中,您可以编写以下代码,因为 $this 指的是视图对象

$theme = $this->theme;

// returns: $theme->baseUrl . '/img/logo.gif'
$url = $theme->getUrl('img/logo.gif');

// returns: $theme->basePath . '/img/logo.gif'
$file = $theme->getPath('img/logo.gif');

yii\base\Theme::$pathMap 属性控制如何替换视图文件。它接受一个键值对数组,其中键是要替换的原始视图路径,而值是相应的主题视图路径。替换基于部分匹配:如果视图路径以 pathMap 数组中的任何键开头,则匹配部分将替换为相应的数组值。使用上面的配置示例,因为 @app/views/site/about.php 部分匹配键 @app/views,它将被替换为 @app/themes/basic/site/about.php

主题模块

为了对模块进行主题化,yii\base\Theme::$pathMap 可以像下面这样配置

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

它将允许您将 @app/modules/blog/views/comment/index.php 主题化为 @app/themes/basic/modules/blog/views/comment/index.php

主题小部件

为了对小部件进行主题化,您可以通过以下方式配置 yii\base\Theme::$pathMap

'pathMap' => [
    '@app/views' => '@app/themes/basic',
    '@app/widgets' => '@app/themes/basic/widgets', // <-- !!!
],

这将允许您将 @app/widgets/currency/views/index.php 主题化为 @app/themes/basic/widgets/currency/views/index.php

主题继承

有时您可能希望定义一个基本主题,其中包含应用程序的基本外观和感觉,然后根据当前的节日,您可能希望稍微改变外观和感觉。您可以使用主题继承来实现此目标,这是通过将单个视图路径映射到多个目标来完成的。例如,

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

在这种情况下,视图@app/views/site/index.php将被主题化为@app/themes/christmas/site/index.php@app/themes/basic/site/index.php,具体取决于哪个主题文件存在。如果两个主题文件都存在,则第一个主题文件将优先。在实践中,您将把大多数主题视图文件保存在@app/themes/basic中,并在@app/themes/christmas中自定义其中一些文件。

发现错别字或您认为此页面需要改进?
在 GitHub 上编辑它 !