Hier können REDAXO-Properties gesetzt werden die man zum Beispiel in Templates, Modulen und AddOns verwenden kann. Die Properties sind im Backend und Frontend verfügbar. Siehe auch https://redaxo.org/doku/master/eigenschaften#set-property.
Unter dem Menüpunkt System können die Properties verwaltet werden (siehe auch package.yml).
Oft werden in verschiedenen Templates/Modulen die gleichen Einstellungen wie z.B. bestimmte Artikel-Id's, Anzahl Datensätze usw. benötigt. Durch die Verwendung von Properties können diese Einstellungen (einfach und flexibel) zentral an einer Stelle gepflegt und dann in Templates/Modulen/AddOns verwendet werden.
Hinweis: Es können nur Properties angelegt werden die noch nicht existieren. So werden Kollisionen mit den Core-Properties vermieden.
Die Formatierung für die Properties ist angelehnt an die bekannten ini-Dateien und die language-Files von REDAXO-AddOns, und bewusst einfach gehalten. Die Properties werden in der AddOn-Konfiguration gespeichert und werden bei einem REDAXO-Export auch exportiert.
Zeilen-Format:
propertyName = propertyInhalt
oder
propertyName=propertyInhalt
- jede Property-Einstellung in einer Zeile
- Kommentare beginnen mit '#' am Zeilenanfang
- Inline-Kommentare mit '#' möglich (ein Leerzeichen vor und nach dem #!)
- automatisches Type-Casting
- JSON-Properties möglich
Hinweis: Bereits bestehende REDAXO-Properties oder Properties aus anderen Addons werden nicht überschrieben!
Hinweis: Properties können durch setzen eines frei wählbaren PREFIXes für die eigene Übersicht gruppiert werden. Zum Beispiel:
PREFIX = my.Alternativ kann auch die Section-Schreibweise (ini-Dateien) verwendet werden. Zum Beispiel:[my.]
Die definierten Properties werden automatisch in den entsprechenden Variablen-Typ gecasted.
Beispiele
property = Text -> (string) Text
property = 1 -> (integer) 1
property = 1.0 -> (float) 1
property = 1,234 -> (float) 1.234
property = .123 -> (float) 0.123
property = "asdf" -> (string) asdf
property = '"asdf"' -> (string) "asdf"
property = true -> (boolean) true
propery = FALSE -> (boolean) false
property = {"erstens": 1, "zweitens": 2} -> array(2) { ["erstens"]=> int(1) ["zweitens"]=> int(2) }
Hinweis: JSON-Properties müssen im gültigen JSON-Format notiert werden!
Mit gesetztem PREFIX ...
# Einstellungen für den News-Bereich Zugriff im Modul/Template
PREFIX = news.
listLimit = 10 # Anzahl Teaser-Einträge für die Startseite rex::getProperty('news.listLimit')
detailArticle = 123 # Artikel-ID für die News-Anzeige rex::getProperty('news.detailArticle')
# Diverse Artikel-ID's
PREFIX = id.
search = 123 # Artikel-ID für die Suche rex::getProperty('id.search')
basket = 456 # Artikel-ID für den Warenkorb rex::getProperty('id.basket')oder alternativ mit Sections statt Prefix ...
# Einstellungen für den News-Bereich Zugriff im Modul/Template
[news.]
listLimit = 10 # Anzahl Teaser-Einträge für die Startseite rex::getProperty('news.listLimit')
detailArticle = 123 # Artikel-ID für die News-Anzeige rex::getProperty('news.detailArticle')
# Diverse Artikel-ID's
[id.]
search = 123 # Artikel-ID für die Suche rex::getProperty('id.search')
basket = 456 # Artikel-ID für den Warenkorb rex::getProperty('id.basket')Verwendung der oben definierten Properties im Template oder Modul
// Zugriff auf Properties mit gesetztem PREFIX = news. / Section [news.]
$limit = rex::getProperty('news.listLimit');Alternativ zur PHP-Schreibweise kann auch folgende Schreibweise in Templates verwendet werden.
Hinweis: Funktioniert nicht bei Properties im JSON-Format!
REX_PROPERTY[news.listLimit]
REX_PROPERTY[key=news.listLimit]
Für ein Galerie-Modul müssen mindestens 3 Bilder ausgewählt werden.
Property-Einstellungen
# Backend-Properties
PREFIX = be.
minimumGalleryPics = 3
# Frontend-Properties
PREFIX = fe.
...Modul-Input
<?php
// Hinweis im Edit-Modus (am Modul-Anfang)
$_imagelist = explode(',', "REX_MEDIALIST[1]");
if (rex_request('save', 'string', '') == '1') {
if (count($_imagelist) < rex::getProperty('be.minimumGalleryPics')) {
echo rex_view::warning('Achtung! Keine oder zu wenige Bilder ausgewählt (mind. ' . rex::getProperty('be.minimumGalleryPics') . ')! Es erfolgt keine Ausgabe!');
}
}
?>
...Modul-Output
<?php
// Hinweis nur im Backend (am Modul-Anfang), im Frontend keine Ausgabe
$_imagelist = explode(',', "REX_MEDIALIST[1]");
if (count($_imagelist) < rex::getProperty('be.minimumGalleryPics')) {
if (rex::isBackend()) {
echo rex_view::warning('Achtung! Keine oder zu wenige Bilder ausgewählt (mind. ' . rex::getProperty('be.minimumGalleryPics') . ')! Es erfolgt keine Ausgabe!');
}
return;
}
?>
...- PREFIX= oder [Section] setzen!
- Properties im CamelCase notieren -> https://en.wikipedia.org/wiki/Camel_case
- Es sind auch mehrere PREFIXe/Sections zur Gruppierung von Properties möglich
- Durch den Eintrag load: early in der package.yml sind die Properties auch in (fast) allen AddOns verfügbar
Mit der Function getAllProperties() bekommt man ein Array mit allen Properties zurück geliefert.
<?php
var_dump(\FriendsOfRedaxo\ForProperties\ForProperties::getAllProperties());
?>Beispiel-Properties
[test.]
server = Server
serverName = ServerName
# Einstellungen für den News-Bereich Zugriff im Modul/Template
[news.]
listLimit = 10 # Anzahl Teaser-Einträge für die Startseite rex::getProperty('news.listLimit')
detailArticle = 123 # Artikel-ID für die News-Anzeige rex::getProperty('news.detailArticle')
# Diverse Artikel-ID's
[id.]
search = 1234 # Artikel-ID für die Suche rex::getProperty('id.search')
basket = 456 # Artikel-ID für den Warenkorb rex::getProperty('id.basket')
[test.]
1 = Text
2 = 1
3 = ,234
4 = 1,234
5 = 1.234
6 = "asdf"df
7 = '"asdf"'
8 = true
9 = FALSE
10 = {"erstens": 1, "zweitens": 2}Beispiel-Result von getAllProperties()
array(3) {
["test."]=>
array(12) {
["server"]=>
string(6) "Server"
["serverName"]=>
string(10) "ServerName"
[1]=>
string(4) "Text"
[2]=>
int(1)
[3]=>
float(0.234)
[4]=>
float(1.234)
[5]=>
float(1.234)
[6]=>
string(8) ""asdf"df"
[7]=>
string(6) ""asdf""
[8]=>
bool(true)
[9]=>
bool(false)
[10]=>
array(2) {
["erstens"]=>
int(1)
["zweitens"]=>
int(2)
}
}
["news."]=>
array(2) {
["listLimit"]=>
int(10)
["detailArticle"]=>
int(123)
}
["id."]=>
array(2) {
["search"]=>
int(1234)
["basket"]=>
int(456)
}
}