ちょっと前に、renderElementを使うとelementsフォルダに入っているファイルをview内で読み込めるようなことを書いた。それについて一つ知ったことがあったので、メモ。
// index.ctp
<?php foreach($data as $val) : ?>
<?php echo $this->renderElement('program') ?>
<?php endforeach ?>
// program.ctp
<?php echo $val ?>
例えばこんな感じでindex.ctpというファイルと、elementsフォルダの中にprogram.ctpというファイルがあったとする。
僕はこう書けばforeachの$valがprogram.ctp内でもそのまま使えるのかと思っていたのだけど、どうやらそれはダメらしい。controllerでsetした変数ならそのまま使えるけれど、上のような場合は、renderElementの第2引数にエレメントで使う変数を定義しておく必要がある。
// index.ctp
<?php foreach($data as $val) : ?>
<?php echo $this->renderElement('program', array('val' => $val) ?>
<?php endforeach ?>
// program.ctp
<?php echo $val ?>
これでOK。今はarrayの中身が両方ともvalになっているけど、別にこれはいつでも同じになるわけじゃない。要は↓こういうこと。
// index.ctp
<?php foreach($data as $val1) : ?>
<?php echo $this->renderElement('program', array('val2' => $val1) ?>
<?php endforeach ?>
// program.ctp
<?php echo $val2 ?>
LIGはWebサイト制作を支援しています。ご興味のある方は事業ぺージをぜひご覧ください。