Список – это перечень однотипных элементов.
Дерево – это иерархическая структура элементов (древовидный список). Ветви дерева – это дочерние элементы. Класс, который реализует функционал построения дерева – wAjaxTree.
В качестве примера древовидного списка можно привести список файлов – меню Утилиты- Файл-менеджер.
В этом случае используется метод treeframe() класса wCatalog. Из базы данных выбирается вся информация об элементах дерева, добавляются права удалять, редактировать, добавлять элементы ($tree->editing = true;$tree->adding = true;$tree->deleting = true;), добавляется способность дерева разворачиваться-сворачиваться ($tree->leaf_func).
Отдельно стоит рассмотреть асинхронные запросы класса wAjaxTree. Здесь задействован wAjaxlist плагин jquery (main/js/jquery.wajaxtree.js), который реагирует на действия пользователя и посылает запросы к серверу. Эти запросы обрабатывает метод show(), посылая ответ в xml-формате принимающему js-скрипту. В xml-ответе содержатся данные, позволяющие нарисовать дерево, отредактировать, добавить или удалить его элементы, отобразить контекстное меню. При выполнении этих действий проверяются права пользователя на просмотр дерева и изменение его элементов.
Пример простого древовидного списка с использованием конструктора запросов wSql:
// Create new instance of the wAjaxTree class
include_once(SYS_BASE_PATH.'main/classes/wajaxtree.class.php');
$w = new wAjaxTree();
// Set sql
$w->q->select('objid');
$w->q->select('name', '', array('lang' => true)); // Or $w->q->lselect('name');
$w->q->select('isfolder');
$w->q->select('parent');
$w->q->from('sys_objects');
$w->q->where("objid<>'0'");
$w->q->where("objtype='sys_elements_pages'");
$w->q->where("parent=:parent:");
$w->q->orderby('name', true); // Or $w->q->lorderby('name');
// Print the tree
$w->show();
Пример списка с возможностью редактирования его элементов (добавление к каждому элементу контекстного меню):
// Create new instance of the wAjaxTree class
include_once(SYS_BASE_PATH.'main/classes/wajaxtree.class.php');
$w = new wAjaxTree('test_uni');
$w->container = 'tree_editable';
// Set sql
$w->q->select('id');
$w->q->select('name');
$w->q->select('isfolder');
$w->q->select('parent');
$w->q->from('test_uni');
$w->q->where('id>0');
$w->q->where('parent=:parent:');
$w->q->orderby('name');
// Set permissions for tree
$w->editing = true;
$w->adding = true;
$w->deleting = true;
// Print the tree
$w->show();