Hallo zusammen,
ich wollte ebenfalls den Inhalt einer PHP-Session-Variable mit ins Formular "schießen", um sie dort zu verwenden. Lösung wie folgt (für R4):
Achtung dieses Vorgehen ist nicht ganz ungefährlich und man sollte sich der Angriffsvektoren bewusst sein, die man unter Umständen aufreißt!
Ich lege mir für diesen Zweck eine Value-Feld-Klasse an. Als Basis dient die bereits existierende "php"-Klasse, diese wird dahingehend abgeändert, dass die PHP-Code nicht nur ausgewertet und ausgegeben wird, sondern wie in den anderen Klassen auch mit dem Formular transportiert.
Wir kopieren unter
/redaxo/include/addons/xform/classes/value die Datei
class.xform.php.inc.php und benennen diese in
class.xform.php2form.inc.php.
Die neue Datei
class.xform.php2form.inc.php wird nun wie folgt angepasst:
Den Klassennamen in Zeile 9 ändern wir von
in
Die Ausgabe in Zeile 18
kommentieren wir bei Bedarf aus und fügen danach folgenden Code ein:
Code: Alles auswählen
$this->params['value_pool']['email'][$this->getName()] = stripslashes($out);
Das wars.
Nun wird wie in der Beschreibung der neuen Klasse
Code: Alles auswählen
php2form -> Beispiel: php2form|name|<?php echo date("mdY"); ?>
das ausgegeben Datum via "name" verfügbar und kann ganz normal per E-Mail-Template versendet werden.
Achtung: "name" wird nicht in die Datenbank geschrieben.
Sollte das gewünscht sein, sieht die Klassendatei wie folgt aus:
Code: Alles auswählen
<?php
/**
* XForm
* @author jan.kristinus[at]redaxo[dot]org Jan Kristinus
* @author <a href="http://www.yakamara.de">www.yakamara.de</a>
*/
class rex_xform_php2form extends rex_xform_abstract
{
function enterObject()
{
ob_start();
eval('?>' . $this->getElement(2));
$out = ob_get_contents();
ob_end_clean();
//Keine Ausgabe innerhalb des Formulares benötigt.
//$this->params['form_output'][$this->getId()] = $out;
$this->params['value_pool']['email'][$this->getName()] = stripslashes($out);
if ($this->getElement(4) != 'no_db') {
$this->params['value_pool']['sql'][$this->getName()] = $this->getValue();
}
}
function getDescription()
{
return htmlspecialchars(stripslashes('php2form -> Beispiel: php2form|name|<?php echo date("mdY"); ?>|[no_db]'));
}
function getDefinitions()
{
return array(
'type' => 'value',
'name' => 'php2form',
'values' => array(
'name' => array( 'type' => 'name', 'label' => 'Feld' ),
'label' => array( 'type' => 'textarea', 'label' => 'PHP Code'),
'no_db' => array( 'type' => 'no_db', 'label' => 'Datenbank', 'default' => 0),
),
'description' => 'Ein PHP Code',
'dbtype' => 'text',
'famous' => false
);
}
}
Ich hoffe, es haben sich keine Fehler eingschlichen!
VG, Markus