[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Verbesserte Action zum Erweitern von REX_VALUES - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Frezl
Beiträge: 160
Registriert: 13. Aug 2009, 14:31

Verbesserte Action zum Erweitern von REX_VALUES

22. Mai 2010, 01:47

Hallo allerseits,

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;
    
?>
Diese Action wird dem Modul zugewiesen, in dem mehr als 20 Variablen gebraucht werden. Außerdem muss an den Anfang der EINGABE und der AUSGABE des Moduls folgender Code:

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];
        }
    }

?>
Ich würde mich freuen, wenn ihr mir euer Feedback zu dieser Action abgeben würdet. Und ich bedanke mich bei den Autoren der beiden anderen Lösungen, an denen ich lernen konnte, wie die REX_ACTION-Variable verarbeitet wird.

Viele Grüße und Gute Nacht,
Frezl
Zuletzt geändert von Frezl am 2. Jul 2012, 22:32, insgesamt 5-mal geändert.

Frezl
Beiträge: 160
Registriert: 13. Aug 2009, 14:31

22. Mai 2010, 01:50

Hier kommt noch ein Modul, mit dem ihr die Action testen könnt:


Eingabe:

Code: Alles auswählen

<?php

  // String in Paare aus Key und Value zerteilen:
  $pairs = split('~~~', "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 = split('###', $pair);
    $rexname[$helper[0]] = $helper[1];
  }

  // Letztes Element abtrennen, da dieses leer ist:
  array_pop($rexname);

?>

<?php

  echo 'a = <input type="text" name="rexname[a]" value="'.$rexname['a'].'" /><br />';
  echo 'g = <input type="text" name="rexname[g]" value="'.$rexname['g'].'" /><br />';
  echo 'p = <input type="text" name="rexname[p]" value="'.$rexname['p'].'" />';

?>


Ausgabe:

Code: Alles auswählen

<?php

  // String in Paare aus Key und Value zerteilen:
  $pairs = split('~~~', "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 = split('###', $pair);
    $rexname[$helper[0]] = $helper[1];
  }

  // Letztes Element abtrennen, da dieses leer ist:
  array_pop($rexname);

?>

<?php

  foreach ($rexname as $key => $value) {
    // um zu beweisen, dass das Array keine leeren (= überflüssigen) Stellen enthält:
    if ($value != '') {
      // Wenn die Stelle des Arrays einen Wert enthält...
      echo $key.' > '.$value.'<br />';
    } else {
      // ... andernfalls
      echo $key.' - <br />';
    }
  }

?>
Grüße,
Frezl

Benutzeravatar
Koala
Beiträge: 1612
Registriert: 3. Okt 2005, 13:20

22. Mai 2010, 11:07

Kannst du bitte noch mit reinschreiben, mit welcher Redaxoversion du das getestet hast?
<?php print $Footer; ?>

Sven

Ich würde ja die Welt verändern,
doch der Quellcode ist mir zu absurd!


REX 5 :: Tricks und Tipps
REX 5 :: Modulesammlung

Wiki zu Redaxo 3 und 4 (!nur noch im Webarchiv!)

Benutzeravatar
Xong
Beiträge: 2081
Registriert: 5. Jun 2008, 08:30
Wohnort: Halle (Saale)

22. Mai 2010, 13:14

Ich habe da noch einen Feature-Request! =)

Wenn es schon verbessert sein soll, könntest du gleich als Serialisierungsfunktion json_encode verwenden. Dann würde das leidige split (das eh durch explode ersetzt werden sollte) endlich wegfallen.
Außerdem könnte man so wirklich alle beliebigen Zeichen und Zeichenketten verwenden.

Wäre super, wenn du das einbauen könntest.
LG,
Xong

[ externes Bild ] Määääääääääääääääääääääääh!

Frezl
Beiträge: 160
Registriert: 13. Aug 2009, 14:31

24. Mai 2010, 23:48

Getestet hab ichs mit 4.2.1

Mit dem normalen serialize() und unserialize() hab ichs versucht, leider ohne Erfolg. Von JSON hab ich keine Ahnung. Nach meiner kurzen Recherche handelt sichs dabei um ein Ding mit AJAX. Von AJAX hab ich aber so gut wie keine Ahnung, deshalb lass ich mal die Finger davon. Vielleicht willst du das ja einarbeiten?

