Formulare

Die Formulare sind die Schlüsselelemente der Metadateneingabe. Hier wird sowohl die Oberfläche als auch die Verknüpfung zum Datenmodell hinterlegt. Die Formulare enthalten die Oberflächen, die für die Logik des Systems genutzt wird.

Vererbung im Formular

Datensatzreihen unterstützen die Angaben von Vererbung für die abhängigen Metadatensätze eines Tiles. Beim Anlegen einer Datensatzreihe können im Formular die einzelnen Metadatenfelder für die Vererbung freigegebenen werden.

Formular Vererbung Beispiel Series

Formular Vererbung Beispiel Series

Beim Anlegen einer Datensatzserie können damit die einzelnen Felder zur Vererbung festgelegt werden.

Einschränkung der Vererbung in den Formularen

Die Vererbung kann für einzelne Instanzen aktiviert und deaktiviert werden. Da die Vererbung aber mit den HierarchyLevel verbunden ist wird die Änderung in den Formularen gesteuert.

Der Schalter für diese Vererbungsregel auf die Profile liegt in der Datei /metador2/src/Plugins/LVermGeo/BasicProfileBundle/Resources/views/template.html.twig. Dort wird mit der folgenden Zeile die Vererbung aktiviert:

{% set inheritanceEnabled = (profile == 'lvermgeo_series_profile' and array_get(p, '_source', '') != 'archiv') ? true : false %}
  • profile == ‚lvermgeo_series_profile‘: für das Series Profil
  • array_get(p, ‚_source‘, ‚‘) != ‚archiv‘): Für alle Quellen außer dem Archiv.

Möchte man eine weitere Instanz hinzufügen, passt man den Teil der Quellen an.

{% set inheritanceEnabled = (profile == 'lvermgeo_series_profile' and array_get(p, '_source', '') != 'archiv' and array_get(p, '_source', '') != 'test') ? true : false %}

Erstellen eines Kind-Metadatensatzes

Kind-Metadatensätze werden über Metador aus den Suchergebnissen erstellt. Dies hat den Vorteil, dass man den genauen Eltern-Datensatz filtern (Instanz, hierarchyLevel) und suchen kann.

Erstellen eines Kind-Datensatzes von einem Elterndatensatz

Erstellen eines Kind-Datensatzes von einem Elterndatensatz

Eltern-Datensätze, die ihre Daten an die Kinder weitervererben besitzen eine extra Schaltfläche, um das Kind zu erstellen. Dabei öffnet sich ein neuer Datensatz (hier Tile) und die vererbten Felder stehen schon gefüllt im Formular:

Vererbte Felder im Formular

Vererbte Felder im Formular

Felder, die vererbt worden sind, können im Formular nicht mehr verändert werden. Sie sind über das Vererbungs-Symbol gekennzeichnet:

Vererbungssymbol

Vererbungssymbol

Damit kein Datensatz erstellt werden kann, der nicht von seinem Elterndatensatz erbt, schaltet man in der Administration die Erstellung des HierarchyLevels für die jeweiligen Instanzen aus. Damit ist das Anlegen eines Datensatzes über die Erstellen Schaltfläche nicht mehr möglich, sondern nur noch aus einem vorhandenen Parent.

Verfügbarkeit von Child-HiearchyLevel

Verfügbarkeit von Child-HiearchyLevel

Beispiel: In diesem Bildschirmfoto ist das Erstellen von Tiles nur für die Instanz Archiv erlaubt. In den anderen Instanzen ist das Erstellen damit nur möglich, wenn man dies aus einem Elterndatensatz startet.

Aufbau der Formulare allgemein

Am Beispiel des Service-Profils wird der Aufbau der Formulare gezeigt.

Hinweis: Die folgenden Darstellungen werden sich noch ändern, speziell bezüglich der Vererbungsregeln.

Verweis auf Makros

Das Hauptformular ist die Datei form.html.twig im Verzeichnis src/Plugins/WhereGroup/ServiceProfileBundle/Resources/views/Profile/.

Die Inhalte und die vordefinierten Formularinhalte bauen auf Makros auf, die im MetadorBasicProfileBundle hinterlegt sind. Im Kopf der form.html.twig wird auf die Makros verwiesen.

{% import 'MetadorBasicProfileBundle:Makro:form.html.twig' as form_element %}

Gestaltung der Seite

Jedes Profil hat seinen Aufbau in einem eigenen Bundle des LVermGeo-Plugins. Grundlage aller Profile ist das BasicProfileBundle (/Plugins/LVermGeo/BasicProfileBundle), welches die grundlegenden Formulareaufbauten enthält.

Am Beispiel der Identifikation werden die wichtigsten Parameter erläutert.

