OGPタグというものがあります。
facebookとかでシェアしたときに、任意のタイトルやdescription、画像等を設定するmetaタグです。
さて、このOGPタグと、titleタグ、metaタグの一部(description)等は、内容が重なります。
これらを、view等から簡単に設定できると良いですね。
というわけで @yando さんのアドバイスを受け、プラグインにしてみました。
CakePHP OGP Plugin |
インストールと設定
プラグインをダウンロードし、 APP/Plugin/Ogp となるように設置します。
git で clone / submodule add する場合は、次のような感じで
cd your_app git clone git://github.com/monsat/Ogp.git Plugin/Ogp
CakePHP2.xではプラグインを明示的に読み出す必要があるので
# APP/Config/bootstrap.php CakePlugin::load('Ogp');とし、Controllerで、OgpHelperを読み出します。
# APP/Controller/AppController.php public $helpers = array( 'Html', 'Form', 'Ogp.Ogp');これで準備完了です。
次に、サイトの設定をします。
# APP/Config/bootstrap.php Configure::write('Site', array( 'site_name' => 'サイトのタイトル', 'description' => 'サイトの説明', 'image' => '/img/image.png', // サイトの画像 'type' => 'website', // サイトの種類(blog等) 'separator' => ' - ', // ページタイトルとサイトタイトルの間の文字列 )); Configure::write('Ogp.settings', array( 'base' => 'Site.', 'autoKeys' => array('type', 'site_name', 'description', 'image'), // viewで設定しなくても必ず書き出すOGPタグ ));
Configureで Ogp.settings.base で設定しているので、
Configure::read('Site.site_name') や Configure::read('Site.description') などが利用されます。
使い方
layoutファイルの次の記述の箇所に、他のmetaタグと一緒に書き出されます。# layout echo $this->fetch('meta');
viewファイルでは、以下のように使います。
# view // <title>タグ($title_for_layout)も同時に設定されます。 $this->Ogp->title('ページのタイトル'); // フルURLで書き出されます。 $this->Ogp->image($post['Post']['author_image_url']); // その他は、ogpタグのname(og:無し)とcontent $this->Ogp->set( 'description', "stripped \n and <b>tags</b>", // options array( 'meta' => true, ), );
contentに使用される文字列は、タブ・改行文字およびhtmlタグを除去します。
※ stripTagsオプションを false にすると、htmlタグの除去は行われません
metaオプションを true にすると、通常のmetaタグも同時に書き出されます。
この記事の例では、次のようなタグが出力されるでしょう。(順番は変えてあります)
<title>ページのタイトル - サイトのタイトル</title> <meta property="og:title" content="ページのタイトル - サイトのタイトル" /> <meta property="og:site_name" content="サイトのタイトル" />'; <meta name="description" content="サイトの説明" /> <meta property="og:description" content="サイトの説明" /> <meta property="og:type" content="website" /> <meta property="og:image" content="http://example.com/img/author_image_example.png" />
という具合です。
$this->Ogp->title()を設定しなければ、Site.site_nameの値がtitleタグとog:titleに使用されます。