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'] = "ページ説明";
のように書けばよいです。