CakePHP3のOGPはHTMLヘルパーの$this->Html->meta()を使って設定
2019/09/28
CakePHP3のOGPはHTMLヘルパーとエレメントを利用して設定すると便利
CakePHP3で OGPを設定する方法も用意されている
CakePHP3の Cookbookには「OGPを設定する方法はこれです!」という感じの解説はありませんので、検索しても Cookbook以外にも「これ!」という解説の記事は見つかりませんでした。
ですが、「CakePHP3でkeywords、DescriptionをHTMLヘルパーを使って設定する」で解説しましたが、CakePHP3では metaタグを編集する HTMLヘルパーが用意されていますので、これを利用すると OGPのタグも設定することができます。
なお、この記事では OGPのアプリIDの取得方法などについては解説していませんので、別途検索してください。
CakePHP3で metaタグを編集する基本形
「CakePHP3でkeywords、DescriptionをHTMLヘルパーを使って設定する」で解説しましたが、metaタグを編集する基本形は以下のようになります。
記述する場所は、「/src/Template/Topics/view.ctp」などのテンプレートファイルになります。
1 |
<?= $this->Html->meta("description","ああああ",["block"=>true]); ?> |
出力結果は以下のようになります。
1 |
<meta name="description" content="ああああ"/> |
ちなみに、レイアウトファイル(/src/Template/Layout/default.ctp)の 32行目あたりの「<?= $this->fetch(‘meta’) ?>」の記述があるので、metaタグとして出力されます。
CakePHP3で metaタグを編集する応用編・OGPのタグを編集
「$this->Html->meta()
」の 1つ目のパラメーターは、文字列で指定した場合は name属性の値を指定したものとして処理されます。
ですが、1つ目のパラメーターを下記のように配列で指定することもでき、配列で指定する場合は、属性とその値をそれぞれ指定することができるようになっています。
1 |
<?= $this->Html->meta(["property"=>"og:site_name","content"=>"あいう"],null,["block"=>true]); ?> |
上記の記述をすると、出力結果の HTMLは以下のようになります。
1 |
<meta property="og:site_name" content="あいう"/> |
そのため、上記のように配列で OGPに必要な属性を指定することで、OGPの metaタグを編集することができるようになるのです。
1つ目のパラメーターを配列で指定した場合は、2つ目のパラメーターは無視されるようで、「content」の値も 1つ目のパラメーターの配列の中に入れる必要があります。
また、3つ目のパラメーター「"block"=>true
」は、metaタグを headタグ内に記述するために必須の設定になります。
そのため、2つ目のパラメーターもなにか記述する必要がありますが(何も書かないとエラーになりますが)、何を書いても無視されるため、何を書いても問題ありません。
上記のサンプルのように「null」や「false」などを書いておくと後々混乱せずにすむでしょう。
3つ目のパラメーターについては、「CakePHP3でkeywords、DescriptionをHTMLヘルパーを使って設定する」に詳しく書いていますので、そちらを参考にしてください。
OGPの部分をエレメントとして別ファイルにする方法
先に解説した内容で、OGPに必要な metaタグの処理「$this->Html->meta()
」をテンプレートファイル内に記述しても OGPとして機能はしますが、いくつものテンプレートに同じような内容を記述する必要があり、メンテナンス性が高くありません。
そのため、OGPの部分はエレメント(パーツ)として別ファイルとして管理したほうが便利になります。
OGPのタグをエレメントファイル ogpElement.ctpとして編集
まず最初に、OGPとして記述する内容をエレメントとして取り出します。
生成するファイルのパス付きファイル名は以下になります。
/src/Template/Element/ogpElement.ctp
そこに下記の内容を記述します。
1 2 3 4 5 6 7 8 9 10 |
<?php echo $this->Html->meta(["property"=>"og:site_name","content"=>"サイト名"],null,["block"=>true]); echo $this->Html->meta(["property"=>"og:title","content"=>$ogpTitle],null,["block"=>true]); echo $this->Html->meta(["property"=>"og:type","content"=>"トップページは website、個別ページは article"],null,["block"=>true]); echo $this->Html->meta(["property"=>"og:url","content"=>$ogpUrl],null,["block"=>true]); echo $this->Html->meta(["property"=>"og:image","content"=>"サムネイル画像の URL"],null,["block"=>true]); echo $this->Html->meta(["property"=>"og:description","content"=>$ogpDescription],null,["block"=>true]); echo $this->Html->meta(["property"=>"fb:app_id","content"=>"FacebookのアプリID"],null,["block"=>true]); echo $this->Html->meta(["property"=>"og:locale","content"=>"ja_JP"],null,["block"=>true]); ?> |
ここでは「og:title」「og:url」「og:description」を変数としていますが、実際に設定する場合は「og:type」「og:image」も変数として指定する必要があります。
テンプレートファイル view.ctpの変更
そして、各ページのテンプレート側は下記のように修正します。
パス付きのファイル名は以下になります。
/src/Template/Topics/view.ctp
1 2 3 4 5 6 7 |
<?php $url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $title = "タイトル1"; $description = "記事の description(記事概要)1"; echo $this->element("ogpElement",["ogpUrl"=>$url,"ogpTitle"=>$title,"ogpDescription"=>$description]); ?> |
先程作成したエレメントファイルを「$this->element()」で読み込みます。
1つ目のパラメーターが、エレメントのファイル名になります。
2つ目のパラメーターが、エレメントに渡す変数を指定箇所になります。配列で指定できますので、必要に応じていくつでも指定することができます。
これで、OGPに必要なタグを編集することができました。
今回は、HTMLヘルパーを使って OGPを指定しましたが、オリジナルのブロックを生成し、そこに OGPを編集する方法もあります。
fetch、asignを利用して OGPを編集したい場合は下記の記事を参考にしてください。
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
サイト全体に共通する処理をページごとに切り替える処理
今回は、サイト全体に共通して指定をする必要はあるものの、ページごとにそれぞれ違うテキストを切り替えて編集していく必要がある metaタグの一種である OGPを指定する方法を解説しました。
同じような考え方をする仕組みとして、下記の記事で書いている titleタグ、h1タグの値を指定する方法や、使用する JavaScriptや CSSをページごとに設定する方法、パンくずを指定する方法、metaタグの「keywords」「description」を指定する方法などにも活用することができます。
CakePHP3で /Layout/defult.ctpにある titleタグ、h1タグを編集する方法
CakePHP3でページごとに読み込むJavaScript、CSSを変える処理の解説
CakePHP3でkeywords、DescriptionをHTMLヘルパーを使って設定する
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
これらは、レイアウトファイルに変数を指定しておき、そこに編集する値を各ページ用のテンプレートファイルで指定する、という仕組みです。
CakePHP3の関連記事
CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールするCakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
その他の「CakePHP3」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
CakePHP 2.3 Search Pluginで検索処理 その5入力項目に複数項目入力した場合の AND検索、OR検索
CakePHPの検索プラグイン Search Pluginの検索処理の中で複数項目を入力した場合の AND検索、OR検索についての解説です。
-
CakePHP3でアソシエーション先のカラムでデータをソートして取得したい
アソシエーション先のテーブルのカラムをキーにソートをしたデータを取得したい!ときの記述方法を解説。「orderAsc()」ではなく「contain()」の中にSort条件を記述する。
-
CakePHP3で値を入力直後にバリデーションする方法解説
CakePHP3でバリデーションの実行を保存する時から入力情報を受け取るときに変更する処理の解説。CakePHP3ではnewEntity()の処理でバリデートするため1行追加で対応可能。
-
CakePHP3でページごとに読み込むJavaScript、CSSを変える処理の解説
CakePHP3でJavaScriptやCSSを編集する基本形から、それらやテンプレート(エレメント)を特定のテンプレートを読み込んだときのみ編集、実行するための方法、ブロック化について解説。
-
CakePHP3の画像、ファイルアップロードプラグインUpload Plugin 3.0の設置解説・その1
CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその1で基本的な導入方法の解説で読みながら簡単に導入が可能。
-
CakePHP4のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP4の英語のメッセージを日本語化(多言語化)する手順を解説。オリジナルのメッセージを作成する方法やプログラムで文言を追加する場合の対応なども解説。
-
CakePHP4のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。ユーザ新規登録の流れを紹介しつつ、テンプレートファイル、設定情報ファイルの場所とそれらをカスタマイズする方法を説明します。
-
CakePHP 2.3 Search Pluginで検索処理 その6ORDER、sortソートの機能
CakePHPの検索プラグイン Search Pluginの検索処理の中で order、ソートについての解説です。
-
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
CakePHPのログ出力方法の解説。app.phpにログ設定をし、スコープやレベルを指定してログ出力を振り分ける方法、CakePHP4で配列出力にはvar_exportが必要なことなどを解説。
-
CakePHP 2.3 Search Pluginで検索処理 その3入力エリア一つで複数の項目を同時に検索する方法
CakePHPの検索プラグイン Search Pluginの検索処理の中で入力エリア一つで複数の項目を同時に検索する方法を解説。