2.4. Hierarchische Daten

Einige Daten werden im GREYHOUND Server in einer hierarchischen Struktur, einem Baum-Datentyp gespeichert. Hierzu zählen beispielsweise die Gruppen und Themen, bei denen eine Gruppe bzw. ein Thema weitere Untergruppen bzw. Unterthemen besitzen kann.
Beim Abrufen der Gruppen- oder Themenliste vom Server werden diese Daten in einer flachen Liste geliefert. Die hierarchische Struktur ergibt sich über die Verknüpfung eines Elementes mit einem übergeordneten Element. Dazu wird in der Objekteigenschaft "ParentRef" die ID des übergeordneten Elements vorgehalten. Elemente, deren "ParentRef" leer ist (oder den Wert 0 hat), sind Elemente der obersten Ebene.
Um diese flache Liste in eine hierarchische Baumstruktur zu überführen, bietet die PHP RPC Bibliothek die Klasse GhRpcTree an. Das folgende Beispiel zeigt, wie die Themenliste vom Server abgerufen und in eine Baumstruktur überführt wird und anschließend die Themen der obersten Ebene ausgegeben werden:
Themenbaum:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
require_once 'ghrpc/ghrpc.php';

$client = new GhRpcClient('localhost'80false'tester''test123');
$client->setUniqueClientIdCookieName('ghrpcexample3');

$topicService rpc_topicslib::newRpcTopics($client); // Dienst für Themen erzeugen
$topicsList $topicService->GetList(false); // Themen-Liste vom Server abrufen

$topicsTree = new GhRpcTree($topicsList); // Themen-Baum erzeugen

// Themen der obersten Ebene ausgeben:
foreach($topicsTree->getChildren() as $treeNode)
{
  
$topic $treeNode->getData();
  echo 
'Thema "' htmlspecialchars($topic->Name) . '" (ID: ' $topic->ID ', Pfad: ' htmlspecialchars($topic->Path) . ')<br>';
}
Diese Baumstruktur erbt von der Hilfsklasse GhCoreTree und kann daher auch in den entsprechenden Formularkomponenten der grafischen Benutzungsoberflächen, die mit der PHP GUI erstellt werden, verwendet werden. Das folgende Beispiel zeigt, wie der Themenbaum als Webseitenkomponente mit Hilfe der PHP GUI angezeigt werden kann:
Themenbaum als PHP GUI Komponente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
require_once 'ghrpc/ghrpc.php';
require_once 
'ghgui/ghgui.php';

$client = new GhRpcClient('localhost'80false'tester''test123');
$client->setUniqueClientIdCookieName('ghrpcexample4');

$topicService rpc_topicslib::newRpcTopics($client); // Dienst für Themen erzeugen
$topicsList $topicService->GetList(false); // Themen-Liste vom Server abrufen

$topicsTree = new GhRpcTree($topicsList); // Themen-Baum erzeugen

$page = new GhGuiWebPage(); // PHP GUI Webseite erzeugen
$form = new GhGuiForm(); // PHP GUI Formular erzeugen
$page->addContentComponent($form); // Formular zur Webseite hinzufügen
$tree = new GhGuiTree('topic'$topicsTree); // PHP GUI Baumkomponente erzeugen
$form->addComponent($tree); // Baumkomponente zum Formular hinzufügen
$page->show(); // Webseite anzeigen