Hallo, lieber Forumbenutzer. 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 Möglichkeiten der Kommunikation ist das Forum ein wenig eingeschlafen und weniger Nutzer benutzen das Forum aktiv (trotzdem lohnt es sich evtl. hier nach Lösungen zu suchen oder seine Frage zu stellen).

Wir empfehlen, für deine Fragen/Probleme aktuell (zusätzlich) 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: http://redaxo.org/slack/
selfkant
Beiträge: 6
Registriert: 4. Aug 2017, 09:23

yform, Formulareingabe, Ergebnisausgabe, Änderung und Mailversand

14. Dez 2017, 13:44

Liebe Gemeinde,
ich habe etwas gebaut, das ich nicht für mich behalten möchte, weil ich es im Wesentlichen aus vielen Ecken der Community geklaut habe. Und am Ende habe ich auch noch eine Frage. Also es geht los:

1. Ich habe ein yform Formular (zuerst im Table-Manager eine entsprechende Tabelle angelegt), dieses gibt nach Submit das Ergebnis zusammengefasst aus und generiert zwei Buttons: Ändern / Speichern und Mailen. Dabei wird ein hashwert in einem Hiddenfeld weitergegeben.
2. Das Formular wird auf einer neuen Seite nun mit einem Modul aufgerufen. Daher ist der Code nun in PHP verpackt. Die Daten sind wieder editierbar. Es gibt einen Button, der die Seite erneut aufruft und die Daten zusammengefasst darstellt und wieder die zwei Buttons Ändern / Speichern und Mailen anbietet. Die Korrekturschleife kann man solange machen wie man will, es wird immer der gleiche Datensatz geändert.
3. Drückt man auf SENDEN wird eine neue Seite aufgerufen. Die Daten werden ausgelesen und dem E-Mailformular (das im Table-Manager erstellt wurde) wird angesprochen und ausgelöst. Somit werden die Daten an die E-Mailadresse versendet, die der User selbst angegeben hat. Eine Bestätigung (normaler Inhaltstext der aufgerufenen Seite, steht nicht im Code) wird ausgegeben.
Soweit so gut:
Meine Frage: wie können am Ende mehrere E-Mails auf der Basis anderer E-Mail-Templates rausgehen?

Und hier die 3 Code-Beispiele. Getestet und funktionsfähig.

1. yform

Code: Alles auswählen

objparams|form_name|table-rex_test
objparams|form_ytemplate|bootstrap
objparams|form_showformafterupdate|0
objparams|real_field_names|true

fieldset|kontakt|Kontakt|
text|vorname|Vorname|
validate|empty|vorname|Bitte den Vornamen hinzufügen.|
text|nachname|Nachname|
validate|empty|nachname|Bitte den Nachnamen hinzufügen.|
email|email|E-Mail|
validate|empty|email|Bitte fügen Sie eine E-Mailadresse hinzu.|
generate_key|hashvalue|hashvalue|1|1|

submit|submit|weiter zur Zusammenfassung||no_db|

action|readtable|rex_test|vorname|Vorname
action|readtable|rex_test|nachname|Nachname
action|readtable|rex_test|email|E-Mail
action|readtable|rex_test|hashvalue|hashvalue


action|showtext|Kontaktperson|<h4>|</h4>|0
action|showtext|###vorname### ###nachname###|<p>|</p>|0
action|showtext|###email###|<p>|</p>|0
action|showtext|###hashvalue###|<p><i>|</i></p>|0

action|showtext|<form name="weiter" method="post" action="index.php?article_id=2">|||1
action|showtext|<input type="hidden" name="zahl" value="###hashvalue###">|||1
action|showtext|<button class="btn btn-primary" type="submit" name="submit" id="yform-table-rex_test-field-6" value="Eingaben ändern">Eingaben ändern</button>|||1
action|showtext|</form>|||1

action|showtext|<form name="done" method="post" action="index.php?article_id=3">|||1
action|showtext|<input type="hidden" name="zahl" value="###hashvalue###">|||1
action|showtext|<button class="btn btn-primary" type="submit" name="senden" id="yform-table-rex_test-field-7" value="Eingaben speichern">Speichern und Mail senden</button>|||1
action|showtext|</form>|||1

2. Modul zwei auf neuer Seite (Kontrollschleife)

Code: Alles auswählen

<div>

<?php
// Aus dem ersten Formular wurde die POST Variable -zahl- übergeben.
// Der Wert des Datenfeldes -hashvalue- ist der Hash-Wert des Datensatzes.
$wert = "";
if (isset ($_POST['zahl'])) { $wert = $_POST['zahl']; }
else { echo "Wert wird weitergegeben, wenn er existiert."; }
// echo $wert;

// Suche die ID des Datensatzes aus -rex_test-, der den -wert- enthält
$db_table = "rex_test";
$sql = rex_sql::factory();
$sql->setDebug(false); 
$sql->setQuery("SELECT id FROM $db_table WHERE hashvalue = '$wert'");
foreach($sql as $row)
{
if ($row->getValue("id") != "")
  {
    $myid = $row->getValue("id");
  }
}
$id = $myid;

// Hier werden die Formulardaten für das form-Objekt
// in eine Variable geschrieben: Pipe-Code!

