Skip to content

Neue Attribute hinzufügen

Um einem Objektformular neue Attribute hinzuzufügen, müssen an mehreren Stellen Ergänzungen vorgenommen werden:

Datenbank-Anpassungen

Im Beispiel: update/sql/58.php

Zunächst muss das neue Attribut in der Datenbank mit entsprechneden Angaben zum Datentyp angelegt werden. Außerdem ist für die Auswahl der Sichbarkeit ein neuer Eintrag in der Tabelle gris_attribute nötig. Die gesamte Änderung muss als SQL-Skript im Ordner update/sql abgelegt und die DB-Version hochgezählt werden.

-- Beispiel für ein neues Feld "Stichtag" im Event-Objekt

-- Neues Attribut Stichtag für Ereignisse
ALTER TABLE `gris_event` ADD `gris_event_reference_date` DATETIME NULL DEFAULT NULL AFTER `gris_event_end`;

-- Neues Attribut für die Sichtbarkeitseinstellungen
INSERT INTO `gris_attribute` (`gris_attribute_id`, `gris_attribute_name`, `gris_attribute_class`, `gris_attribute_object`, `gris_attribute_group`, `gris_attribute_mandatory`) VALUES (NULL, 'Stichtag',  'gris_show_event_reference_date', 'gris_resource', NULL, '0');

-- Datenbank Version aktualisieren
UPDATE `gris_settings` SET `gris_settings_value` = '58' WHERE `gris_settings`.`gris_settings_key` = "version" AND `gris_settings`.`gris_settings_group` = "database";

PHP-Klasse

Im Beispiel: classes/GRIS_EVENT.php

Neben der Datenbank muss ggfs. auch das Objekt für die Speicherung des neuen Attributs erweitert werden. Dazu muss das neue Attribut in der Methode update an den folgenden Stellen ergänzt werden: innerhalb der initialen SQL-Abfrage der Daten und im Block, der die Daten für ein leeres Objekt bereitstellt.

// Beispiel für die Erweiterung der SQL-Abfrage in der Methode "update"
$query = "SELECT `gris_event_id`,
  // ...
  `gris_event_reference_date`,
  // ...
  FROM `gris_event` 
  WHERE `gris_resource_id` = ".$resource_id.";";

// Beispiel für die Erweiterung für die Erzeugung des leeren Objekts in der Methode "update"
$this->full_data = array(
  "gris_event_id" => NULL,
  // ...
  "gris_event_reference_date" => NULL,
  // ...
);

Vokabular

Falls das neue Attribut ein kontrolliertes Vokabular bereitstellen, muss dieses vorher in der Tabelle gris_vocabulary hinterlegt werden.

INSERT INTO `gris_vocabulary` (`gris_vocabulary_group`, `gris_vocabulary_text`)
VALUES ('gris_resource_website_action', 'Eigene Pressemitteilungen de');

Formularseite

Im Beispiel: pages/gris_resource_detail.php

Abschließend muss noch das Formular ergänzt werden. Je nach Platzierung des neuen Feldes im Gesamtformular müssen ggfs. noch Parameter (z. B. required) unsetted werden, die vorher im Code für andere Felder definiert wurden.

// gris_reference_date
if ($show->check_attribute("gris_show_event_reference_date", "gris_resource", $resourcetype_id) > 0){
  $params["title"] = $i18n->__("Bitte den Stichtag angeben");
  $params["value"] = $full_resource->get("gris_event")->get("gris_event_reference_date");
  $params["name"] = "gris_event_reference_date";
  $form->add_input($params, $i18n->__("Stichtag"));
}

Attributliste

Als letzten Schritt muss die Liste der Attribute, die GRIS als Referenz nutzt ergänzt werden. Ansonsten wird der neue Eintrag in die Attribut-Tabelle beim nächsten Aufruf der Info-Seite wieder entfernt. Dazu muss die Datei sql/gris_default_attributes.jsonentsprechend angepasst werden.

// Beispieleintrag für neues Attribut
  {
    "gris_attribute_class": "gris_event_reference_date",
    "gris_attribute_group": null,
    "gris_attribute_hide": null,
    "gris_attribute_import": "0",
    "gris_attribute_mandatory": "0",
    "gris_attribute_name": "Stichtag",
    "gris_attribute_object": "gris_event"
  }

Attributliste ergänzen

Um eine aktuelle Version der kompletten Attribut-Tabelle zu erstellen kann diese mit wenigen Änderungen im dem Code erzeugt werden:

In classes/GRIS_SHOW

  • Z. 492 ergänzen: echo json_encode($attribute_list);
  • Z. 494 - 517 auskommentieren (!)
  • Info-Seite in GRIS aufrufen und JSON-Output im Browser kopieren
  • Webseite JSON-Formatter aufrufen und Code dort einfügen
  • Mit dem Button Format / Beautifyprüfen und formatieren
  • Im Formatter auf der rechten Seite oben den folgenden Filter setzen:
    [*].{gris_attribute_class: gris_attribute_class, gris_attribute_group: gris_attribute_group, gris_attribute_hide: gris_attribute_hide, gris_attribute_import: ris_attribute_import, gris_attribute_mandatory: gris_attribute_mandatory, gris_attribute_name: gris_attribute_name, gris_attribute_object: gris_attribute_object}
  • Gefiltertes Ergebnis aus dem rechten Fenster kopieren/speichern und mit Merge/Winmerge mit der aktuellen Version vergleichen
  • Neue JSON in den Branch comitten
  • GRIS_SHOW wieder in die ursprüngliche Version bringen