nach langer und intensiver Forschung präsentiere ich hiermit stolz eine verbesserte Action zum Erweitern der REX_VALUES. Im Vergleich zu den bereits bekannten Actions hier bietet meine Version folgende Verbesserungen:
* Es ist eine beliebige Anzahl von Variablen möglich. Diese Anzahl muss vorher nicht festgelegt werden!
* Es können beliebige Keys für die Inputs benutzt werden!
* Die Funktion macht wirklich nur so viele Schleifendurchläufe, wie es Einträge im Array gibt (foreach statt for). Damit wird (etwas) Rechenzeit gespart.
* Es funktioniert! Was bei der Version mit dem serialisierten Array leider nicht der Fall war :-( Liegt das evtl. daran, dass $rexname global ist?
AKTUALISIERT AM 30.06.2012:
- Fehler mit Notice wegen nicht vorhandenem Index im Array behoben.
- Hinweis hinzugefügt, wie die Action auch bei Redaxo 4.3.x beim Klick auf "Übernehmen" richtig funktioniert.
Der Vorschlag von Xong, serialize/unserialize bzw. json_encode/json_decode zu verwenden, hat bei mir leider weiterhin nicht funktioniert. Die Werte landen zwar serialisiert in der DB, werden aber beim Auslesen nicht korrekt deserialisiert :-P
UPDATE VOM 02.07.2012:
Weiter unten in diesem Thread findet ihr eine verbesserte Version, die mit serialize () funktioniert: http://www.redaxo.org/de/forum/module-a ... ml#p100169
Folgenden Code braucht ihr:
Eine PRESAVE-Action mit den Events ADD und EDIT:
(Für Redaxo 4.3.x muss derselbe Code auch bei PREVIEW eingetragen werden!)
Code: Alles auswählen
<?php
// Array rexname abholen:
$rexname = rex_request ("rexname", "array");
// Array mit Trennzeichen zu String verarbeiten:
$newname = "";
foreach ($rexname as $key => $value) {
if (strpos ($value, '###') === false && strpos ($value, '~~~') === false) {
null;
} else {
$value = str_replace (array ('###', '~~~'), '---', $value);
$REX_ACTION['SAVE'] = false;
$REX_ACTION['MSG'] = 'Die Eingabefelder dürfen die Zeichenketten "###" und "~~~" nicht enthalten!';
}
$newname .= $key . '###' . $value . '~~~';
}
// Das aufgereihte Array in einer REX_ACTION['VALUE'] speichern:
$REX_ACTION['VALUE'][20] = $newname;
?>
Code: Alles auswählen
<?php
// String in Paare aus Key und Value zerteilen:
$pairs = explode ('~~~', "REX_VALUE[20]");
// Key und Value trennen. Diese werden jeweils als Array in eine Hilfs-Variable gespeichert
// und dann sauber nach Key und Value in $rexname gepackt:
$rexname = array ();
foreach ($pairs as $pair) {
$helper = explode ('###', $pair);
if ($helper[0] != '') {
$rexname[$helper[0]] = $helper[1];
}
}
?>
Viele Grüße und Gute Nacht,
Frezl