Formular Oberfläche Identifikation

Formular Oberfläche Identifikation

Textfelder

Einfache Textfelder sind die einfachste Eingabefom für das Formular. Sie erlauben die Texteingabe.

Formular Oberfläche einzeiliges Textfeld

Formular Oberfläche einzeiliges Textfeld

Textfelder werden über ein input definiert.

<div class="col c-1-2">
{{ form_element.input({
  'name'            : 'p[isbn]',
  'label'           : 'ISBN',
  'type'            : 'optional',
  'validatorSources': tabId,
  'p'               : p
}) }}
</div>

Wobei: - col-1-2: Das Feld wird in einer zweispaltigem Layout eingefügt. Es ist mit einem weiteren Feld in diesem Layout eingebettet.

<div class="row r-2">
    <!-- erstes Feld -->
    <div class="col c-1-2">
        [...]
    <!-- zweites Feld -->
    <div class="col c-1-2">
        [...]
  • name: Der Name des Objektes, in das der Wert gespeichert wird. Hier: isbn
  • label: Der Text für das Formular.
  • type: Optional oder verpflichtendes Feld. Hier optional.
  • validatorSource: Angabe der Validierungsregel.
  • p: interner Name des Objektes (immer p).

Mehrzeilige Textfelder

Mehrzeilige Textfelder erlauben die Eingabe von größeren Texten über mehrere Zeilen.

Formular Oberfläche mehrzeiliges Textfeld

Formular Oberfläche mehrzeiliges Textfeld

Sie werden über ein text Element realisiert.

<div class="row r-1">
        <div class="col c-1">
            {{ form_element.text({
                'name'            : 'p[abstract]',
                'label'           : 'Kurzbeschreibung',
                'validatorSources': tabId,
                'inheritance': inheritanceEnabled,
                'p'               : p
            })
            }}
        </div>
    </div>
</div>

In diesem Fall (Kurzbeschreibung) füllt das Feld die gesamte Spalte aus (row r-1, col c-1). Der Aufbau ist ähnlich dem einzeiligen Textfeld.

  • inheritance: Vererbungsrichtlinien, die im weiteren Verlauf noch näher beschrieben werden.

Auswahlfelder

Auswahlfelder bieten eine Drop-Down Liste mit festgelegten Felder an, wie beispielsweise bei der Sprache des Datenbestandes

Formular Oberfläche Select

Formular Oberfläche Select

Hierfür gibt es die select Vorlage, die ähnlich dem Textfeld aufgebaut ist. In diesem Beispiel mit weiteren Möglichkeiten.

<div class="col c-1-2">
{{ form_element.select({
  'name'    : 'p[identLanguage]',
  'label'   : 'Sprache des Datenbestandes',
  'default' : 'ger',
  'validatorSources': tabId,
  'hasList' : true,
  'defaultList': {
      ''   : '',
      'ger': 'Deutsch',
      'eng': 'Englisch'
  },
  'inheritance': inheritanceEnabled,
  'p'       : p
})
}}
</div>
  • defaultList: Zunächst die Angabe der Standardwerte für die Liste. Diese werden automatisch gesetzt und beim Anpassen der Auswahllisten mit übernommen.
  • inheritance: Vererbungsrichtlinien, die im weiteren Verlauf noch näher beschrieben werden.

Vererbung im TWIG

Formularfelder können die Vererbung über das inheritance Attribut umsetzen.

[...]
'inheritance': inheritanceEnabled,
[...]

In diesem Attribut sind die Regeln der Vererbung realisiert (auf welches Profil, auf welche Instanz). Soll ein Feld vererbt werden, ist die Zeile notwendig, fällt die Vererbung dort weg, wird das Feld weggelassen.

Feld mit Vererbung:

<div class="col c-1-2">
{{ form_element.select({
  'name'    : 'p[identLanguage]',
  'label'   : 'Sprache des Datenbestandes',
  'default' : 'ger',
  'validatorSources': tabId,
  'hasList' : true,
  'defaultList': {
      ''   : '',
      'ger': 'Deutsch',
      'eng': 'Englisch'
  },
  'inheritance': inheritanceEnabled,
  'p'       : p
})
}}
</div>
Feld mit Vererbung

Feld mit Vererbung

Feld ohne Vererbung:

<div class="col c-1-2">
{{ form_element.select({
  'name'    : 'p[identLanguage]',
  'label'   : 'Sprache des Datenbestandes',
  'default' : 'ger',
  'validatorSources': tabId,
  'hasList' : true,
  'defaultList': {
      ''   : '',
      'ger': 'Deutsch',
      'eng': 'Englisch'
  },
  'p'       : p
})
}}
</div>
Feld ohne Vererbung

Feld ohne Vererbung