Welcome to php club

PHP FAQ from PHPclub.ru: Tree/DemoPrintTemplate ...

Начало | Каталог | Изменения | НовыеКомментарии | Вам запрещён доступПользователи | Вам запрещён доступРегистрация | Вход:  Пароль:  

Деревья в базах данных => Примеры скриптов => Вывод деревьев => Рекурсивный шаблон

Вывод дерева с использованием рекурсивного шаблона


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


 
Комментариев нет. [Показать комментарии/форму]