今回はSmartyを使用して簡単にツリーを作成する方法です。
まずphpの処理で、配列のキーに親の番号、値にノードのIDを持つ配列を用意しておきます。
例)
$arrChild = array(array(1,3), array(2), array(4,6), array(), array(5),array(), array())
そしてSmartyの呼び出し用のテンプレmain.tplと再帰用のtree.tpを用意します。
main.tpl——————————-
{assign var=”id” value=”0″}
{include file=”tree.tpl”}
—————————————
tree.tpl——————————–
{foreach from=$arrChild[$id] item=id}
<処理>
{if $arrChild[$id]}
{include file=”tree.tpl”}
{/if}
{/foreach}
—————————————
これだけでどれだけ巨大なツリーでも処理が行えます。
この再帰呼び出しのキモはtree.tplの1行目の
{foreach from=$arrChild[$id] item=id}
の部分になります。
最初にこの行が呼び出されたときは$idは0が入っており、最初に
$arrChild[0]の中をforeachで回しますが、このときitemにidを指定しているのでこのループの内側では$idは$arrChild[0][0]に入っている1になります。
そして{if $arrChild[1]}を行うと中身が入っているので{include file=”tree.tpl”}が呼ばれます。
そうすると次は$idが1の状態で{foreach from=$arrChild[$id] item=id}が呼ばれ・・・
という再帰処理が行われます。
結構使えるテクだと思いますのでお試しあれ・・
4月 03
11月 24th, 2010 at 23:33:54
[...] はぁ、smartyで再帰的な処理をしようっつーのがそもそもイカンのかな。。。 http://blog.asens.jp/archives/461 これはなかなかナルホドって感じだけど。DIRツリーをポチポチ開閉するだけなんだ [...]