Was ist das Problem an split()? Die Performance? Habs so aus den Beispielen im Wiki übernommen. Kann ich aber auch ändern, wenns dafür nen sinnvollen Grund gibt.

Viele Grüße,
Frezl

EDIT: Ehrlich gesagt war mein Plan, das ganze auch mehrdimensional zu machen. Und dem bin ich keinen Schritt näher gekommen. Kein Plan, warum serialize() nicht funktionieren will :-P

Frezl
Beiträge: 160
Registriert: 13. Aug 2009, 14:31

Frage an Entwickler: Warum funktioniert unserialize() nicht?

28. Mai 2010, 18:13

Warum funktioniert unserialize() in Redaxo nicht? Könnte sich ein Entwickler dazu bitte mal äußern?

Ich speichere ein Array serialisiert in REX_VALUE[20].
Diesen REX_VALUE hole ich in der Ausgabe wieder ab. Bis dahin funktioniert alles. Hab jeden Schritt debuggt und an der Stelle ist der serialisierte String exakt identisch mit dem, den ich gespeichert habe.
Wenn ich ihn jetzt aber mit unserialize() wieder in ein Array verwandeln will, bekomme ich von unserialize() den Rückgabewert false.

Kopiere ich den String jedoch in ein Script außerhalb von Redaxo, lässt er sich dort völlig problemlos umwandeln.

Wo ist also der Fehler?

Gruß und Dank,
Frezl

Benutzeravatar
Xong
Beiträge: 2081
Registriert: 5. Jun 2008, 08:30
Wohnort: Halle (Saale)

28. Mai 2010, 18:22

Ich vermute mal, dass du dir den String mit REX_VALUE[20] holst.
Darin sind aber alle HTML-spezifischen Zeichen maskiert.

Versuch´s mal mit REX_HTML_VALUE[20].
LG,
Xong

[ externes Bild ] Määääääääääääääääääääääääh!

Frezl
Beiträge: 160
Registriert: 13. Aug 2009, 14:31

28. Mai 2010, 18:50

nix, keine Chance. So langsam blick ichs nicht mal mehr, wann ich REX_HTML_VALUE verwenden muss und wann wo welches $REX_ACTION[trallala]. Das ist alles völlig wirr und nirgends wird erklärt, wie mans verwenden muss :-P

Oh mann, nächstes mal Typo3. Das ist zwar scheiße, aber wenigstens gut dokumentiert :-/

Was ich überhaupt nicht versteh: Wenn ich den serialisierten String, so wie ihn REDAXO ausspuckt, mit copy&paste in ein anderes Script einfüge, lässt er sich sauber entserialisieren. Kein Problem mit irgendwelchen Maskierungen. Warum klappt das also in REDAXO nicht???

Benutzeravatar
Xong
Beiträge: 2081
Registriert: 5. Jun 2008, 08:30
Wohnort: Halle (Saale)

28. Mai 2010, 19:06

Mach doch einfach mal einen Test, in dem du einmal htmlspecialchars('REX_VALUE[20]') und einmal htmlspecialchars(REX_HTML_VALUE[20]) ausgibst.

Und musstest du den serialisierten String nicht vorher mit addslashes() behandeln? Dann musst du auch mit stripslashes() wieder demaskieren.
LG,
Xong

[ externes Bild ] Määääääääääääääääääääääääh!

Frezl
Beiträge: 160
Registriert: 13. Aug 2009, 14:31

28. Mai 2010, 19:56

Hier mal mein Code:

Die Action "rexname_serialisiert" (Presave mit ADD und EDIT)

Code: Alles auswählen

<?php

	// Array rexname abholen:
	$rexname = rex_request("rexname", "array");

  // DEBUG:
  echo "Presave-Action: rexname:<pre>";
  print_r($rexname);
  echo "</pre><hr />";
	
	// Array serialisieren:
	$newname = serialize($rexname);

  // DEBUG:
  echo "Presave-Action: serialize:(rexname)<pre>";
  print_r($newname);
  echo "</pre><hr />";

	// Das serialisierte Array in einer REX_ACTION['VALUE'] speichern:
	$REX_ACTION['VALUE'][20] = $newname;

  // DEBUG:
  echo "Presave-Action: REX_ACTION['VALUE'][20]:<pre>";
  print_r($REX_ACTION['VALUE'][20]);
  echo '</pre><span style="color:red">DIESER STRING HIER IST *EXAKT* DER GLEICHE ...</span><hr />';
	
