Yiiでkeywordsなどのmetaタグをページごとにつける方法2

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'] = "ページ説明";

のように書けばよいです。

投稿日:
カテゴリー: php タグ: