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