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 |
---|---|---|---|---|
TableReporterScheme | Input/Table Reporter | Ausgabe- und Anzeigerechte für das Eingabefeld und die Tabellenstrukturen | keine | Lesender Zugriff auf alle Datensätze in
|
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
|
Events
Klassenname | Beschreibung |
---|---|
| Wird beim Aufbauen der Tabelle pro Eintrag und Spalte ausgeführt. |
| Wird beim Aufbauen der Layoutauswahl der Tabellenstrukturen ausgeführt und wird durch die Layoutapps benutzt. |
| Wird beim Aufbauen der Tabelle ausgeführt. |
| 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
}