エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説

      2019/09/28

CakePHP3でページごとに必要となる処理や変数などを編集する処理

 
前回の記事「CakePHP3のOGPはHTMLヘルパーの$this->Html->meta()を使って設定」では、あらかじめ用意されている HTMLヘルパーを利用して OGPを設定しました。
 
HTMLヘルパーは便利なのでこれを利用しない理由はありませんので、実際に実装する場合は HTMLヘルパーを利用する方法を使用してください。
ですが、今回の記事は、同じことを「fetch()」「assign()」を利用して実装することもできます、という実験的な内容の記事になります。
 
 
この方法は下記の記事で書いている「fetch()」「assign()」を利用する方法です。
CakePHP3で /Layout/defult.ctpにある titleタグ、h1タグを編集する方法
 
この仕組は、下記の記事に書いている、JavaScriptや CSSを使用するページごとに指定する方法などにも活用することができます。
CakePHP3でページごとに読み込むJavaScript、CSSを変える処理の解説
 
いずれの処理も、レイアウトファイルに変数を指定しておき、各ページのテンプレートファイル側でそのレイアウトファイルの変数に埋め込む変数の値を指定する、という仕組みです。
 
 

CakePHP3で OGPを設定する具体的な設定方法

 
それでは、以下はサンプルソースを利用した具体的な設定方法を解説していきます。
 
 

レイアウトファイル default.ctpを編集

 
まず最初は、レイアウトファイル「default.ctp」を編集します。
 
パス付きのファイルは以下になります。
/src/Template/Layout/default.ctp
 

 
17行目の「$this->fetch('ogp')」を追記します。
追記した箇所に OGPのタグが編集されます。
 
 

各ページのテンプレートファイル view.ctpを編集

 
各テンプレート側では、OGPのタグとそのタグに編集する変数を指定します。
 
パス付きのファイル名は以下になります。
/src/Template/Topics/view.ctp
 
 
「fetch(‘ogp’)」で指定した箇所に編集する値は、「assign(“ogp”, “値”)」という形式で指定します。
ここではサンプルとして、URLだけを変数で指定しています。
 

 
 
ただ、上記の方法ではやや見にくいため、下記のように「assign」を使わず「start」~「end」で指定する方法もあります。
 

 
これで、ページごとの OGPを設定することができます。
 
 
ちなみに、サンプルソース中に出てくる「Topics」は、「お知らせ情報」が入っているテーブルで、テーブルレイアウトは「CakePHP3で保存前にバリデーション結果を取得する2つの方法」の記事にあるような内容を想定してください。
 
 

OGPの部分をエレメントとして別ファイルにする方法

 
先に解説した内容でも OGPとして機能はしますが、いくつものテンプレートに同じ内容を記述する必要があり、メンテナンス性が高くありませんので、OGPの部分はエレメント(パーツ)として別ファイルとして管理したほうが便利でしょう。
 
 

OGPのタグをエレメントファイル ogpElement.ctpとして編集

 
まず最初に、OGPとして記述する内容をエレメントとして取り出します。
 
生成するファイルのパス付きファイル名は以下になります。
/src/Template/Element/ogpElement.ctp
 
そこに下記の内容を記述します。
 

 
ここでは「og:title」「og:url」「og:description」を変数としていますが、実際に設定する場合は「og:type」「og:image」も変数として指定する必要があります。
 
 

テンプレートファイル view.ctpの変更

 
そして、各ページのテンプレート側は下記のように修正します。
 
パス付きのファイル名は以下になります。
/src/Template/Topics/view.ctp
 

 
先程作成したエレメントファイルを「$this->element()」で読み込みます。
 
1つ目のパラメーターが、エレメントのファイル名になります。
2つ目のパラメーターが、エレメントに渡す変数を指定箇所になります。配列で指定できますので、必要に応じていくつでも指定することができます。
 
 

