Attributtyp-Abbildung ändern

Es kann vorkommen, dass die Abbildung eines Attributtyps auf Fiona 7 nachträglich geändert werden muss, also nachdem Attribute dieses Typs bereits angelegt und verwendet wurden. Dies ist beispielsweise dann der Fall, wenn das Attribut child_order als linklist-Typ angelegt wurde und sich später zeigt, dass die dadurch erzeugten Links im CMS hinderlich sind, weil aufgrund der Konsistenzprüfung die Zielobjekte nicht ohne weiteres gelöscht werden können.

Der Typ eines Attributs kann nachträglich geändert werden, es müssen dabei jedoch ein paar Aspekte beachtet werden.

Die Daten werden automatisch migriert, allerdings erst bei der erneuten Sortierung des Attributinhalts und anschließender Freigabe des betreffenden Objekts. Erst dann werden z.B. die vorhandenen Links gelöscht. In der Praxis bedeutet dies, dass zwischenzeitlich die Attributdaten mancher Objekte im neuen Format gespeichert werden und bei anderen Objekten im alten Format. Dies ist von besonderer Bedeutung, wenn auf die Daten noch anders zugegriffen wird, etwa per TCL.

1. Attribut aus dem CMS entfernen

Zunächst muss das betreffende Attribut aus allen Vorlagen herausgenommen und anschließend gelöscht werden. Diese Aufgabe kann in der Ruby-Konsole automatisiert werden. Im folgenden Beispiel wird das Attribut child_order entfernt:

['Vorlage1', 'Vorlage2', 'Vorlage3'].each do |obj_class|
  Fiona7::Tools::AttributeRemover.new(obj_class, :child_order).remove
end

Die Klasse AttributeRemover entfernt das Attribut aus der spezifizierten Vorlage und löscht es, sofern es nicht woanders noch genutzt wird.

2. Konfiguration anpassen

Nachdem das Attribut weggeräumt wurde, kann die neue Typabbildung spezifiziert werden. Siehe auch: Attributtyp-Abbildung spezifizieren

Fiona7.custom_attribute_types = {
  child_order: :text
}

3. Die CMS-Objekte migrieren

Die Objekte, die Attribute mit geänderter Typabbildung enthalten, werden bei der Bearbeitung und Freigabe auf das neue Format umgestellt. Dies geschieht im Hintergrund; Redakteure können diesen Vorgang nicht bemerken.

Der hier beschriebene Ablauf darf nicht mit der Entfernung der attribute-Definitionen aus Ruby-Klassen verwechselt werden. Wenn eine attribute-Definition entfernt wird, bleibt das Attribut bestehen, es wird lediglich für den Redakteur unsichtbar gemacht.