Es gibt Fälle, in denen die vorgegebene Abbildung nicht für den vorgesehenen Zweck eines Attributs geeignet ist. So ist beispielsweise das Attribut child_order
für die Sortierung der Navigation vom Typ referencelist
, was auf linklist
abgebildet wird. Folglich erzeugt eine Sortierung der Navigation Links auf jeden ihrer Unterpunkte. Diese Links können nur erschwert gelöscht werden. Hier wäre eine Abbildung praktisch, die keine Konsistenzprüfung erzwingt.
Genau dafür sind die Custom-Attributtypen konzipiert. Sie ermöglichen es Ihnen, die Abbildung der Attributtypen zu ändern.
Zur Zeit gibt es nur zwei alternative Abbildungen: referencelist
-Attribute können als text
abgebildet werden statt als linklist
, und reference
-Attribute können als string
abgebildet werden statt als linklist
-Attribute. Dadurch werden keine Links im CMS anlegt, und es wird auch keine Konsistenzprüfung durchgeführt.
Es gibt drei Möglichkeiten, eine andere Abbildung zu spezifizieren.
Mit dem Konfigurationsparameter Fiona7.custom_attribute_types
kann Attributen über ihren Namen ein anderer Typ zugewiesen werden. Dabei spielt es keine Rolle, zu welcher Vorlage diese Attribute gehören – nur der Name zählt.
Ein guter Kandidat hierfür ist das Attribut zur Sortierung einer Navigation, child_order
:
Fiona7.custom_attribute_types = {
child_order: :text
}
Bei einer Attributtyp-Abbildung nach Name des Attributs müssen sowohl dieser Name als auch der Ersatztyp ein Ruby-Symbol sein.
Die Abbildung im Konfigurationsparameter Fiona7.custom_attribute_types
kann auch pro Vorlage definiert werden. Zum Beispiel:
Fiona7.custom_attribute_types = {
'MyPage' => {
child_order: :text
}
}
Vorlagenspezifische Attributtyp-Abbildungen sind nur im standalone
Modus möglich.
Sowohl der Attributname als auch der Ersatztyp müssen ein Ruby-Symbol sein; der Vorlagenname muss ein String sein.
In Situationen, in denen die statische Konfiguration nicht flexibel genug ist, kann die dynamische Variante verwendet werden. Als Wert von Fiona7.custom_attribute_types
wird dann ein Proc oder ein Lambda gesetzt, das zwei Parameter hat, den Vorlagennamen und den Attributnamen. Als Beispiel wird hier die Ersatzabbildung von child_order
auf Vorlagen eingeschränkt, deren Name auf Page
(oder page
) endet:
Fiona7.custom_attribute_types = lambda do |obj_class, attribute|
if obj_class =~ /Page$/i
if attribute == :child_order
:text
end
end
end
Im legacy
-Modus muss ein Attribut in allen Vorlagen, denen es zugewiesen wurde, denselben (alternativen) Typ haben.