灵活运用 - 合理定义meta的key

  • 作者:KK

  • 发表日期:2016.10.17


如果要在head标签里输出meta keywords和description的话,一般是要在模板里执行这样的代码:

$this->registerMetaTag([
	'name' => 'keywords',
	'content' => '本页关键词1 关键词2 关键词N ……',
]);

$this->registerMetaTag([
	'name' => 'description',
	'content' => 'KK洗衣粉,洗出来的衣服比兔毛还要白!',
]);

但实际上很多站点都不会为每个模板都设置关键词以及摘要信息,于是在layout里也会registerMetaTag作为一份通用的关键词和摘要

但在layout注册了meta后,模板又注册,就会出现重复输出的情况:

解决办法是有的,且看yii\web\View::registerMetaTag的源代码

好了,那明白了吧,其实就是将代码改成这样就好了:

$keywordsFlag = 'keywords'; //关键点是这个标记!!!
$this->registerMetaTag([
	'name' => 'keywords',
	'content' => '本页关键词1 关键词2 关键词N ……',
], $keywordsFlag);

$descFlag = 'desc'; //关键点也是这个标记!!!
$this->registerMetaTag([
	'name' => 'description',
	'content' => 'KK洗衣粉,洗出来的衣服比兔毛还要白!',
], $descFlag);

因为底层用第2个参数作为key值将注册的meta信息保存起来了,layout注册一次后保存,再在模板里重复注册时,只要使用相同的第2个参数标识符,就可以覆盖掉layout的,而不是追加