【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【圧倒的 低コスト】Oracle Cloud 構築・運用保守・監視サービス

【圧倒的 低コスト】Oracle Cloud 構築・運用保守・監視サービス

【9,800円/回】Webサイト自動診断サービス「クイックスキャナー」

【9,800円/回】Webサイト自動診断サービス「クイックスキャナー」

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【低コスト】Wasabi オブジェクトストレージ 構築・運用サービス

【次世代】ゲーム専用データ分析エンジン『ThinkingEngine』

【次世代】ゲーム専用データ分析エンジン『ThinkingEngine』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【ECアプリ開発】Shopify カスタムアプリ開発サービス

【ECアプリ開発】Shopify カスタムアプリ開発サービス

【音声アプリ開発】Twilio カスタムアプリ開発サービス

【音声アプリ開発】Twilio カスタムアプリ開発サービス

【グローバル対応】北米リージョン・クラウド / サーバー サポート

【グローバル対応】北米リージョン・クラウド / サーバー サポート

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

CakePHPでView内の共通部分を使いまわす方法

こんにちは。
開発の長谷です。

CakePHPでの開発をすることが多いのですが、
Viewを記述する際、今までずっとhead内やheader、footerなどの
共通部分を1つ1つのファイルに書き込んでいました。

ただ、このように書いてしまうと修正が必要になった場合、
1つ1つファイルを修正しないといけなくなったりして、とても大変で面倒です。。

このことからどうにかして共通部分を一纏めにできないかと思い色々と調べた結果、
方法を見つけましたので紹介します。

方法

1. 共通となるレイアウトのViewファイルをapp/View/Elements/ 配下に作成する

まず、app/View/Elements/ 配下に共通となるレイアウトを作成します。
ファイル名は通常のViewと同様{任意のファイル名}.ctpです。

今回はhead.ctp, header.ctp, footer.ctp としましょう。
通常のViewに書いていたhead, header, footerの部分をそれぞれコピペすればOKです。

ちなみに、app/View/Elements/ 配下にディレクトリを作成して、その下にViewファイルを置くことも可能です。
例:app/View/Elements/Admin/header.ctp など

2. 通常のViewで先ほど作成したファイルを読み込ませる

読み込ませたい部分に

// 共通head
<?php echo $this->element('head'); ?>

// 共通header
<?php echo $this->element('header'); ?>

// 共通footer
<?php echo $this->element('head'); ?>

と記載すると、先ほど作成したファイルを自動で読み込んでくれます。

また、app/View/Elements/Admin/ のようにディレクトリを作成している場合は

// 共通head
<?php echo $this->element('Admin/head'); ?>

// 共通header
<?php echo $this->element('Admin/header'); ?>

// 共通footer
<?php echo $this->element('Admin/head'); ?>

と記述すればOKです。

問題点

共通部分といっても一部分だけ違っていたりすることが多いと思います。
よくあるのはhead内のtitleタグです。
titleタグの要素の内容はページによって内容が違うことが多いですよね。

こういった場合も対応可能です。

$this->element()で第二引数に連想配列で["変数名" => "値"]とすると、
パラメータを渡すことができます。

使用例:

// element側(head.ctp)

<head>
	.......
	<title><?php echo $title; ?></title>
</head>
// 通常View側(呼び出し側)

<?php echo $this->element('head', ["title" => "トップ"]); ?>

といった感じで呼び出すこともできるので大変便利ですね。

以上です。

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
2
読み込み中...
2 票, 平均: 1.00 / 12
6,739
facebook twitter はてなブックマーク
【大阪 / 横浜】インフラエンジニア / サーバーサイドエンジニア 積極採用中!

【大阪 / 横浜】インフラエンジニア / サーバーサイドエンジニア 積極採用中!

この記事をかいた人

About the author

長谷竜弥

新卒にて株式会社ビヨンドに入社。

Webシステム開発(Webサービス・デジタルコンテンツ・業務管理システム などのブラウザで動くサービス、システムの開発)や、ゲームAPI(アプリゲームとの通信部分のプログラム開発)を行っている。

また、Shopify のプライベート / カスタムアプリの開発も行っている。

元々は大阪オフィスに勤めていたが、2019年に横浜オフィスに転勤。
趣味は野球 / カラオケ / アニメ