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

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

【サーバー管理不要】WordPress専用クラウド『WebSpeed』

【サーバー管理不要】WordPress専用クラウド『WebSpeed』

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

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

【コミュニケーションアプリ開発】LINE アプリ開発サービス

【コミュニケーションアプリ開発】LINE アプリ開発サービス

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

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

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

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

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

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

【CPU】AMD EPYC 技術検証(PoC)サービス

【CPU】AMD EPYC 技術検証(PoC)サービス

【Webシステム / サービス開発】SAKARAKU Lab(セカラクラボ)

【Webシステム / サービス開発】SAKARAKU Lab(セカラクラボ)

【取材記事】サーバー系企業ビヨンドが サーバーサイドエンジニアを募集中

【取材記事】サーバー系企業ビヨンドが サーバーサイドエンジニアを募集中

【対談記事】「やっぱクラウド移設っていいですよね」マイネット × ビヨンド エンジニア対談

【対談記事】「やっぱクラウド移設っていいですよね」マイネット × ビヨンド エンジニア対談

【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" => "トップ"]); ?>

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

以上です。

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
0
読み込み中...
0 票, 平均: 0.00 / 10
5,302
facebook twitter はてなブックマーク

この記事をかいた人

About the author

長谷竜弥

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

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

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

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