$form_data ='
fieldset|kontakt|Kontakt|
text|vorname|Vorname|
validate|empty|vorname|Bitte den Vornamen hinzufügen.|
text|nachname|Nachname|
validate|empty|nachname|Bitte den Nachnamen hinzufügen.|
email|email|E-Mail|
validate|empty|email|Bitte fügen Sie eine E-Mailadresse hinzu.|
generate_key|hashvalue|hashvalue|1|1|
submit|submit|weiter zur Zusammenfassung||no_db|

action|readtable|rex_test|vorname|Vorname
action|readtable|rex_test|nachname|Nachname
action|readtable|rex_test|email|E-Mail
action|readtable|rex_test|hashvalue|hashvalue

action|showtext|Kontakt|<h4>|</h4>|0
action|showtext|###vorname### ###nachname###|<p>|</p>|0
action|showtext|###email###|<p>|</p>|0
action|showtext|###hashvalue###|<p><i>|</i></p>|0

action|showtext|<form name="weiter" method="post" action="index.php?article_id=2">|||1
action|showtext|<input type="hidden" name="zahl" value="###geloescht_am###">|||1
action|showtext|<button class="btn btn-primary" type="submit" name="submit" id="yform-table-rex_test-field-6" value="Eingaben ändern">Eingaben ändern</button>|||1
action|showtext|</form>|||1

action|showtext|<form name="done" method="post" action="index.php?article_id=3">|||1
action|showtext|<input type="hidden" name="zahl" value="###geloescht_am###">|||1
action|showtext|<button class="btn btn-primary" type="submit" name="senden" id="yform-table-rex_test-field-7" value="Eingaben speichern">Speichern und Mail senden</button>|||1
action|showtext|</form>|||1
';
// Hier ist die Variable -form-data- fertig gefüllt.

if (isset ($_POST['zahl'])) { $wert = $_POST['zahl']; }
else { echo "Hashwert nicht vorhanden"; }

// Nun wird das Objekt deklariert:
            $yform = rex_yform::factory();
            $yform->setObjectparams('form_name','zweites_formular');
            $yform->setObjectparams("getdata",TRUE);
            // hidden-Wert:
            $yform->setValueField('hidden', array("zahl", $wert, 'REQUEST', 'no_db'));
            // Formular wird auf der gleichen Seite geladen:
            $yform->setObjectparams('form_action', rex_getUrl(2));
            $yform->setObjectparams('main_table', 'rex_test');
            // mysql-Statement, das die ID benötigt, um den angezeigten Datensatz zu ändern:
            $yform->setObjectparams('main_where', "id= '$id'");
            // Die Pipenotation aus der Datenbank wird jetzt eingebunden:
            $yform->setFormData($form_data); 
            $yform->setActionField('db', array("rex_test", "main_where"));
            echo $yform->getForm();

?>
</div>

3. Modul drei auf neuer Seite (Mailversand)

Code: Alles auswählen

<?php
// Aus dem ersten Formular wurde die POST Variable -zahl- übergeben.
// Der Wert des Feldes -geloescht_am- ist der Hash-Wert des Datensatzes.
$wert = $_POST['zahl'];

// Suche die ID des Datensatzes aus -rex_test-, der den -wert- enthält
$db_table = "rex_test";
$sql = rex_sql::factory();
$sql->setDebug(false); 
$sql->setQuery("SELECT * FROM $db_table WHERE hashvalue = '$wert'");
foreach($sql as $row)
{
if ($row->getValue("id") != "")
  {
    $myid = $row->getValue("id");
$vorname = $row->getValue("vorname");
$nachname = $row->getValue("nachname");
$email = $row->getValue("email");
  }
}

$template_name = "Mailvorlage test";
$yform_email_template_key = '1'; // Key des E-Mail-Templates
$debug = 0;

// Platzhalter, die im E-Mail-Template ersetzt werden. Dieses Array könnte bspw. auch von der Datenbank befüllt werden.
$values['vorname'] = $vorname;
$values['nachname'] = $nachname;
$values['email'] = $email;


// --------------------------------

if ($yform_email_template = rex_yform_email_template::getTemplate($yform_email_template_key)) {

    if ($debug) {
        echo '<pre>'; var_dump($yform_email_template); echo '</pre>';
    }
    $yform_email_template = rex_yform_email_template::replaceVars($yform_email_template, $values);
    $yform_email_template['mail_to'] = $values['email'];
    $yform_email_template['mail_to_name'] = $values['vorname'].$values['nachname'];

    if ($debug) {
        echo '<pre>'; var_dump($yform_email_template); echo '</pre>';
    }
    if (!rex_yform_email_template::sendMail($yform_email_template, $template_name)) {
        if ($debug) { echo 'E-Mail konnte nicht gesendet werden.'; }
        return false;
    } else {
        if ($debug) { echo 'E-Mail erfolgreich gesendet.'; }
        return true;
    }
} else {
    if ($debug) {echo '<p>YForm E-Mail-Template "'.htmlspecialchars($template_name).'" wurde nicht gefunden.'; }
}

?>
Ich hoffe, ich habe nicht nur Wissen geklaut, sondern auch etwas für eure Praxis beigetragen.
Und dass jemand meine Frage beantworten kann: wie versende ich mehrere Mails am Ende?

Gott zum Gruße
selfkant

Zurück zu „Sonstiges“