Yiiでページごとにkeywordsなどのメタタグをつける方法については、こちらに書いた通りなんですが、ページが多くなってくると、ページごとにつける作業が大変になってきます。ちょっとでも楽をしたいので、以下のような仕様で実装してみます。
- デフォルトのkeywordsとdescriptionを設定しておく。
- ビューのファイルでkeywordsやdescriptionを設定できる。
- ビューのファイルでkeywordsやdescriptionの設定があれば、これをメタタグとして利用する。なければデフォルトのものを利用する。
まず最初にprotected/extentions/CMetaTag.phpを用意します。内容は以下のような感じです。
<?php
class CMetaTag extends CApplicationComponent
{
public $tags=array();
public function renderMetaTags() {
if (!isset($this->tags['keywords']))
$this->tags['keywords'] = Yii::app()->name;
if (!isset($this->tags['description']))
$this->tags['description'] = Yii::app()->name;
foreach ($this->tags as $type => $value) {
Yii::app()->clientScript->registerMetaTag($value, $type);
}
}
}次に、protected/config/main.phpのconponentsで、作成したCMetaTagクラスを読み込むようにします。
'components'=>array(
//metatag
'metatag'=>array(
'class'=>'ext.CMetaTag',
'tags'=>array(
'keywords'=>'ワークショップ,イベント',
'description'=>'ワークショップなどの各種イベント情報の登録、掲載、閲覧ができます。',
),
),
),keywordsで設定しているのが、デフォルトで利用されるkeywordsの値です。descriptionについても同様です。
最後に、protected/conponents/Contoroller.phpに以下の関数を追加してメタタグを書き出すようにします。
protected function afterRender($view, &$output) {
parent::afterRender($view,$output);
Yii::app()->metatag->renderMetaTags();
return true;
}
これで、どのページでもデフォルトのkeywordsとdescriptionのメタタグが表示されるようになります。
ビューごとに違うkeywordsやdescriptionを表示するようにしたい場合は、ビューのファイルなどで
Yii::app()->metatag->tags['keywords'] = "キーワード"; Yii::app()->metatag->tags['description'] = "ページ説明";
のように書けばよいです。