Note :

Le module LIST_TREE vous permet d'exécuter des requêtes SQL possédant une structure arborescente.
Note: pour utiliser cette fonction, veuillez configurer vos accès SQL dans le fichier templeet/config.php.

Il offre les fonctions suivantes:


list_tree

La fonction ~list_tree permet d'effectuer une extraction sur une base de données, selon une structure arborescente.

Avec les séquences LF, LM, LP, LL, LTB, LTT, etc, on peut effectuer un traitement (le plus souvent un affichage) différent selon qu'on affiche la première ligne, les suivantes ou la dernière. Ceci peut s'avérer utile pour générer un tableau.

La fonction ~list_tree prend comme arguments :

Appelons A le premier argument du couple, B le deuxième argument du couple.

Exemple pour une table :

CREATE TABLE my_tree (
	id integer NOT NULL auto_increment,
	parent_id integer NOT NULL DEFAULT '0',
	title varchar(255),
	PRIMARY KEY(id),
	KEY parent_id(parent_id)
);
INSERT INTO my_tree(parent_id, title) VALUES (0, 'Liens');
INSERT INTO my_tree(parent_id, title) VALUES (1, 'Musique');
INSERT INTO my_tree(parent_id, title) VALUES (2, 'Instruments');
INSERT INTO my_tree(parent_id, title) VALUES (1, 'Informatique');
INSERT INTO my_tree(parent_id, title) VALUES (4, 'Linux');
INSERT INTO my_tree(parent_id, title) VALUES (2, 'Partitions');
INSERT INTO my_tree(parent_id, title) VALUES (2, 'Compositeurs');
INSERT INTO my_tree(parent_id, title) VALUES (7, 'J.S. Bach');
INSERT INTO my_tree(parent_id, title) VALUES (7, 'An Piele');
INSERT INTO my_tree(parent_id, title) VALUES (4, 'Templeet');

Ici, le champ parent_id référence le champ id, afin de créer une structure arborescente, comme une structure de rubriques, ou une hiérarchie de répertoires.

Exemple, avec (2, 1) représentant (id, parent_id) :

Liens (1, 0)
  |__ Musique (2,1)
  |      |
  |      |__ Instruments (3, 2)
  |      |
  |      |__ Partitions (6, 2)
  |      |
  |      |__ Compositeurs (7, 2)
  |              |
  |              |__ J.S. Bach (8, 7)
  |              |
  |              |__ An Pierle (9, 7)
  |
  |__ Informatique (4, 1)
         |
	 |__ Linux (5, 4)
         |
	 |__ Templeet (10, 4)

Ensuite, chaque champ objet d'une recherche est nommé par la fonction fld('nom_du_champ') pour le reste de la fonction.

fld

La fonction ~fld utilisée avec list_tree est décrite dans la page de documentation de list.

gfld

La fonction ~gfld utilisée avec list_tree est décrite dans la page de documentation de list.

Son utilisation avec list_tree est faite avec un argument propre à list_tree:


Attention : Les champs tdepth, tnumrows, tcounter ne sont disponible que pour LM, LP, LTT, LTB.
La requête SQL doit être construite de manière particulière afin de permettre à ~list_tree de construire la structure arborescente. La première colonne sélectionnée doit être le champ servant d'identifiant (une colonne id par exemple), la deuxième colonne doit être la valeur de l'identifiant de l'élément parent. L'élément parent doit également être retourné par la requête afin d'obtenir la structure nécessaire.
Par exemple, pour la table donnée en exemple précédemment, on pourrait faire la requête suivante :

~list_tree(~get('database'),
		"SELECT id, parent_id, title FROM my_tree",
		'T',
		'LF','Mon arbre : <br/>',
		'LL','<br/>',
		'LTT','<ul>',
		'LTB','</ul>',
		'LM','<li>~fld('title') (~fld('id'), ~fld('parent_id'), ~gfld('tdepth'))',
		'LP','</li>',
		'LD','J\'ai perdu mon chêne, mon alter égo...'
)

Ce qui donne :

Mon arbre :
  • Liens (1, 0, 1)
    • Musique (2, 1, 2)
      • Instruments (3, 2, 3)
      • Partitions (6, 2, 3)
      • Compositeurs (7, 2, 3)
        • J.S. Bach (8, 7, 4)
        • An Piele (9, 7, 4)
    • Informatique (4, 1, 2)
      • Linux (5, 4, 3)
      • Templeet (10, 4, 3)


La même chose, mais à l'envers :

~list_tree(~get('database'),
		"SELECT id, parent_id, title FROM my_tree",
		'T',
		'LF','Mon arbre : <br/>',
		'LL','<br/>',
		'LTT','<ul>',
		'LTB','</ul>',
		'LP','<li>~fld('title') (~fld('id'), ~fld('parent_id'), ~gfld('tdepth'))',
		'LM','</li>',
		'LD','J\'ai perdu mon chêne, mon alter égo...'
)

Ce qui donne :

Mon arbre :
      • Instruments (3, 2, 3)
      • Partitions (6, 2, 3)
        • J.S. Bach (8, 7, 4)
        • An Piele (9, 7, 4)
      • Compositeurs (7, 2, 3)
    • Musique (2, 1, 2)
      • Linux (5, 4, 3)
      • Templeet (10, 4, 3)
    • Informatique (4, 1, 2)
  • Liens (1, 0, 1)


Soit de manière schématique, en représentant l'ordre d'exéxution de haut en bas et de gauche à droite, en respectant les profondeurs de l'arborescence donnée en exemple en premier :

LF, LTT, LM...............................
.  |                                     .
.  |__ LTT, LM.......................... .
.  |   .   |                           . .
.  |   .   |__ LTT, LM, LP             . .
.  |   .   |                           . .
.  |   .   |__ LM, LP                  . .
.  |   .   |                           . .
.  |   .   |__ LM .................... . .
.  |   .   .        |                . . .
.  |   .   .        |__ LTT, LM, LP  . . .
.  |   .   .        |                . . .
.  |   .   .        |__ LM, LP, LTB  . . .
.  |   .   .                         . . .
.  |   .   ..LP, LTB.................. . .
.  |   .                               . .
.  |   ..LP, LTB........................ .
.  |                                     .
.  |__ LM............................... .
.      .   |                           . .
.      .   |__ LTT, LM, LP             . .
.      .   |                           . .
.      .   |__ LM, LP, LTB             . .
.      .                               . .
.      ..LP, LTB........................ .
.                                        .
..LP, LTB, LF.............................

listtotaltime

La fonction ~listtotaltime utilisée avec list_tree est décrite dans la page de documentation de list.