繰り返し使うテンプレートを一元管理できるエレメント | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

CakePHPのデフォルトレイアウト「default.ctp」を読み解く 」の続きにはなりますが、テンプレートやビューの機能の中にはこの他にも便利な機能が幾つかあります。

その1つが、よくあるパターンとしてレイアウトの一部分がどれも共通で同じものを表示したいというようなときに使えるエレメントという機能があります。


ビューの中にまともに書いていくと、テンプレートファイルが数個のレベルであれば手作業でいけるかもしれませんが、数十や数百という数字になってくるとデザインの変更依頼がきたら発狂したくなるレベルになってしまいます。

こんなときに、共通部分をパーツとして切り出し、その他のレイアウトにも適用するのがエレメントの機能です。



CakePHPでエレメントを使う


例えば、どのページでも共通で使うフッター部分として、下記のようなHTMLがあったとします。


<address>Copyright &copy; itboy All Rights Reserved.</address>
</body>
</html>


これを共通パーツとしてエレメントに登録したい場合は、下記のパスに保存します。


/path/to/cakephp/app/View/Elements/footer.ctp


レイアウトやビューファイルからは、下記のように呼び出すだけでどのテンプレートファイルからも共通のHTMLを出力させることが可能になります。


<?php echo $this->element("footer")?>


こうすることで、Elementsディレクトリにあるfooter.ctpが自動的に呼び出されます。

エレメントへは引数を渡すことも可能ですので、共通ではあるんだけど微妙に出力されるデータが違うとかといった場合でも対応が可能です。


<?php echo $this->element("footer", array("hoge" => "Hello World"))?>


エレメント用のファイルであるfooter.ctpは、下記のように書いておきます。


<address><?php echo $hoge; ?></address>
</body>
</html>

上記の実行結果は、下記のようになります。


<address>Hello World</address>
</body>
</html>


今回紹介したようなフッタ以外にもヘッダやグローバルメニュー、広告などなどテンプレートで共通化できる部分って多いと思いますので、1つのファイルで一元管理され、1つを変更することで全てのHTMLファイルを書き換えてくれるので保守・運用を楽にしてくれる便利な機能だと思います。