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 nun 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,
  // ...
);

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"));
}