Datentypen
Teil 3, Kapitel 16. Ein Datentyp definiert eine Art von Feld, die Redakteure einer Inhaltsklasse hinzufügen
können: sein Bearbeitungsformular, seine Validierung, wie er gespeichert, angezeigt, durchsucht und sortiert wird. Der
Kernel bringt Dutzende mit (ezstring, ezimage, ezxmltext ...); Erweiterungen fügen weitere hinzu (eztags,
birthday, ngclasslist). Dieses Kapitel erklärt den Vertrag anhand eines kleinen Bewertungs-Datentyps, der mit
php -l geprüft und bei geladenem Kernel ausprobiert wurde; das nächste Kapitel behandelt Speicherung, Validierung und
Templates im Detail.
Brauchen Sie einen?
Schreiben Sie einen Datentyp, wenn Redakteure eine Art von Wert eingeben müssen, die kein vorhandener Datentyp abdeckt, und der Wert zum Inhalt gehört (versioniert, übersetzt, durchsuchbar). Bevor Sie einen schreiben, prüfen Sie die Liste der verfügbaren Datentypen, wenn Sie einer Klasse ein Attribut hinzufügen, und den Katalog. Eine Auswahl, eine Zahl mit Grenzen, eine Beziehung zu anderen Inhalten: All das gibt es bereits.
Wie der Kernel ihn findet
In extension/mysite_hello/settings/content.ini.append.php:
/* #?ini charset="utf-8"?
[DataTypeSettings]
ExtensionDirectories[]=mysite_hello
AvailableDataTypes[]=mysiterating
*/ ExtensionDirectories[]sorgt dafür, dass der Kernel inextension/mysite_hello/datatypes/sucht.AvailableDataTypes[]bietet den Datentyp im Klasseneditor an.- Die Datei muss
datatypes/mysiterating/mysiteratingtype.phpheißen:eZDataType::loadAndRegisterType()(kernel/classes/ezdatatype.php) bindet<directory>/<type>/<type>type.phpein. - Templates liegen in Ihrem Design, daher braucht die Erweiterung außerdem
DesignExtensions[]indesign.ini.append.php.
Die echte Erweiterung birthday macht genau das (ihre settings/content.ini.append nennt
ExtensionDirectories[]=birthday und AvailableDataTypes[]=ezbirthday).
Die Klasse
/**
* A rating from 1 to 5, stored in data_int of the object attribute.
*/
class mysiteRatingType extends eZDataType
{
const DATA_TYPE_STRING = 'mysiterating';
public function __construct()
{
parent::__construct( self::DATA_TYPE_STRING,
ezpI18n::tr( 'extension/mysite_hello', 'Rating (1 to 5)', 'Datatype name' ),
array( 'serialize_supported' => true ) );
}
// validateObjectAttributeHTTPInput(), fetchObjectAttributeHTTPInput(), objectAttributeContent() ...
// the complete class is in the next chapter
}
eZDataType::register( mysiteRatingType::DATA_TYPE_STRING, 'mysiteRatingType' );| Teil | Bedeutung |
|---|---|
DATA_TYPE_STRING | der Bezeichner, der für jedes Attribut dieses Typs in der Datenbank gespeichert wird; ändern Sie ihn nie, sobald er verwendet wird |
parent::__construct( $dataTypeString, $name, $properties ) | registriert den Bezeichner, den im Klasseneditor angezeigten Namen (übersetzt) und Eigenschaften |
'serialize_supported' => true | der Typ kann in Paketen exportiert werden |
eZDataType::register() am Ende der Datei | sagt dem Kernel, welche Klasse den String implementiert |
Bei geladenem Kernel gab eZDataType::create( 'mysiterating' ) ein Objekt der Klasse mit dem Namen
"Rating (1 to 5)" zurück.
Der Lebenszyklus
| Wann | Methoden, die der Kernel aufruft |
|---|---|
| Ein Redakteur fügt das Attribut einer Klasse hinzu | initializeClassAttribute(), fetchClassAttributeHTTPInput(), validateClassAttributeHTTPInput(), storeClassAttribute() |
| Ein Redakteur legt Inhalte an oder bearbeitet sie | initializeObjectAttribute(), validateObjectAttributeHTTPInput(), fetchObjectAttributeHTTPInput(), storeObjectAttribute() |
| Der Inhalt wird veröffentlicht | onPublish() |
| Ein Template zeigt ihn an | objectAttributeContent() (das .content in Templates), hasObjectAttributeContent() (.has_content) |
| Suche, Sortierung, Namen | metaData(), isIndexable(), sortKey(), sortKeyType(), title() |
| Import und Export | toString(), fromString(), serializeContentObjectAttribute(), unserializeContentObjectAttribute() |
| Entfernen | deleteStoredObjectAttribute(), deleteStoredClassAttribute() |
Jede Methode hat in eZDataType eine Vorgabe; überschreiben Sie nur, was Ihr Typ braucht. Die vollständige Liste mit
Signaturen steht in
Die API von eZDataType.
Von echten Datentypen lernen
| Datentyp | Zeigt |
|---|---|
extension/birthday (ezbirthday) | ein Datum, gespeichert in data_text, drei Bearbeitungsfelder, Validierung, Informationssammlung |
kernel/classes/datatypes/ezinteger/ | den einfachsten Zahlentyp im Kernel |
extension/ngclasslist | eine Liste, gespeichert als Text |
extension/eztags | einen Datentyp mit eigenen Tabellen und Modulen |
RAD
Datatype extension (/setup/datatype) schreibt die Klasse, die Einstellungen und die vier Templates; siehe
Mit RAD: ein Datentyp.
Die von Hand geschriebene Fassung ist
Von Hand: ein Datentyp.
Verwandte Seiten
- Zurück: Template-Funktionen
- Weiter: Datentypen: Speicherung, Validierung und Templates
- Härtung der Eingaben von Datentypen (Spezifikation)
- eZpedia: Datatype
- Freie Dokumentation: Diese Seite darf unter der GNU FDL 1.3 frei kopiert, übersetzt und verbessert werden.
Werden Sie Exponential-Partner
Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.