サイト全体に共通する処理をページごとに切り替える処理

 
今回は、サイト全体に共通して指定をする必要はあるものの、ページごとにそれぞれ違うテキストを切り替えて編集していく必要がある metaタグの一種である OGPを指定する方法を解説しました。
 
 
同じような考え方をする仕組みとして、下記の記事で書いている titleタグ、h1タグの値を指定する方法や、使用する JavaScriptや CSSをページごとに設定する方法、パンくずを指定する方法、metaタグの「keywords」「description」を指定する方法などにも活用することができます。
CakePHP3で /Layout/defult.ctpにある titleタグ、h1タグを編集する方法
CakePHP3でページごとに読み込むJavaScript、CSSを変える処理の解説
CakePHP3でkeywords、DescriptionをHTMLヘルパーを使って設定する
CakePHP3のOGPはHTMLヘルパーの$this->Html->meta()を使って設定
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
 
 
これらは、レイアウトファイルに変数を指定しておき、そこに編集する値を各ページ用のテンプレートファイルで指定する、という仕組みです。
 
 

CakePHP3の関連記事

CakePHPのpostlinkで生成した削除リンクをクリックしても処理が実行されない対処法
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」に関する記事一覧
 
 

 - CakePHP 3.x 4.x 5.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHPで Auto Incrementを外すと Duplicate entry '0' for keyのエラーが出るかも
CakePHPで Auto Incrementを外すと Duplicate entry ‘0’ for keyのエラーが出るかも

CakePHPでAuto Incrementの設定を変更したときに「Duplicate entry ‘0’ for key」のエラーが出た。原因はModel内で IDを編集する処理の追加を忘れていたからだった。

CakePHP3のdatetime型カラムの日時の扱い。秒まで正しく表示する方法
CakePHP3、CakePHP4のdatetime型カラムの日時の扱い。秒まで表示する方法

CakePHP3の日時カラムで秒まで扱う場合はdate()、strtotime()関数ではうまくいかない。CakePHP3であらかじめ用意された「i18nFormat()」を使用する。

CakePHP 2.3 連携先のテーブルの項目で条件抽出する場合

アソシエーション(連携)している先のテーブルの項目で条件抽出する際の考え方と注意点をサンプルソースを用いて説明しています。

CakePHP 2.3でOn Duplicate Key構文を実装

CakePHPで On Duplicate Key構文を Queryを利用して実装する方法をサンプルソース付きで解説します。

CakePHP3のHtmlHelperのLink設定のまとめ。mailto、URL、Root/Homeのリンクなども
CakePHP3のHtmlHelperのLink設定のまとめ。mailto、URL、Root/Homeのリンクなども

CakePHP3でHtmlHelperを使ってリンクの設定をする方法のまとめ。基本形からURLを指定、class、id、targetを指定、mailtoのリンク、画像をアンカーに、JavaScriptのダイアログなどの解説。

CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。

CakePHP3でajaxを利用する処理の実装方法を解説。プルダウンを変更するとデータベースの値を取得し検索結果の内容を変更するというような処理を想定。CakePHP3.6以降の CSRF対策対応済。

CakePHP4、5のnewEmptyEntityで作成したオブジェクトは空なのか、確認してみた
CakePHP4、5のnewEmptyEntityで作成したオブジェクトは空なのか、確認してみた

CakePHPでレコードを新規登録をする際にnewEmptyEntity()を使って空のEntityを作成するが、これのempty、is_nullなどのでの判定結果がtrueかfalseか確認してみた。

CakePHP3のCakeDC/Usersのログイン後のリダイレクトを設定解説
CakePHP3のCakeDC/Usersのログイン後のリダイレクトとユーザ権限管理の設定解説

CakeDC謹製Usersプラグインの紹介。ログイン認証後にリダイレクトする先の設定方法についての解説と実運用するために必要なコツを解説。便利な仕組みも仕様の理解があって初めてうまく使いこなせる。

CakePHP4、5のユーザ認証でID、PASS以外の削除フラグなども条件加える方法
CakePHP4、5のユーザ認証でID、PASS以外の削除フラグなども条件加える方法

CakePHP4系、5系ではAuthenticationを使用してログイン認証を行う。その認証でID、PASS以外の削除フラグなどの条件を加えたいときの対応方法について解説。

CakePHP 2.3 Search Pluginで検索処理 その7queryを使って 日付の範囲検索

CakePHPの検索プラグイン Search Pluginの検索処理の中で queryを使って日付の範囲検索の方法です。