?>
Das Modul, dem diese Action zugewiesen wird:
Eingabe:

Code: Alles auswählen

<?php

  // DEBUG:
  error_reporting(E_ALL);

  echo "Modul-Eingabe: R_V[20]:<pre>";
  print_r("REX_VALUE[20]");
  echo '</pre><span style="color:red">... WIE DIESER STRING HIER!</span><br /><span style="color:green">[1]</span><hr />';


  // REX_VALUE[20] entserialisieren
  $rexname = unserialize('REX_VALUE[20]');


  // DEBUG:
  echo "Modul-Eingabe: unserialize(R_V[20]):<pre>";
  print_r($rexname);
  echo '</pre><span style="color:red">TROTZDEM KOMMT HIER ALS ERGEBNIS false RAUS!</span><br /><span style="color:green">Wenn ich den String[1] oben aber kopiere, und in einem Test-Script entserialisieren lasse, funktioniert das OHNE Probleme.</span><hr />';

?>

<input type="text" <?php echo $rexname['kurzinfo'] ?> name="rexname[kurzinfo]" /> Kurzbeschreibung |
<input type="text" <?php echo $rexname['img'] ?> name="rexname[img]" /> Bild |
<input type="text" <?php echo $rexname['preis'] ?> name="rexname[preis]" /> Preise |
<input type="text" <?php echo $rexname['artikel'] ?> name="rexname[artikel]" /> Link
Ausgabe:

Code: Alles auswählen

<?php

  // DEBUG:
  error_reporting(E_ALL);

  echo "Modul-Ausgabe: R_V[20]:<pre>";
  print_r("REX_VALUE[20]");
  echo "</pre><hr />";

  // REX_VALUE[20] entserialisieren
  $rexname = unserialize('REX_VALUE[20]');


  // DEBUG:
  echo "Modul-Ausgabe: unserialize(R_V[20]):<pre>";
  print_r($rexname);
  echo "</pre><hr />";

?>

Ausgabe: <br /><br />

<?php

  echo $rexname['kurzinfo']."<br />";
  echo $rexname['img']."<br />";
  echo $rexname['preis']."<br />";
  echo $rexname['artikel'];

?>
Probier das bitte mal aus. Ich hab an der entsprechenden Stelle einen Hinweistext eingefügt.

Ich frage mich v.a., wo dieser Offset herkommen soll, der bei error_reporting(E_ALL) ausgespuckt wird.

Wenn ich das ganze in einer anderen Datei teste, funktioniert das deserialisieren ohne Probleme.

Testdatei:

Code: Alles auswählen

<?php

	error_reporting(E_ALL);

	print_r(unserialize('a:4:{s:8:"kurzinfo";s:1:"a";s:3:"img";s:1:"b";s:5:"preis";s:1:"c";s:7:"artikel";s:1:"d";}'));

?>
Gruß und Dank,
Frezl

Frezl
Beiträge: 160
Registriert: 13. Aug 2009, 14:31

28. Mai 2010, 20:05

YEAH YEAH YEAH!!!

Ich hab die kleine Arschkrampe entdeckt!!! Dein Vorschlag addslashes hat nicht funktioniert, aber mit urlencode funktionierts endlich :-) Geilo!

Und außerdem waren die Values in den Input-Feldern völlig verkorkst, deshalb waren die nach dem Absenden immer wieder leer. Das hatte aber mit dem eigentlichen Problem nichts zu tun.

Danke für deine Hilfe!

Grüße,
Frezl

Benutzeravatar
Satyr
Beiträge: 58
Registriert: 4. Jul 2010, 17:02
Wohnort: Wiesbaden
Kontaktdaten: Website

8. Nov 2010, 16:29

Hallo,
ich möchte diese Lösung in einem Modul (Redaxo 4.3.1) einsetzen.
Mit Eingabefelder: wie im beispiel funktioniert alles gut.
Allerdings mit einer Auswahl-List (Redaxo Klasse Rex_Select)e klappt es überhaupt nicht.
Hier mein Code:
$ds = rex_sql::factory();
$ds->setQuery("SELECT id, name FROM rex_p_hersteller");
$ms = new rex_select;
$ms->setName("rexname[hersteller]");
$ms->setSize(1);
for($i=0;$i<$ds->getRows();$i++) {
$res = $ds->getRow();
$ms->addOption($res['name'], $res['id']);
}
$ds->flush();
$ms->setSelected($rexname['hersteller']);
echo $ms->show();
Hat jemand eine Idee, was ich ändern soll?
Gruß
Adam

Benutzeravatar
Satyr
Beiträge: 58
Registriert: 4. Jul 2010, 17:02
Wohnort: Wiesbaden
Kontaktdaten: Website

8. Nov 2010, 23:03

Hallo,
jetzt habe ich die Ursache gefunden:
Ich habe beim testen immer auf "Übernehmen" und nicht auf "Speichern" geklickt.
Anscheinend funktioniert diese Aktion nur in Verbindung mit "Speichern".
Bei Klick auf "Übernehmen" bekomme ich alle Auswahllisten als "nicht selektiert".

Weiss jemand warum?

Gruß
Adam

Benutzeravatar
Satyr
Beiträge: 58
Registriert: 4. Jul 2010, 17:02
Wohnort: Wiesbaden
Kontaktdaten: Website

Block Speichern und Block Übernehmen

10. Nov 2010, 15:31

Hallo,
ich weiss es nicht ob es ein Redaxo 4.3.1 Bug oder ein anderer Grund hat.
Speichere ich die Modul-Eingaben mit dem Button "Block Speichern" funktioniert alles wie gewünscht.
Nach Speichern über den Button "Block Übernehmen" sind alle Eingabefelder wieder leer.
In der Datenbank werden allerdings alle Änderungen gespeichert im Feld "value20".
Darauf basiert mein Workaround: ich hole mir die Daten direkt aus der Datenbank.
Code:
<?php
// testen ob "REX_VALUE[20]" daten beinhaltet oder leer ist.
if("REX_VALUE[20]" == '') {
// kommt beim klick auf "Block Übernehmen" vor.
$vs = rex_sql::factory();
$vs->setQuery('select value20 from '.$REX['TABLE_PREFIX'].'article_slice where id=REX_SLICE_ID');
if ($vs->getRows()>0)
$vsr= $vs->getRow();
$pairs = split('~~~', $vsr['value20']);
} else {
// Normalfall bei klick auf "Block Speichern"
$pairs = split('~~~', "REX_VALUE[20]");
}
$rexname = array();
foreach ($pairs as $pair) {
$helper = split('###', $pair);
$rexname[$helper[0]] = $helper[1];
}
array_pop($rexname);
?>
End Code

Kann mir jemand erklären wie funktioniert die Aktion mit serialize; an welche Stelle soll die urlencode kommen?

Grüße

Benutzeravatar
Satyr
Beiträge: 58
Registriert: 4. Jul 2010, 17:02
Wohnort: Wiesbaden
Kontaktdaten: Website

Jetzt eine Lösung für R 4.31 und UTF-8

11. Nov 2010, 17:43

Hallo,
dieses Thema beschäftigt mich schon seit ein Paar Tagen, jetzt denke ich die Lösung gefunden zu haben.
Sehr viel haben dazu Frezl und Xong mit ihren früheren Beispielen und Lösungsvorschlägen beigetragen
Ich habe diese Lösung unter Redaxo 4.3.1 mit UTF-8 codierung ausgearbeitet und getestet.
Hier die verbesserte Aktion und ein Modul zum testen:
1. Aktion (presave Add und Edit)
Code:

<?php
// Array rexname abholen:
$rexname = rex_request("rexname", "array");
$newname = serialize($rexname);
$REX_ACTION['VALUE'][20] = $newname;
?>

2. Modul Eingabe
Code:
<?php
$vs = rex_sql::factory();
$vs->setQuery('select value20 from '.$REX['TABLE_PREFIX'].'article_slice where id=REX_SLICE_ID');
if ($vs->getRows()>0)
$vsr= $vs->getRow();
$rexname = unserialize($vsr['value20']);
?>
Kurzbeschreibung <br />
<input type="text" value="<?php echo $rexname['kurzinfo'] ?>" name="rexname[kurzinfo]" />
<br />
Bild <br />
<input type="text" value="<?php echo $rexname['img'] ?>" name="rexname[img]" />
<br />
Preise <br />
<input type="text" value="<?php echo $rexname['preis'] ?>" name="rexname[preis]" />
<br />
Artikel <br />
<input type="text" value=" <?php echo $rexname['artikel'] ?>" name="rexname[artikel]" />

