Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#1 26. Oktober 2016 14:01
- jeff1980
- Server-Pate
- Ort: Dortmund
- Registriert: 26. November 2010
- Beiträge: 630
[GELÖST] Freikarten für Veranstaltung anfordern - welches Modul?
Hallo zusammen,
stehe gerade ein bisschen auf dem Schlauch bei einer eigentlich ganz simplen Anforderung:
Auf einer Seite sind mit LISE verschiedene Veranstaltungen gelistet. Nun soll man sich über ein Formular eine Freikarte anfordern können.
Diese Anforderung muss zum einen datenschutzrechtlich passen (opt-in/opt-out), zudem soll die Anfrage per Mail an den Seitenbetreuer verschickt werden. Außerdem sollen die Daten zur weiteren Verwendung (bis zum Widerruf) gespeichert werden.
Alles spricht für NMS - opt-in und opt-out sind eingebaut. Ich kann freie Felder hinzufügen (für die Anschrift).
Aber zwei Dinge fehlen mir:
- Die jeweilige Veranstaltung muss in irgendeiner Form übergeben werden (z.B. dadurch, dass über ein einen Link ein Feld vorausgefüllt wird - kenne ich bisher nur vom Kontakt-Formular-PlugIn bzw. FormBuilder) - manuelle Pflege z.B. per Dropdown ist keine Option
- Die Email an den Seitenbetreuer bei einer neuen Anfrage (quasi neues Newsletter-Abo) - so etwas hab ich in NMS nicht gesehen.
Alternativ FormBuilder mit LISE. Allerdings fehlt mir hier opt-in/opt-out.
Hat jemand ne Idee? Bin ich wieder mal nur blind?
Beitrag geändert von jeff1980 (26. Oktober 2016 14:02)
Offline
#2 27. Oktober 2016 07:19
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: [GELÖST] Freikarten für Veranstaltung anfordern - welches Modul?
Aber zwei Dinge fehlen mir:
- Die jeweilige Veranstaltung muss in irgendeiner Form übergeben werden (z.B. dadurch, dass über ein einen Link ein Feld vorausgefüllt wird - kenne ich bisher nur vom Kontakt-Formular-PlugIn bzw. FormBuilder) - manuelle Pflege z.B. per Dropdown ist keine Option
Hier würde ich folgendes probieren
1. NMS in der Detailansicht der Veranstaltung einbauen
2. In NMS ein Feld für die Veranstaltung erstellen
3. Da vermutlich das Input-Feld über eine einzige Variable läuft - den title der Veranstaltung über den replace Modifikator auf den default value des Input-Feldes injizieren
4. Dieses Eingabefeld via CSS verbergen (falls es für neue Felder keine Hidden Fields gibt)
Aber zwei Dinge fehlen mir:
- Die Email an den Seitenbetreuer bei einer neuen Anfrage (quasi neues Newsletter-Abo) - so etwas hab ich in NMS nicht gesehen.
Dass du als versierter CMSMS-Nutzer darüber stolperst, wundert mich schon etwas .
Wie wäre es denn mit der Ereignisverwaltung ? Da gibt's ein Event "OnNewUser"...
Offline
#3 27. Oktober 2016 07:36
- jeff1980
- Server-Pate
- Ort: Dortmund
- Registriert: 26. November 2010
- Beiträge: 630
Re: [GELÖST] Freikarten für Veranstaltung anfordern - welches Modul?
jeff1980 schrieb:Aber zwei Dinge fehlen mir:
- Die jeweilige Veranstaltung muss in irgendeiner Form übergeben werden (z.B. dadurch, dass über ein einen Link ein Feld vorausgefüllt wird - kenne ich bisher nur vom Kontakt-Formular-PlugIn bzw. FormBuilder) - manuelle Pflege z.B. per Dropdown ist keine OptionHier würde ich folgendes probieren
1. NMS in der Detailansicht der Veranstaltung einbauen
2. In NMS ein Feld für die Veranstaltung erstellen
3. Da vermutlich das Input-Feld über eine einzige Variable läuft - den title der Veranstaltung über den replace Modifikator auf den default value des Input-Feldes injizieren
4. Dieses Eingabefeld via CSS verbergen (falls es für neue Felder keine Hidden Fields gibt)
Danke, das ist ein toller Ansatz - werde ich so probieren. Evtl. ändere ich es noch ab, da das Formular auch auf der Startseite angezeigt werden soll. Aber ich kann ja auf das nächste Event prüfen und das wird dann automatisch eingetragen. Oder ich gehe sogar noch einen Schritt weiter und nutze ein Dropdown und passe dies mit replace für die nächsten x Events an ... Da die Events teilweise so nahe beieinander liegen, wäre es für den Besucher noch komfortabler.
jeff1980 schrieb:Aber zwei Dinge fehlen mir:
- Die Email an den Seitenbetreuer bei einer neuen Anfrage (quasi neues Newsletter-Abo) - so etwas hab ich in NMS nicht gesehen.Dass du als versierter CMSMS-Nutzer darüber stolperst, wundert mich schon etwas
.
Wie wäre es denn mit der Ereignisverwaltung
? Da gibt's ein Event "OnNewUser"...
So versiert dann doch immer noch nicht. Ich kenne zwar die Ereignisverwaltung, bin aber noch nie auf die Idee gekommen, sie zu nutzen. Einmal ist immer das erste Mal
Ich werde berichten ...
Offline
#4 27. Oktober 2016 08:08
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: [GELÖST] Freikarten für Veranstaltung anfordern - welches Modul?
Hier hatten wir für den Emailversand einen UDT, der leicht angepasst werden müsste
Offline
#5 27. Oktober 2016 16:43
- jeff1980
- Server-Pate
- Ort: Dortmund
- Registriert: 26. November 2010
- Beiträge: 630
Re: [GELÖST] Freikarten für Veranstaltung anfordern - welches Modul?
Ich habe mir jetzt noch mal verschiedene Ansätze angeschaut - bin u.a. auch darüber gestolpert:
https://www.cmsmadesimple.de/forum/view … hp?id=3052
Hilft leider auch nicht weiter - wobei ich es für spätere Projekte mal im Hinterkopf behalte.
Den genannten UDT habe ich grundsätzlich zum Laufen gebracht. Allerdings müsste ich ihn in irgendeiner Form mit den Daten aus dem Formular füttern. NMS soll quasi nur als Datenbank und opt-in/opt-out-Wächter fungieren.
Die Verwaltung der Freikarten soll über die an den zuständigen Bearbeiter verschickten Mails laufen.
Mein Ansatz, den UDT in das opt-in-Template zu setzen, klappt soweit. Die Mail wird verschickt.
Aber:
Ich komme partout nicht an die benutzerdefinierten Felder (Anschrift).
Per {get_template_vars} bekomme ich:
[== PHP ==]
$fields (array) = [
.Strasse (object of type: nms_fielddef) = { }
.Postleitzahl (object of type: nms_fielddef) = { }
.Ort (object of type: nms_fielddef) = { }
.Datenschutz (object of type: nms_fielddef) = { }
]
Aber was ich auch versuche:
[== Smarty ==]
{$fields->nms_fielddef.Strasse}
{$fields->nms_fielddef.Strasse.value}
{$nms_fielddef->fields.Strasse}
{$nms_fielddef->fields.Strasse.value}
{$fields.Strasse}
{$nms_fielddef.Strasse}
.
.
.
]
Ich bekomme keine Ausgabe. Wenn ich die erst mal habe, kann ich sie ja wiederum an den UDT übergeben und somit in die Mail einbinden.
Bzgl. replace für die Veranstaltungen:
Klappt mit dem Dropdown bisher leider nicht, da im Backend auch die dort hinterlegten Platzhalter verwendet werden. Also entweder doch pro Veranstaltung mit vorausgefülltem Textfeld (das klappt) oder manuell die Veranstaltungen in NMS anlegen. Wäre nicht toll, aber bei ca. 24 Veranstaltungen im Jahr machbar
Beitrag geändert von jeff1980 (27. Oktober 2016 16:45)
Offline
#6 28. Oktober 2016 07:53
- jeff1980
- Server-Pate
- Ort: Dortmund
- Registriert: 26. November 2010
- Beiträge: 630
Re: [GELÖST] Freikarten für Veranstaltung anfordern - welches Modul?
Nachtrag zum "replace":
In NMS habe ich nun ein Text-Feld angelegt (als Pflichfeld) das per replace mit Hilfe der in LISE hinterlegten Standorte gefüllt wird.
Konkret sieht das LISE-Template (Summary) so aus:
[== Smarty ==]
{if $items|@count > 0}
{assign 'veranstaltungen_input' '<input id="nms_field_5" type="text" name="md4e46nms_field_5" value="" required/>'}
{capture dropdown assign=veranstaltungen_dropdown}
<select id="nms_field_5" name="md4e46nms_field_5"/>
{foreach from=$items item=item}
{if $item->fielddefs.archiviert.value != '1'}
{if !empty($item->fielddefs)}
<option value="{$item->title} - {$item->fielddefs.veranstaltungsort.value}">{$item->title} - {$item->fielddefs.veranstaltungsort.value}</option>
{/if}
{/if}
{/foreach}
</select>
{/capture}
{/if}
Ich nehme also das normale Input-Feld, speichere es mir der Übersicht halber in eine Variable.
Dann erstelle ich mit den entsprechenden Feldern aus LISE eine Dropdown-Liste. Wichtig sind die ID und der Name, damit die Daten in NMS im richtigen Feld landen.
Auf der Seite für die Anfrage steht dann folgender Code:
[== Smarty ==]
{LISEstandorte template_summary="freikarte"}
{NMS|replace:$veranstaltungen_input:$veranstaltungen_dropdown}
Hier wird einfach LISE aufgerufen (es wird aber nichts ausgegeben) und die Ausgabe von NMS wird mit Hilfe der im LISE-Template gesetzten Variablen beeinflusst.
Und es funktioniert. Im Text-Feld landen die im Dropdown hinterlegten Infos. Völlig dynamisch.
Fehlt noch die Übermittlung aller Daten an eine festgelegte Adresse, damit nicht ständig ins Backend geschaut werden muss.
Leider habe ich nirgends eine Doku gefunden, wie auf benutzerdefinierte Felder zugegriffen werden kann (typisch CG).
Aber es wird
Offline
#7 28. Oktober 2016 14:20
- jeff1980
- Server-Pate
- Ort: Dortmund
- Registriert: 26. November 2010
- Beiträge: 630
Re: [GELÖST] Freikarten für Veranstaltung anfordern - welches Modul?
So, Stück für Stück.
Habe jetzt mal die Variable $fields ausgeben lassen. Toll, es sind null Informationen enthalten - nur die Feld-Infos, aber keine Daten des jeweiligen Newsletter-Abonnenten.
Meine Idee - die Daten direkt aus der Datenbank ziehen
Aber wie? Habe im angesprochenen Thread das hier gefunden:
[== PHP ==]
$db = &cmsms()->GetDb();
$query = "SELECT uniqueid FROM cms_module_nms_users WHERE email = '".$email."'";
$dbresult = $db->Execute($query);
Aber die Daten liegen nicht nur in einer Tabelle. Die benutzerdefinierten Felder liegen in der Tabelle "cms_module_nms_user_data", verknüpft über die ID.
Ich müsste also erst die Variable $email abgleichen - die habe ich ja. Von $email komme ich auf die userid. Über userid komme ich an die jeweiligen Extra-Felder. Diese kann ich dann (hoffentlich) über fieldid sortiert ausgeben.
Jetzt bin ich ein MySQL-Noob. Ich habe die Funktion "JOIN" gefunden. Aber ich muss in meinen Augen drei Schritte gehen:
Abgleich $email -> userid in module_nms_user_user
Abgleich userid in module_nms_user_user mit module_nms_user_data
Alle Zeilen mit passender userid sammeln und nach fieldid sortieren.
Ich habe keine passenden Beispiele gefunden, die ich für mich umbasteln konnte. Weiß aber ehrlich gesagt auch nicht genau, wonach ich suche
Offline
#8 29. Oktober 2016 11:12
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: [GELÖST] Freikarten für Veranstaltung anfordern - welches Modul?
MySql ist nicht sehr schwierig.
select tabelle1.feldname, tabelle2.feldname2 from tabelle1 inner join tabelle2 on tabelle2.idfeld = tabelle1.idfeld where tabelle1.suchfeld = wasauchimmer
Bei den JOINS gibt es den INNER JOIN welcher eine Verknüpfung haben muss. Sprich es muss in beiden Tabellen ein Datensatz existieren, damit das Query Daten ausspuckt. Wird ein left join verwendet, so muss in der tabelle1 etwas vorhanden sein, während dies auf tabelle2 nicht notwendig ist.
Ich kenne ich NMS Tabellen nun zuwenig. Ich denke aber, es sollte sich hier mit einem solchen Query gut machen lassen:
$query = "select cms_module_nms_user_data.value from cms_module_nms_users left join cms_module_nms_user_data on cms_module_nms_user_data.userid = cms_module_nms_users.userid where cms_module_nms_users.email = ".$email." and cms_module_nms_user_data.fieldid = 1
Mit der letzten Abfrage "cms_module_nms_user_data.fieldid = 1" steuerst du, welcher Feldwert abgefragt wird.
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#9 29. Oktober 2016 12:47
- jeff1980
- Server-Pate
- Ort: Dortmund
- Registriert: 26. November 2010
- Beiträge: 630
Re: [GELÖST] Freikarten für Veranstaltung anfordern - welches Modul?
MySql ist nicht sehr schwierig.
Für mich leider schon
Aber ich komme mit jedem Schnipsel weiter rein.
Der Ansatz ist genial und funktioniert.
Habe es jetzt so gelöst:
[== PHP ==]
$query_1 = "select cms_module_nms_user_data.value from cms_module_nms_users left join cms_module_nms_user_data on cms_module_nms_user_data.userid = cms_module_nms_users.userid where cms_module_nms_users.email = '".$params['email']."' and cms_module_nms_user_data.fieldid = 1";
$dbresult_1 = $db->Execute($query_1);
$result_1 = $dbresult_1->fields["value"];
$smarty->assign('strasse', $result_1);
Das ganze gehe ich jetzt 4x durch (für jedes individuelle Feld). Das geht sicher auch automatisiert (fieldid hochzählen). Aber das wäre im jetzigen Moment Luxus. Ich bin erst mal froh, dass es klappt und ich an beliebiger Stelle auf die Daten zugreifen kann und sie somit dem User noch mal angezeigt werden und die E-Mail an den Bearbeiter entsprechend gefüllt wird.
Hier noch mal für die Nachwelt (und für mich) der Ablauf:
1. User meldet sich über das normale NMS-Formular (mit ein paar benutzerdefinierten Feldern) an
2. User bekommt eine Mail mit Bestätigungs-Link (opt-in ist gegeben)
3. User wird auf eine Bestätigungs-Seite geführt, auf der auch noch mal alle Daten aufgeführt sind - die Mail-Adresse liegt durch NMS vor
3.1 Diese Daten kommen mit Hilfe der Mail-Adresse aus einem UDT mit o.g. Inhalt, da auf die einzelnen Felder nicht (mehr) direkt zugegriffen werden kann
3.2 Gleichzeitig wird auf dieser Seite ein UDT ausgeführt, der eine Mail an den Sachbearbeiter schickt. Ich übergebe die Daten aus dem ersten UDT per Parameter an diesen zweiten "E-Mail"-UDT, damit die Daten auch beim Sachbearbeiter landen
4. Der User bekommt ebenfalls die Mail-Bestätigung mit opt-out-Link
Der E-Mail-UDT sieht so aus:
[== PHP ==]
if($cmsmailer =& cms_utils::get_module('CMSMailer'))
{
$subject = "";
$subject .= "Anfrage für eine Freikarte für: ";
$subject .= $params['veranstaltung'];
$message = "";
$message = "Name: ";
$message .= $params['name'];
$message .= "<br>E-Mail: ";
$message .= $params['email'];
$message .= "<br>Anschrift: ";
$message .= $params['strasse'];
$message .= ", ";
$message .= $params['plz'];
$message .= " ";
$message .= $params['ort'];
$message .= "<br>Veranstaltung: ";
$message .= $params['veranstaltung'];
$cmsmailer->ClearAllRecipients(); // löscht alle zuvor gespeicherten Empfänger
$cmsmailer->AddAddress($params['recipient_1']);
$cmsmailer->AddAddress($params['recipient_2']); // Es kann immer nur eine Adresse zur Zeit übergeben werden
$cmsmailer->SetBody($message);
$cmsmailer->IsHTML(true);
$cmsmailer->SetSubject($subject);
$cmsmailer->Send();
$cmsmailer->ClearAddresses();
}
Danke für die (wie immer) tolle Hilfe und die Denkanstöße - hab wieder ne Menge gelernt
Edit:
Noch ein paar Änderungen bzgl. der Mail-Zustellung:
Der E-Mail-UDT hat die Mail auch noch mal an den "Kunden" geschickt - sollte natürlich nicht so sein. Lag daran, dass die Mail-Adresse noch gespeichert war.
Zudem kann man nicht einfach mehrere Adressen kommagetrennt übergeben, sondern muss sich nach und nach hinzufügen.
Beitrag geändert von jeff1980 (13. November 2016 15:19)
Offline
#10 29. Oktober 2016 20:09
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: [GELÖST] Freikarten für Veranstaltung anfordern - welches Modul?
Schön hat es geklappt.
nockenfell schrieb:MySql ist nicht sehr schwierig.
Für mich leider schon
Für mich ist das tägliches Brot.
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
Seiten: 1