Дерево из базы данных
Существует типичная операция просмотра таблицы базы данных, ссылающейся на свой первичный ключ:
записи, ссылающиеся на "щелкнутую" запись, демонстрируется в браузере как вложенные в "щелкнутую" запись,
остальные - все еще не запрошены из базы данных.
Введем html-элемент dialogue, демонстрирующий записи таблицы базы данных со значками
(чтобы таблица базы данных демонстрировалась именно в таком виде,
а не в виде таблицы или куба,
свойство type должно быть равно tree).
В атрибуте roll укажем название таблицы базы данных
<dialogue roll="A"/>
dialogue {
type: tree;
}
или SQL-запрос
<dialogue roll="select * from A where a15=100"/>
dialogue {
type: tree;
}
а в свойствах
- address - доменное имя или IP-адрес СУБД
(по умолчанию тот же адрес, откуда взят html-документ)
- type=tree
Связь с базой данных будет происходить по отдельному TCP-порту по протоколу SQL5.
Когда браузер встречает этот html-элемент в процессе загрузки документа, он:
- SQL-запросами считывает из системных таблиц базы данных схему таблицы A, определяет ссылающееся поле и
второе поле (будет отображено как название узла дерева)
- считывает первичный ключи и второе поле записей таблицы A, не ссылающихся на другие записи той же таблицы
select * from A where ref_fld is null;
Пользователь может добавлять и удалять узлы, переименовывать узлы, открывать и закрывать узлы
(видеть вложенные узлы), перемещать (drag-and-drop) и копировать узлы
(в т.ч. между разными dialogue - необходимо только, чтобы эти dialogue
работали с одной и той же таблицей базы данных).
|
folder_name1 |
|
folder_name2 |
|
|
folder_name3 |
|
|
folder_name4 |
|
folder_name5 |
|
|
folder_name6 |
Отображение столбцов
При наличии нескольких ссылающихся полей, возникает неопределенность,
для разрешения которой необходимое ссылающееся поле нужно указать в свойстве ref.
Графические свойства
Свойство image указывает на графический файл,
который должен быть использован в качестве маркера узла.
Свойство newstring определяет,
должны ли узлы одного уровня иерархии быть расположены в одной строке или каждый в новой строке.
folder |
|
folder |
|
folder3 |
| | newstring=yes (по умолчанию) |
|
folder |
|
folder
folder3 |
|
| folder |
folder |
|
folder3 |
| newstring=no |
Свойство sideward определяет,
где вложенные узлы должны быть расположены относительно родительского ("folder3") тега.
folder3 |
|
folder |
|
folder |
|
folder3 |
|
folder
folder |
| sideward=right (по умолчанию) |
|
| folder3 |
folder |
|
folder |
|
|
| folder3 |
folder
folder |
|
| sideward=left |
|
folder3 |
|
folder |
folder |
|
| folder3 |
folder |
|
folder |
| sideward=center |
Свойство wholenes определяет способ отбражения узлов.
Brief означает,
что у всех родительских узлов не показаны вложенные узлы,
и что из всех дочерних узлов показаны только те, которые находятся на непосредственно следующем уровне иерархии.
folder1 |
|
folder2 |
|
|
folder3 |
|
|
|
folder41 |
|
|
|
|
folder5_41 |
|
|
|
folder42 |
|
|
|
|
folder5_42 |
|
| wholenes=full (значение по умолчанию) |
|
| folder1/folder2/folder3 |
|
folder41 |
|
folder42 |
|
| folder1/folder2/folder3 |
|
folder41
folder42 |
| wholenes=brief |
P.S.
dialogue с любым значением свойства type
(равным record, tree, или cube)
может быть главным html-элементом для
dialogue также с любым значением свойства type.
Сам html-документ, запросы от всех dialogue, содержащихся в нем,
ответы на запросы идут последовательно по одному и тому же TCP-соединению
(ответы разделены друг от друга и от html-документа баментом
<?new/?>,
ответы приходят после окончания получения html-документа).
Тюрин Дмитрий