3. Modul Ausgabe
Code:
<?php
$vs = rex_sql::factory();
$vs->setQuery('select value20 from '.$REX['TABLE_PREFIX'].'article_slice where id=REX_SLICE_ID');
if ($vs->getRows()>0)
$vsr= $vs->getRow();
$rexname=unserialize($vsr['value20']);
?>
Ausgabe: <br /><br />
<?php
echo $rexname['kurzinfo']."<br />";
echo $rexname['img']."<br />";
echo $rexname['preis']."<br />";
echo $rexname['artikel'];
?>


Gruß
Adam

Benutzeravatar
Xong
Beiträge: 2081
Registriert: 5. Jun 2008, 08:30
Wohnort: Halle (Saale)

12. Nov 2010, 00:51

Hi Satyr!

Soweit ganz ok, aber du kannst in den Modulen leichter und performanter an das $rexname-Array mit:

Code: Alles auswählen

global $rexname;
$rexname = unserialize('REX_HTML_VALUE[20]');
Zumindest unter Rex 4.2 habe ich das noch so genutzt.
LG,
Xong

[ externes Bild ] Määääääääääääääääääääääääh!

Benutzeravatar
Satyr
Beiträge: 58
Registriert: 4. Jul 2010, 17:02
Wohnort: Wiesbaden
Kontaktdaten: Website

12. Nov 2010, 10:29

Hallo Xong,
ja und nein zumindest in Redaxo 4.3.1 kann ich dein Vorschlag nur in Modul-Ausgabe nutzen (wegen Performance wäre es besser).
In der Modul-Eingabe sind 2 Möglichkeiten die Änderungen zu speichern:
1. "Block Speichern"
2. "Block Übernehmen"
Klicke ich auf den ersten Button ist alles OK.
Bei Klick auf "Block Übernehmen" finde ich alle Eingabefelder wieder leer.
Vielleicht ist das ein Bug in der Version 4.3.1?
In der Datenbank sind allerdings alle Änderungen gespeichert, deswegen bin ich auf die Idee gekommen diese wieder aus der Datenbank zu holen (Die Variable REX_VALUE[20] ist leer!)

Gruß
Adam

Frezl
Beiträge: 160
Registriert: 13. Aug 2009, 14:31

Re: Verbesserte Action zum Erweitern von REX_VALUES

2. Jul 2012, 19:04

Weil alle Lösungen (meine eigene und die ausm Wiki) bei mir nie richtig funktioniert haben, hab ich mich jetzt noch mal mit dem Thema beschäftigt und eine funktionierende Lösung gefunden. Mit ihr ist es möglich, ein beliebiges Array mit beliebigen Keys in $rexname zu speichern.

Getestet habe ich mit der aktuellen Redaxo-Version 4.4.0. Die Action und das Modul sollten alle UTF-8-codiert sein. Ich arbeite mit dem Developer-AddOn direkt in den developer_files und kann die Codierung daher im Editor einstellen. Ich weiß nicht, ob es beim direkten Eintragen im Backend auch funktioniert.

Und so sieht die Action aus:

PRESAVE Add/Edit

Code: Alles auswählen

<?php   // wirkt bei "Block speichern" und "Block übernehmen", bevor in die DB gespeichert wird.

    // rexname serialisieren und in REX_VALUE[20] schreiben:
    $REX_ACTION['VALUE'][20] = urlencode (serialize (rex_request ("rexname", "array")));

?>
PREVIEW Add/Edit:

Code: Alles auswählen

<?php   // wirkt bei nach "Block übernehmen", bevor das Slice wieder angezeigt wird.

    $REX_ACTION['VALUE'][20] = $rexname;
    
?>
Diese Action muss dem Modul zugewiesen werden, das $rexname verwendet. Außerdem muss am Anfang des Moduls im Input und Output folgender Code stehen:

Code: Alles auswählen

<?php

    $rexname = unserialize (urldecode ("REX_VALUE[20]"));

?>
Und so könnte $rexname in einem Modul verwendet werden:

INPUT:

Code: Alles auswählen

<?php
    $rexname = unserialize (urldecode ("REX_VALUE[20]"));
?>

<label for="input_aepfel">Äpfel:</label><input type="text" name="rexname[aepfel]" value="<?php echo $rexname['aepfel']; ?>" id="input_aepfel" /><br />
<label for="input_birnen">Birnen:</label><input type="text" name="rexname[birnen]" value="<?php echo $rexname['birnen']; ?>" id="input_birnen"/><br />

