Tabellenstruktur (framework-input-table)

Diese Erweiterung für brandbox besteht aus einem neuen Eingabefeld welches zusammen mit der Datensatzpflege genutzt wird und einem Codepaket für die Erstellung von Tabellen. Für beide Bestandteile werden sog. Layoutapps benötigt, welche nachinstalliert werden können. Standardmäßig liefert brandbox die Layoutapp table-layout-standard mit.

Eingabefeld

Das Eingabefeld für die Tabellenstrukturen steht in der Datenmodellierung als "Tabellenstruktur" und in den Widget- oder Strukturdefinitionen als Table zur Verfügung. Zusätzlich wird die nachfolgende Feldkonfiguration benötigt damit das Eingabefeld einsatzbereit ist:

{ "InputTableLayout": "[Layoutapp für Tabellenstruktur, bspw. TableLayoutStandard]", "relation": { "repository": "[Identifikator der Quelldatenbanktabelle]" } }



Der Konfigurationblock relation kann weggelassen werden, wenn eine Auswahl der Quelldatenbanktabelle gewünscht ist.

Die Darstellung besteht aus drei aufeinanderfolgenden Eingabefeldern welche die verschiedenen Bestandteile der Tabellenstruktur steuern. Als erstes wird ein Auswahlfeld für die Auswahl der Quelldatenbanktabelle angeboten. Dieses ist bei einer über die Konfiguration vorgegebenen Quelldatenbanktabelle deaktiviert und kann nicht verändert werden. Als nächstes wird eine Auswahl der verfügbaren Tabellenstrukturen angeboten. Diese Auswahl ist immer auf die Quelldatenbanktabelle und das konfigurierte Layout eingeschränkt. Zuletzt wird die Datensatzpflege angezeigt um die darzustellenden Datensätze auswählen und verwalten zu können.

Datenspeicherung

Das Eingabefeld speichert die Eingaben als Array mit benannten Indexen. Wenn diese Eingaben in einer Doctrine-Column gespeichert werden sollen, ist der Typ json zu nutzen.

Tabellenstrukturpflege

Zusätzlich zum Eingabefeld werden zwei Datenbanktabellen zur Pflege von Tabellenstrukturen und ihren Spalten angeboten. Diese sind

  • Tabellenstrukturen

  • Tabellenspalten

Eine Tabellenstruktur fasst mehrere Tabellenspalten zusammen und enthält die Information über die zu nutztende Layoutapp für die Darstellung und die Datenbanktabelle für welche die Struktur gilt. Eine Tabellenspalte wiederum enthält einen anzuzeigenden Titel sowie die anzuzeigende Information. Diese Informationen sind nur zusammen mit einer Tabellenstruktur verfügbar und können unter anderem durch die Layoutapps bereitgestellt werden. Eine Tabellenspalte kann nur über die Kindverknüpfung einer Tabellenstruktur erstellt werden.

Rollenschemata

Diese Rollenschemata sollten zusammen mit den Rollenschemata der Datensatzpflege genutzt werden.



Klassenname

Bezeichnung

Beschreibung

Funktionsrechte

Tabellenrechte

Klassenname

Bezeichnung

Beschreibung

Funktionsrechte

Tabellenrechte

TableReporterScheme

Input/Table Reporter

Ausgabe- und Anzeigerechte für das Eingabefeld und die Tabellenstrukturen

keine

Lesender Zugriff auf alle Datensätze in

  • InputTableTable

  • InputTableColumn

TableOperatorScheme

Input/Table Operator

Verwaltungsrechte für das Eingabefeld und die Tabellenstrukturen

Neuladen der Auswahlfelder

s.o.

TableAdministratorScheme

Input/Table Administrator

Vollständiger Zugriff

s.o.

Vollständiger Zugriff auf

  • InputTableTable

  • InputTableColumn

Events

Klassenname

Beschreibung

Klassenname

Beschreibung

OnPopulateColumn

Wird beim Aufbauen der Tabelle pro Eintrag und Spalte ausgeführt.

OnPopulateLayout

Wird beim Aufbauen der Layoutauswahl der Tabellenstrukturen ausgeführt und wird durch die Layoutapps benutzt.

OnPopulateTable

Wird beim Aufbauen der Tabelle ausgeführt.

OnPopulateType

Wird beim Aufbauen der Typenauswahl in den Tabellenspalten ausgeführt.

Programmatischer Zugriff

Über die nachfolgenden Methoden ist ein programmatischer Zugriff auf die Tabellenstrukturen verfügbar mit denen ein Tabelle aufgebaut werden kann.

Aufbau mit Eingabefeldwert
use Brandbox\FrameworkInputTable\Input\Table; use Brandbox\FrameworkStyleguide; // $payload ist der Wert des Eingabefeldes // $collation ist die gewünschte Kollation der Ausgabe $element = $this ->staticController(Table\Manager::class) ->getTableElement($payload, $collation) ; if($element instanceof FrameworkElementAbstract) { // $element ist ein fertiges Styleguidelement }



Aufbau mit Struktur und Entities
use Brandbox\FrameworkInputTable\Input\Table; use Brandbox\FrameworkStyleguide; $manager = $this->staticController(Table\Manager::class); // $id ist die Datensatz-ID der Tabellenstruktur // $collation ist die gewünschte Kollation der Struktur // ...$entities sind die auszugebenden Datensätze $structure = $manager->getTableStructure($id, $collation); $element = $manager->getElementTable($structure, ...$entities); if($element instanceof FrameworkElementAbstract) { // $element ist ein fertiges Styleguidelement }