Zum Inhalt

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.