<input type="checkbox" name="rexname[leben]" value="<?php echo $row['type_id']; ?>" id="checkbox_leben" <?php if (isset ($rexname["leben"])) { echo "checked=\"checked\""; } ?>/><label for="checkbox_leben">Das Leben ist schön!</label>
OUTPUT:

Code: Alles auswählen

<?php
    $rexname = unserialize (urldecode ("REX_VALUE[20]"));
?>

Äpfel: <?php echo $rexname['aepfel']; ?><br />
Birnen: <?php echo $rexname['birnen']; ?><br />
<?php
  if (isset ($rexname['leben'])) {
    echo "Das Leben ist schön!";
  }
?>
Ich hoffe, dass das endlich mal eine Lösung ist, die stabil funktioniert.

Würde mich freuen, wenn ihr die Lösung testen und mir Feedback geben könntet. Außerdem wärs interessant zu wissen, ob sie auch in niedrigeren Versionen als 4.4.0 und ohne den Umweg über das Developer-AddOn funktioniert.

Viele Grüße,
Frezl

Benutzeravatar
jdlx
Beiträge: 2615
Registriert: 29. Sep 2005, 10:50
Wohnort: Hamburg
Kontaktdaten: Website

Re: Verbesserte Action zum Erweitern von REX_VALUES

2. Jul 2012, 22:20

Vorschlag: mach doch am besten ein gist aus deinem Code..
vg, Jan

Frezl
Beiträge: 160
Registriert: 13. Aug 2009, 14:31

Re: Verbesserte Action zum Erweitern von REX_VALUES

2. Jul 2012, 22:33

Ich hoffe ja, dass das vorerst die (zumindest für Redaxo 4.x) letzte Version bleibt... ;-)

Benutzeravatar
jdlx
Beiträge: 2615
Registriert: 29. Sep 2005, 10:50
Wohnort: Hamburg
Kontaktdaten: Website

Re: Verbesserte Action zum Erweitern von REX_VALUES

2. Jul 2012, 22:37

Geht primär darum, daß diese über forum threads verstreuten Code-Schnippsel einfach sehr mühselig sind. Die Anzeige in forum ist suboptimal at best, und man hat dann _eine_ Stelle die für genau sowas optimiert ist.. wo Änderungen eingepflegt werden können, usw.
vg, Jan

Benutzeravatar
Satyr
Beiträge: 58
Registriert: 4. Jul 2010, 17:02
Wohnort: Wiesbaden
Kontaktdaten: Website

Re: Verbesserte Action zum Erweitern von REX_VALUES

4. Jul 2012, 12:47

Gut gemacht Frezl!
ich habe getestet unter Redaxo 4.3.3
Es funktioniert bei "Block übernehmen" und "Block speichern"

Gruß
Adam

Frezl
Beiträge: 160
Registriert: 13. Aug 2009, 14:31

Re: Verbesserte Action zum Erweitern von REX_VALUES

26. Jul 2012, 14:13

Wunderbar, freut mich, dass es nicht nur bei mir funktioniert :-)

Und danke für das Lob ;-)

Benutzeravatar
Satyr
Beiträge: 58
Registriert: 4. Jul 2010, 17:02
Wohnort: Wiesbaden
Kontaktdaten: Website

Re: Verbesserte Action zum Erweitern von REX_VALUES

26. Jul 2012, 17:18

Hallo,
für alle Redaxo Nutzer ist diese Code auf dem GitHub als GIST verfügbar:
https://gist.github.com/3039059

Gruß
Adam

Benutzeravatar
jdlx
Beiträge: 2615
Registriert: 29. Sep 2005, 10:50
Wohnort: Hamburg
Kontaktdaten: Website

Re: Verbesserte Action zum Erweitern von REX_VALUES

26. Jul 2012, 17:35

Tip: Github Gists können direkt hier im Forum ausgegeben werden.
Dafür gibts den toolbar button gist=. Die Notation:

Code: Alles auswählen

[gist=Github_Gist_ID]Zusammenfassung(optional)[/gist]
was dann wie folgt aussieht:
gist: 3039059 : Verbesserte Action zum Erweitern von REX_VALUES
vg, Jan

Zurück zu „Allgemeines [R4]“