Деревья в базах данных => Примеры скриптов => Вывод деревьев => Рекурсивный шаблон
Вывод дерева с использованием рекурсивного шаблона
popoff
Этот способ применим только в том случае, если используемый в Вашем проекте шаблонный движок поддерживает рекурсивные вызовы.
Основная часть:
<?php
// Пример дерева.
//1 1
//2 1.1
//3 1.1.1
//4 1.1.2
//5 1.1.3
//6 1.1.3.1
//7 1.2
//8 1.3
//9 1.3.1
//10 1.3.2
//11 1.4
//12 1.4.1
//13 2
//14 3
//15 3.1
$a_tree=array(
array('k_item' =>1,'s_name' =>'1','a_tree' => array(
array('k_item' =>2,'s_name' =>'1.1','a_tree' => array(
array('k_item' =>3,'s_name' =>'1.1.1','a_tree' 4/span>=> array()),
array('k_item' =>4,'s_name' =>'1.1.2','a_tree' => array()),
array('k_item' =>5,'s_name' =>'1.1.3','a_tree' => array(
array('k_item' =>6,'s_name' =>'1.1.3.1','a_tree' => array())
)),
)),
array('k_item' =>7,'s_name' =>'1.2','a_tree' => array()),
array('k_item' =>8,'s_name' =>'1.3','a_tree' => array(
array('k_item' =>9,'s_name' =>'1.3.1','a_tree' => array()),
array('k_item' =>10,'s_name' =>'1.3.2','a_tree' => array())
)),
array('k_item' =>11,'s_name' =>'1.4','a_tree' => array(
array('k_item' =>12,'s_name' =>'1.4.1','a_tree' => array())
)),
)),
array('k_item' =>13,'s_name' =>'2','a_tree' => array()),
array('k_item' =>14,'s_name' =>'3','a_tree' => array(
array('k_item' =>15,'s_name' =>'3.1','a_tree' => array())
))
);
function tree_template_load(&$a_tree)
{
include('tree_print_static_template.php');
}
tree_template_load($a_tree);
?>
Шаблон (это как бы не совсем шаблон, но он демонстрирует, как можно было бы выводить дерево с использованием рекурсии в шаблонах).
tree_print_static_template.php
<ul>
<?php for($i=0;$i<count($a_tree);$i++) { ?>
<li>
<?= $a_tree[$i]['s_name'] ?>
<?php
if(!empty($a_tree[$i]['a_tree']))
tree_template_load($a_tree[$i]['a_tree']);
?>
</li>
<?php } ?>
</ul>
Будете ругать и кричать: «что за фигня! зачем так мудрено закручивать?! такого не бывает!»? Давайте посмотрим, как подобная конструкция выглядит в
моем шаблонном движке:
tree_print_static_template.xml
<?xml version="1.0" ?>
<template>
<ul>
<foreach src="a_tree">
<li>
[s_name]
<if def="a_tree">
<load src="tree_print_static_template" scope="local" />
</if>
</li>
</foreach>
</ul>
</template>
Попробовать рассмотренный здесь пример:
http://popoff.donetsk.ua/try/tree_print_static_template.html