Skip to content

Commit

Permalink
Type-Casting
Browse files Browse the repository at this point in the history
Die Properties werden jetzt in den entsprechenden Typ gecasted. JSon für Properties möglich
  • Loading branch information
aeberhard committed Aug 2, 2018
1 parent b476bba commit f0ab98b
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 4 deletions.
34 changes: 31 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@ oder

* jede Property-Einstellung in einer Zeile
* Kommentare beginnen mit '#' am Zeilenanfang
* Inline-Kommentare mit '#' möglich
* Inline-Kommentare mit '#' möglich (ein Leerzeichen vor und nach dem #!)
* automatisches Type-Casting
* JSON-Properties möglich

> **Hinweis:**
Bereits bestehende REDAXO-Properties werden nicht überschrieben!
Expand All @@ -32,17 +34,41 @@ Zum Beispiel: `[my_]`

Die Properties werden hier **immer ohne** den Prefix/Section notiert z.B. `HalloText = Servus Welt!` und nur der Zugriff über `rex::getProperty` muss bei gesetztem `PREFIX = my_` oder bei gesetzer Section `[my_]` **mit** dem Prefix erfolgen, also `rex::getProperty('my_HalloText');`.

### Type-Casting

Hier definierte Properties werden automatisch in den entsprechenden Variablen-Typ gecasted.

**Beispiele**

```ini
property = Text -> (string) Text
property = 1 -> (integer) 1
property = 1.0 -> (float) 1
property = 1,2 -> (float) 1.2
property = 1.2-> (float) 1.2
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!

### Verwendung im Template / Modul

```php
// Zugriff auf Properties ohne gesetztem PREFIX
// Zugriff auf Properties ohne gesetztem PREFIX/Section
$value = rex::getProperty('HalloText');

// Zugriff auf Properties mit gesetztem PREFIX = my_
// Zugriff auf Properties mit gesetztem PREFIX = my_ / Section [my_]
$value = rex::getProperty('my_HalloText');
```

Alternativ zur PHP-Schreibweise kann auch folgende Schreibweise in Templates und Modulen verwendet werden.
> **Hinweis:**
Funktioniert nicht bei Properties im JSON-Format!

```
REX_PROPERTY[key=HalloText]
Expand All @@ -51,6 +77,8 @@ REX_PROPERTY[key=my_HalloText]

## Beispiel für Property-Einstellungen

Mit gesetztem Prefix ...

```ini
# Einstellungen für den News-Bereich
PREFIX = news_
Expand Down
46 changes: 45 additions & 1 deletion boot.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,49 @@
<?php

// Cast string to type
function propertiesCastToType($value)
{
$value = trim($value);
$rc = (string) $value;
$casted = false;

// bool
if (strtolower($value) == 'true' or strtolower($value) == 'false') {
$rc = strtolower($value) == 'true' ? (bool) true : (bool) false;
$casted = true;
}

// integer
if (!$casted && preg_match("/^\d+$/", $value)) {
$rc = (int) $value;
$casted = true;
}

// float
if (!$casted && preg_match("/^\d+(\.\d{1,2})?/", $value)) {
$rc = (float) $value;
$casted = true;
}

// string
if (!$casted && $value[0] == '"' && $value[strlen($value)-1] == '"') {
$rc = (string) substr($value, 1, -1);
$casted = true;
}
if (!$casted && $value[0] == "'" && $value[strlen($value)-1] == "'") {
$rc = (string) substr($value, 1, -1);
$casted = true;
}

// json
if (!$casted && $value[0] == '{' && $value[strlen($value)-1] == '}') {
$rc = json_decode($value, true);
$casted = true;
}

return $rc;
}

// REDAXO-Properties setzen

$_settings_array = explode("\n", str_replace("\r", '', $this->getConfig('properties_settings')));
Expand All @@ -25,7 +69,7 @@

if (count($_set) === 2) {
if (!rex::hasProperty($_prefix . trim($_set[0]))) {
rex::setProperty($_prefix . trim($_set[0]), trim($_set[1]));
rex::setProperty($_prefix . trim($_set[0]), propertiesCastToType($_set[1]));
}
}
}
Expand Down

0 comments on commit f0ab98b

Please sign in to comment.