Entitäten¶
Doctrine¶
Die Datenmodellelierung im Contentfly CMS erfolgt objektorientiert über sogenannte Entitäten. Eine Entität repräsentiert eine Datenbank-Tabelle und wird als PHP-Klasse angelegt. Die Verbindung von objektorientierter Entität und der relationalen Datenbank erfolgt über Doctrine ORM (Object Relational Mapping).
Konfiguation der Entitäten
Im Doctrine ORM gibt es verschiedene Möglichkeiten die Entitäten zu konfigurieren (z.B. Welche Eigenschaft/Property in der Entität soll auf welches Datenbank-Feld von welchem Typ gemappt werden?): XML, YAML oder PHP-Annotations.
Im Contentfly CMS werden nur PHP-Annotations unterstützt. Doctrine-basierte Annotationen müssen dabei mit @ORM\ angesprochen werden:
@ORM\Table(name="testtabelle")
Weiterführende Informationen zu Doctrine ORM:
Standard-Entitäten¶
Das Contentfly CMS bringt bereits einige vordefinierte Entitäten mit, die beispielsweise für die Benutzerverwaltung zuständig sind. Die Standard-Entitäten finden Sie im Ordner appcms/areanet/PIM/Entity
- User Benutzer, kann durch PHP-Traits erweitert werden
- Group Benutzergruppe, kann durch PHP-Traits erweitert werden
- Permission Berechtigungen einer Gruppe
- Token Aktive Tokens von eingeloggten Benutzern oder statischen API-Tokens
- PushToken Token von iOS- und Android-Geräten für Push-Notifications
- File Dateien, kann durch PHP-Traits erweitert werden
- Folder Dateiordner, kann durch PHP-Traits erweitert werden
- Nav Benutzerdefinierter Navigationsbereich im Contentfly CMS UI
- NavItem Benutzerdefinierter Navigationseintrag unterhalt eines Navigationsbereiches im Contentfly CMS UI
- ThumbnailSetting Bildgrößen, die automatisch im Dateisystem für jede Bilddatei angelegt werden
Anpassung Standard-Entitäten
Die Standard-Entitäten User, Group, File und Folder_ können durch PHP-Traits erweitert werden, siehe Anpassung Standard-Entitäten
Benutzerdefinierte Entitäten¶
Benutzerdefinierte Enitäten müssen im Ordner custom/Entity gespeichert werden und von der Klasse Areanet\PIM\Entity\Base, Areanet\PIM\Entity\BaseTree oder Areanet\PIM\Entity\BaseSortable erben. Für jede Eigenschaft/Property müssen in der Entität entsprechende Getter- und Setter-Methoden vorhanden sein.
Arten von Entitäten¶
Einfache Entität¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <?php namespace Custom\Entity; use Areanet\PIM\Entity\Base; use Areanet\PIM\Classes\Annotations as PIM; use Custom\Classes\Annotations as CUSTOM; use Areanet\PIM\Entity\BaseSortable; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="test") * @PIM\Config(label="Test") */ class Test extends Base { /** * @ORM\Column(type="string", unique=false) * @PIM\Config(showInList=40, label="Titel") */ protected $titel; /** * @return mixed */ public function getTitel() { return $this->titel; } /** * @param mixed $titel */ public function setTitel($titel) { $this->titel = $titel; } } |
Sortierbare Entität¶
Sortierbare Entitäten erhalten ein zusätzliches (verstecktes) Sortierfeld und können im Contentfly CMS UI per Drag'n Drop sortiert werden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php namespace Custom\Entity; use Areanet\PIM\Entity\BaseSortable; use Areanet\PIM\Classes\Annotations as PIM; use Custom\Classes\Annotations as CUSTOM; use Areanet\PIM\Entity\BaseSortable; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="test_sortable") * @PIM\Config(label="Test sortierbar") */ class Test extends BaseSortable { /... } |
Entität mit Baumstruktur¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php namespace Custom\Entity; use Areanet\PIM\Entity\BaseTree; use Areanet\PIM\Classes\Annotations as PIM; use Custom\Classes\Annotations as CUSTOM; use Areanet\PIM\Entity\BaseSortable; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="test_tree") * @PIM\Config(label="Baumtest") */ class Test extends BaseTree { /... } |
Annotations¶
Klassen-Annotationen¶
Die Klassen-Annotationen gelten für die gesamte Entität. Auf Doctrine-Ebene muss hier zwingend die Annotation @ORM\Entity gesetzt und zusätzlich der entsprechende Tabellennamm in der Datenbank definiert werden. Im Folgenden sind die zusätzlichen Konfigurationsmöglichkeiten des Contentfly CMS @PIM\Config aufgeführt:
1 2 3 4 5 6 7 8 9 10 | <?php ... /** * @ORM\Entity * @ORM\Table(name="TABLE_NAME") * @PIM\Config(label="LABEL", sortBy="SORT_PROPERTY_NAME", sortOrder="ASC/DESC", sortRestrictTo="PROPERTY_NAME", labelProperty="PROPERTY_NAME", hide=false, readonly=false) */ class Test extends Base { ... |
Optionen für @PIM\Config:
Eigenschaft | Typ | Standard | Beschreibung |
---|---|---|---|
label | String | Name der Entität im Contentfly CMS UI | |
sortBy | String | id | Eigenschaft, nach er in den Listen im Standard sortiert werden soll |
sortOrder | String | ASC | ASC / DESC |
sortRestrictTo | String | Begrenzt die Sortierung bei BaseSortable-Entities auf die eingetragene Eigenschaft (z.B. "Eigenschaften" sollen nur sortiert werden können, wenn im Filter eine "Kategorie" ausgewählt wurde) | |
labelProperty | String | Feld, das in den Contentfly CMS UI Formularen anstatt "Objekt ID bearbeiten" angezeigt werden soll | |
hide | Boolean | false | Entität wird nicht in der Contentfly CMS UI Navigation aufgelistet |
readonly | Boolean | false | Entität kann im Contentfly CMS UI nicht bearbeitet werden |
tabs | JSON-String | Optional können die Eigenschaften in den Bearbeitungs-Formularen des Contentfly CMS UI auf mehrere Tabs aufgeteilt werden: {'tabKey1' : 'Tab Title 1', 'tabKey2' : 'Tab Title 2'} ```` | |
viewMode | Integer | o | 0 = In der Listenansicht wird ein Löschen- und Bearbeiten-Button dargestellt. / 1 = In der Liste wird der Löschen-Button nicht dargestellt, dafür ein Anzeige-Button, mit dem das Objekt lesend geöffnet/angezeigt werden kann. Der Löschen-Button wird dafür im Bearbeitungsformular links unten angezeigt. |
Eigenschaften-Annotationen¶
Anhand den Standard-Doctrine-Annotationen ermitteld das Contentfly CMS automatisch das passende Formularfeld und Darstellung im Contentfly CMS UI.
- Typ string = Einzeiliges Textfeld
- Typ text = Mehrzeiliges Textfeld
- Typ boolean = Checkbox
- ...
Dieses Standard-Verhalten kann aber durch spezielle Annotationen des Contentfly CMS (@PIM) ergänzt und/oder angepasst werden.
Allgemein¶
1 2 3 4 5 6 | <?php /** * @ORM\Column(type="string") * @PIM\Config(showInList=40, label="Titel") */ protected $titel; |
Optionen für @PIM\Config:
Eigenschaft | Typ | Standard | Beschreibung |
---|---|---|---|
label | String | Name der Eigenschaft im Contentfly CMS UI | |
showInList | Integer | Zeigt den Inhalt dieser Eigenschaft in der Auflistung der Entität an der an eingegebenen Position an. Im obigen Beispiel wird die Eigenschaft titel in der Liste in der Spalte 40 angezeigt. | |
hide | Boolean | false | Das Formularfeld ist im Contentfly CMS UI Formular versteckt |
readonly | Boolean | false | Das Formularfeld kann im Contentfly CMS UI Formular nur gelesen werden |
tab | String | Schlüssel des Tabs, in dem die Eigenschaft optional im Contentfly CMS UI angezeigt werden soll. Dieser Schlüssel/Key muss in der Klassen-Annotation @PIM\Config in der Option tabs entsprechend konfiguriert sein. | |
isFilterable | Boolean | false | Die Einträge aus dieser Eigenschaft werden als Filter angezeigt |
isDatalist | Boolean | false | Rendert eine Filterliste einer Eigenschaft mit isFilterable=true als Auto-Suggest-Feld dar |
encoded | Boolean | false | Automatische Verschlüsselung der Inhalte in der Datenbank |
Hinweis für isFilterable
- Bei join/multijoin/virtualjoin-Eigenschaften werden die entsprechenden Einträge aus verknüpften Entität geladen
- Bei normalen Eigenschaften (z.B. vom Typ String) werden alle eindeutigen, gespeicherten Werte aufgelistet
- Select- und Boolean-Felder werden automatisch in den Filtern angezeigt
Hinweis für isDatalist
Die Option isDatalist ist nur für join/multijoin-Eigenschaften vefügbar
Hinweis für encoded
- nur für normale Text-Eigenschaften (Type String und Text) verfügbar
- Konfigurationsvariable SECURITY_CIPHER_KEY muss gesetzt sein.
Pflichtfeld¶
Das Contentfly CMS UI erkennt automatisch, ob eine Eigenschaft einen NULL-Wert enthalten darf und stellt das gerenderte Formularfeld entsprechend als Pflichtfeld oder optionales Feld dar. Ob eine Eigenschaft einen NULL-Wert enthalten darf wird über die Doctrine-Annotation @ORM\Column konfiguriert
1 2 3 4 5 6 7 8 9 10 11 12 | <?php /** * @ORM\Column(type="string", nullable=true) * @PIM\Config(showInList=40, label="Kein Pflichtfeld") */ protected $keinPflichtfeld; /** * @ORM\Column(type="string", nullable=false) * @PIM\Config(showInList=50, label="Pflichtfeld") */ protected $pflichtfeld; |
Hinweis
Ohne Angabe der Option nullable sind alle Eigenschaften standardmäßig Pflichtfelder!
Feldtypen¶
Das Contentfly CMS ermittelt aus den angegebenen Annotations automatisch den entsprechenden Feldtyp, also auch wie das Feld im Contentfly CMS UI im Formular ausgegeben wird.