NTTドコモ様_dカーシェア
NTTドコモ様_dカーシェア
2009.06.04

elementsフォルダを利用する

まっちー

CakePHPの中身を見てみると、viewsフォルダの中にelementsというフォルダがある。

この中に適当なctpファイルなどを作っておくと、renderElementでそのファイルを読み込むことができる。ページ内の共通部分などをここで作っておくと、何度も使いまわせるので効率が良くなる。

……と、書いてはみたものの、実はまだあまり活用したことがない部分だったりします。これを知ったときは意外と使う機会が多そうだぞとか思ったんですけどねぇ。

昨日も、Ajaxを使ってエレメントの内容を書き換えるプログラムを作る場面に出くわしたんですけど、最初はそのエレメントの中の部分をelements内にファイルを作ってrenderEelemetで読み込んでたんですよ。

<script>

function changeExp() {

 € € € € var form = $('ProgramCatalogueForm');

 € € € € new Ajax.Updater('changeExp',form.action,{"method": "post",asynchronous:true, evalScripts:true,parameters:Form.serialize(form)});

}

</script>

<!--中略-->

<div id="changeExp">

<?php

 € € € € if(!empty($this->data)) {

 € € € € € € € € € echo $this->renderElement('file1');

 € € € € } else {

 € € € € € € € € € echo $this->renderElement('file2');

 € € € € }

?>

</div>

みたいな感じでね。大雑把に書きましたけど、要は何かしらデータが飛んできたらfile1.ctpの内容を、何も飛んでこなかったらfile2.ctpの内容を表示させるってな感じでやってたんですよ。セレクトボックスの項目を変えたらonChangeでAjaxが発動するように。

でもいろいろとやっているうちに「わざわざelements内にファイルを二つ作ってまでやることじゃなくね? if文の中に直接書いちゃってもよくね?」っていう思考にたどり着きまして……結局elements内に書くのは止めようかなってな感じになりまして、そして誰もいなくなりました。いや、正確にはemptyという空のファイルが虚しくたたずんでいるだけになりました。

まあ、ファイルを分けて書いた方がソースはごちゃごちゃしなくはなるんですけどね。もう少し規模がおっきくなってきたら、活用する日も来るやもしれませんね。

とりあえず、これは便利そうだなってことだけは何となく思ったので、一応こうしてメモっときます。