阿江 2017-10-15 08:10:33 2037次浏览 0条回复 0 0 0

说明

学习Yii Framework 2易2框架的过程是漫长的也是充满乐趣的以下是我学习Yii2框架时对官网英文资料(请参见原文网址)的翻译和代码实现提供了较完整的代码供你参考不妥之处请多多指正

原文网址:

http://www.yiiframework.com/doc-2.0/guide-output-theming.html

本文主题:模板(Theming)

模板(Theming)是无需接触原有视图渲染代码,而使用另一套视图替换的一种方法。你可以使用模板系统化的更新一个应用的外观和视觉。

要使用模板,你应配置视图的theme属性。此属性将配置yii\base\Theme对象,通过此对象管理要替换的视图文件。你可以定义yii\base\Theme的以下属性: yii\base\Theme::$basePath :定义包含模板资源(CSS、JS、图片等)的基本目录 yii\base\Theme::$baseUrl :定义模板资源的基本URL yii\base\Theme::$pathMap :定义视图文件的替换规则

例如,你可以在SiteController中调用$this->render('about'),你将渲染视图文件@app/views/site/about.php。如果在应用配置中按如下代码设置了模板,将要被渲染的视图文件将变为@app/themes/basic/site/about.php。

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

信息:模板支持路径别名,当替换视图时,路径别名将转换为实际路径或URL。 你可以通过yii\base\View::$theme 属性获取yii\base\Theme对象。例如,在一个视图文件中,因为$this 指向当前视图,所以你可以编写如下代码:

$theme=$this->theme;
//返回值:$theme->baseUrl.'/img/logo.gif'
$url=$theme->getUrl('img/logo.gif');
//返回值:$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。

1、Theming Modules(模块的模板)

对于模块的模板,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/inex.php

2、Theming Widgets(小部件的模板)

对于小部件的模板,你可以如下配置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/index.php

3、Theme Inheritance(模板继承)

有时你可以想要定义一个基础模板,包含了应用中的一些基本外观和视觉,或者现在是节假日,你想要让外观和视觉有些轻微的变化。你可以使用模板继承来实现此目标,即将一个视图路径到多个目标,例如:

	'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目录下。

(全文完)

    没有找到数据。
您需要登录后才可以回复。登录 | 立即注册