Ergebnis 1 bis 10 von 10

Thema: Formular Inhalt berechnen vor Mail versand

  1. #1
    Contao-Nutzer
    Registriert seit
    15.07.2016.
    Beiträge
    3

    Standard Formular Inhalt berechnen vor Mail versand

    Guten Tag,
    ich habe noch recht wenig Erfahrung mit Cantao. Auf unserer Vereinshompage muss ich ein Formular erstellen, welches die Eingaben zusammenrechnen muss und anschliessen ein Mail ausgeben werden soll.
    Nun habe ich das Forum durchsucht und nur Beiträge vor 2011 gefunden.
    Nun ist meine Frage, gibt es da eine einfacher Variante als mit efg?
    Wichtig ist für uns, dass die Eingaben nachher in einer Tabelle ausgegeben werden können.

    Besten Dank für eure Hilfe.

  2. #2
    Contao-Fan Avatar von Ainschy
    Registriert seit
    24.06.2009.
    Ort
    Wenden
    Beiträge
    796
    Partner-ID
    5666
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hallo schneehase78,

    kannst du die Art der Berechnung näher beschreiben?

    Generell kann der Formulargenerator lediglich Daten entgegennehmen. Mit der Erweiterungen Leads von Terminal42 können diese dann in der DB abgespeichert und mittels Excel Export zur Weiterverarbeitung exportiert werden. Berechnungen und Ausgabe von Ergebnissen lassen sich ohne eine Programmierung nicht umsetzten.

  3. #3
    Contao-Nutzer
    Registriert seit
    06.09.2016.
    Beiträge
    125

    Standard

    Eine niederschwellige Vorgehensweise ganz ohne Erweiterungen:

    Zur Mailausgabe: aktiviere das Datenformat "CSV-Datei", die kommt dann im Anhang der Mail. Wenn du die CSV-Datei mit LibreOffice öffnest und beim Start die Kodierung UTF-8 angibst, stimmen auch die Sonderzeichen. Mit Microsoft Excel leider nicht. Die Tabellenzeile kannst du dann weiter kopieren.

    Das Zusammenrechnungen könnte man mit Javascript realisieren:
    3 Datenfelder anlegen: Feld A, Feld B, Summe (vorerst leer), dann in einem kleinen Javascript für Feld A und Feld B Event-Listener hinzufügen, die bei einer Änderung eine Funktion aufrufen, die die Informationen in das Summenfeld schreibt, siehe u.a. https://wiki.selfhtml.org/wiki/JavaS...forms/elements.

    Das ist aber natürlich nicht 100% fälschungssicher.

  4. #4
    Contao-Nutzer
    Registriert seit
    15.07.2016.
    Beiträge
    3

    Standard Berechnung

    Es geht um eine einfache Ticketbestellung.
    Der Kunde kann angeben wieviele Tickets er für Erwachsene und Kinder bestellen möchte.
    Im Antwort Mail sollte er dann die Anzahl Bestellten Tickets x Ticketpreis sehen. + Eltern und Kindertickets zusammengerechnet werden.

    Alle diese Infos müssten dann für die Zahlungskontrolle mittels csv File auslesbar sein.

    Dies war früher mit EFG möglich.
    Wir benutzen contao 3.5.16.


    Besten Dank für eure Hilfe.

    Gruss

  5. #5
    Contao-Nutzer
    Registriert seit
    06.09.2016.
    Beiträge
    125

    Standard

    Naja, für einen Shop wäre wohl isotope dann die richtige Wahl, das wäre von der Funktionsweise her dann auch rechtssicher.

  6. #6
    Contao-Nutzer
    Registriert seit
    15.07.2016.
    Beiträge
    3

    Standard

    habe mir einige webhops angeschaut. die sind alle sehr umfangreich. Eigentlich wollte ich das mit die Bestellung mit dieser Funktion erstellen.
    http://www.tl-usertreffen.weitzeldesign.com/efg-6.html
    Leider bringe ich dies nicht zum laufen.

    Funktioniert dies mit 3.5.16?

  7. #7
    Contao-Nutzer
    Registriert seit
    21.02.2014.
    Beiträge
    158

    Standard

    Konntest du das schließlich mit dem EFG lösen?
    ...Dies war früher mit EFG möglich. ...
    Wie konnte man das denn früher eigentlich?

    Mein Problem ist, dass die Formulardaten ja noch nicht in der Datenbank sind, man kann damit also auch nichts per PHP multiplizieren in der Hook-Funktion, weil man an die im Formular eingegebenen Benutzereingaben noch nicht dran kommt.

  8. #8
    Contao-Nutzer
    Registriert seit
    21.02.2014.
    Beiträge
    158

    Standard

    Irgendwo habe ich gelesen, so was kann man nur mit JavaScript abbilden, stimmt das dann?
    Gibt es da irgendwo ein Beispiel?

  9. #9
    Contao-Nutzer
    Registriert seit
    06.09.2016.
    Beiträge
    125

    Standard

    Hier mein kleines Javascript-Shop-Skript, nur für den Contao-Formulargenerator ohne Erweiterungen.

    Hinweis: das funktioniert logischerweise nur mit aktiviertem JavaScript und ist aufgrund der browserseitigen Verarbeitung nicht fälschungssicher (!), aber für einen vereinsinternen Minimal-Shop reicht es eventuell...

    1. Der untenstehende Code muss auf jeder Shop-Seite eingebunden werden (ggf. HTML-Tag "<script>" bei den Einstellungen erlauben oder über Template einbinden), mehrere Shop-Seiten sind möglich da die Daten im localStorage zwischengespeichert werden

    2. Auf jeder Shop-Seite muss
    Code:
    <div id="bestellliste"></div>
    eingefügt werden. Hier wird dann der aktuelle Warenkorb ausgegeben.

    3. Artikel können ganz normal in einem Textelement angelegt werden. Die Shop-Funktion wird hinzugefügt, indem der Artikel einen Link der Form "javascript:shop('Radiergummi',1.43);" bekommt für einen 1,43€ teuren Radiergummi. Damit das auch über den TinyMCE geht muss in system/config/tinyMCE.php "allow_script_urls: true," eingefügt werden, das Komma am Ende entfällt wenn es die letzte Anweisung ist.

    4. Im Formular muss ein Platzhalter-Textarea angelegt werden, das dann mit den Angaben aus dem Shop befüllt wird. Dessen ID muss im untenstehenden Skript bei ctrl_XXX eingetragen werden.

    Code:
    <script>
    	// Erstellung des Objekts
    	function bestellung(name,preis,anzahl)
    	{
    		this.name = name;
    		this.preis = preis;
    		this.anzahl = anzahl;		
    	}
    
    	function shop(artikel,preis)
    	{
    		var bestellmenge = 0;
    		if (localStorage.getItem("shop")== null) 
    		{
    			// Falls noch überhaupt kein Eintrag vorhanden: Objekte erzeugen
    			var bestellliste = new Array();
    			bestellmenge = 1;
    			bestellliste.push(new bestellung(artikel,preis,bestellmenge));
    		} else
    		{
    			// Ansonsten: Bestellliste laden
    			var bestellliste = JSON.parse(localStorage.getItem("shop"));
    			// und dann überprüfen ob Artikel schon vorhanden
    			var i = bestellliste.length -1;
    			while (i >=0)
    			{
    				if (artikel==bestellliste[i].name)
    				{
    					// Artikel vorhanden, also einfach nur Anzahl erhöhen!
    					bestellmenge = bestellliste[i].anzahl + 1;
    					bestellliste[i].anzahl = bestellmenge;
    				}
    				i = i-1;
    			}
    			// Artikel nicht vorhanden = Bestellmenge immer noch 0, also neu anlegen
    			if (bestellmenge==0)
    			{
    				bestellmenge = 1;
    				bestellliste.push(new bestellung(artikel,preis,bestellmenge));
    			}
    		}
    		
    		// Bestellliste abspeichern
    		localStorage.setItem("shop",JSON.stringify(bestellliste));
    
                    // zur Bestellliste springen
    		if (document.getElementById("bestellliste")) window.location.href = "{{link_url::{{page::alias}}}}#bestellliste";
    		
    		shopupdate();
    	}
    	
    	function shopupdate()
    	{
    		// Strings für die Ausgabe
    		var formular = "";
    		var tabelle = "<h3>Bestellliste</h3><table><tr><th>Anzahl</th><th>Artikel</th><th>Preis</th><th>Summe</th><th>Bearbeiten</th></tr>";
    		var gesamtpreis = 0;
    		
    		// Update nur, wenn Schlüssel in localStorage nicht leer ist
    		if (localStorage.getItem("shop")!= null)
    		{
    			var bestellliste = JSON.parse(localStorage.getItem("shop"));
    
    			// Daten sammeln
    			var i = 0;
    			while (bestellliste.length > i)
    			{
    				// Ausgabe im versteckten Formular
    				formular = formular +"\n" + bestellliste[i].anzahl + "x "+bestellliste[i].name + " (Einzelpreis: "+bestellliste[i].preis+"€) = "+bestellliste[i].preis*bestellliste[i].anzahl + "€";
    				
    				//Ausgabe in Tabelle
    				tabelle = tabelle + "<tr><td>"+bestellliste[i].anzahl + "x</td><td>"+bestellliste[i].name + "</td><td>"+bestellliste[i].preis+"€</td><td>"+bestellliste[i].preis*bestellliste[i].anzahl + "€</td><td><button onClick=\"pluseins("+i+")\" title=\"Anzahl ändern\">+1</button> <button onClick=\"minuseins("+i+")\" title=\"Anzahl ändern\">-1</button> <button onClick=\"artikelLoeschen("+i+")\" title=\"Artikel löschen\">löschen</button></td></tr>";
    				
    				//Gesamtpreis erhöhen
    				gesamtpreis = gesamtpreis + bestellliste[i].preis*bestellliste[i].anzahl;
    				i = i+1;
    			}
    		}
    		
    		//Gesamtpreis ergänzen
    		formular = formular +"\n=====\nGesamtpreis: " + gesamtpreis + "€";
    		tabelle = tabelle + "</table><p><b>Gesamtpreis: " + gesamtpreis + "€</b></p>";		
    		
    		// Ausgabe
    		if (document.getElementById("ctrl_XXX")) 
    		{
    			document.getElementById("ctrl_XXX").innerHTML = formular;
    			document.getElementById("ctrl_XXX").style.display = "none";
    		}	
    		if (document.getElementById("bestellliste")) document.getElementById("bestellliste").innerHTML = tabelle;
    	}
    	
    	function artikelLoeschen(artikelnr)
    	{
    		if (localStorage.getItem("shop")!= null)
    		{
    			var bestellliste = JSON.parse(localStorage.getItem("shop"));		
    			bestellliste.splice(artikelnr,1);
    			localStorage.setItem("shop",JSON.stringify(bestellliste));
    			shopupdate();
    		}
    	}
    	
    	
    	function pluseins(artikelnr)
    	{
    		if (localStorage.getItem("shop")!= null)
    		{
    			var bestellliste = JSON.parse(localStorage.getItem("shop"));
    			bestellliste[artikelnr].anzahl = bestellliste[artikelnr].anzahl +1;
    			localStorage.setItem("shop",JSON.stringify(bestellliste));
    			shopupdate();
    		}
    	}
    	
    	function minuseins(artikelnr)
    	{
    		if (localStorage.getItem("shop")!= null)
    		{
    			var bestellliste = JSON.parse(localStorage.getItem("shop"));
    			if (bestellliste[artikelnr].anzahl>1)
    			{
    				bestellliste[artikelnr].anzahl = bestellliste[artikelnr].anzahl -1;
    			}
    			localStorage.setItem("shop",JSON.stringify(bestellliste));
    			shopupdate();
    		}
    	}	
    	
    	// Ereignisbehandlung initialisieren
    	window.addEventListener("load", function()
    	{
    		shopupdate();
    	});
    	
    </script>

  10. #10
    Contao-Fan Avatar von Thraile
    Registriert seit
    17.12.2009.
    Ort
    Detmold
    Beiträge
    501
    Partner-ID
    6306

    Standard

    Und für alle, die das Notification-Center im Einsatz haben:

    Die E-Mail mit dem NC erstellen und für die variablen Werte Platzhalter einsetzen (##form_irgendwas##). Bevor die Mail abgesendet wird, hat mit mit dem Hook 'sendNotificationMessage' die Möglichkeit sämtiche Platzhalter noch einmal zu bearbeiten - hier hat man natürlich alle Formulardaten und Einstellungen im Zugriff.

    Siehe auch die Readme: https://github.com/terminal42/contao...EADME.md#hooks

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •