143 lines
4.2 KiB
Markdown
143 lines
4.2 KiB
Markdown
|
# Newsletter
|
||
|
|
||
|
Das Newsletter erlaubt den Druck und Versand von Inhalten zum Verein. Zu einem Newsletter können öffentliche Kalendereinträge hinzugefügt werden.
|
||
|
|
||
|
## Newsletter erstellen
|
||
|
|
||
|
Ein Newsletter besteht aus Titel und Zusammenfassung, um einen schnelleren Überblick in der Pagination zu erhalten.
|
||
|
|
||
|
Im Newsletter können Überschrift, Einleitung/Text und Signatur hinzugefügt werden.
|
||
|
Es können Daten ausgewählt werden, welche dann automatisch nach dem Text und vor der Signatur im Standard-Template angezeigt.
|
||
|
Und es können Empfänger über eine Vordefinierte Datenabfrage oder manuelles hinzufügen festgelegt werden.
|
||
|
Im Tab Druck und Versand wird eine Datei mit allen Hinzugefügten Kalendereinträgen angezeigt, wie auch alle erstellten pdfs wie auch eine pdf, die alle anderen pdfs enthält.
|
||
|
|
||
|
## Versand
|
||
|
In den Einstellungen kann festgelegt werden, welcher Kommunikationstyp wie versandt werden soll. Dies wird zusätzlich nochmals vor dem finalen Versand geprüft.
|
||
|
|
||
|
Es wird beim Druck unterschieden in Ausgaben mit und ohne Adresse. In der Fußzeile wird dann entweder nur der Name oder auch mit Adresse gedruckt.
|
||
|
|
||
|
Die Auswahl des Typs Mail versendet nur den Hauptteil des pdfs mit einer ics-Datei im Anhang.
|
||
|
|
||
|
## Template
|
||
|
Über die Templating-Engine können für den Newsletter abweichende Kopf- und Fußzeilen und ein abweichender Hauptteil festgelegt werden.
|
||
|
|
||
|
Ein Newsletter-Template erhält folgende Daten:
|
||
|
``` ts
|
||
|
// interface:
|
||
|
{
|
||
|
title: string;
|
||
|
description: string;
|
||
|
newsletterTitle: string;
|
||
|
newsletterText: string;
|
||
|
newsletterSignatur: string;
|
||
|
dates: Array<
|
||
|
{
|
||
|
title: string; // enthält alternativen Titel bzw. Titel des Kalendereintrags
|
||
|
content: string; // enthält alternative Beschreibung bzw. Beschreibung des Kalendereintrags
|
||
|
starttime: string;
|
||
|
endtime: string;
|
||
|
location: string;
|
||
|
formattedStarttime: string;
|
||
|
formattedFullStarttime: string;
|
||
|
formattedEndtime: string;
|
||
|
formattedFullEndtime: string;
|
||
|
}
|
||
|
>;
|
||
|
recipient: {
|
||
|
firstname: string;
|
||
|
lastname: string;
|
||
|
salutation: Salutation; // (sir | madam | divers | none)
|
||
|
nameaffix: string;
|
||
|
street: string;
|
||
|
streetNumber: string;
|
||
|
streetNumberAdd: string
|
||
|
};
|
||
|
}
|
||
|
|
||
|
// beispieldaten
|
||
|
|
||
|
{
|
||
|
title: "Beispiel Newsletter Daten",
|
||
|
description: "Zusammenfassung der Demodaten.",
|
||
|
newsletterTitle: "<h1>Sehr geehrtes Feuerwehrmitglied</h1>",
|
||
|
newsletterText: "<p>zu folgenden Terminen möchten wir recht herzlich zur Teilnahme einladen:</p>",
|
||
|
newsletterSignatur: "<p>Mit freundlichen Grüßen</p><p>...</p>",
|
||
|
dates: [
|
||
|
{
|
||
|
title: "Termin 1",
|
||
|
content: "<p>Beschreibung eines Termins</p>",
|
||
|
starttime: new Date(),
|
||
|
formattedStarttime: "Montag 20. Januar",
|
||
|
formattedFullStarttime: "Montag 20. Januar um 19:00",
|
||
|
endtime: new Date(),
|
||
|
formattedEndtime: "Montag 20. Januar",
|
||
|
formattedFullEndtime: "Montag 20. Januar um 21:00",
|
||
|
location: "Feuerwehrhaus",
|
||
|
},
|
||
|
],
|
||
|
recipient: {
|
||
|
firstname: "Julian",
|
||
|
lastname: "Krauser",
|
||
|
salutation: "sir",
|
||
|
nameaffix: "",
|
||
|
street: "Straße",
|
||
|
streetNumber: "Hausnummer",
|
||
|
streetNumberAdd: "Adresszusatz",
|
||
|
},
|
||
|
}
|
||
|
|
||
|
```
|
||
|
|
||
|
Das Template ist als HTML definiert und beinhaltet Platzhalter, welche durch `handlebarsjs` ausgetauscht werden.
|
||
|
``` html
|
||
|
<!-- Standard-Template -->
|
||
|
<!DOCTYPE html>
|
||
|
<html>
|
||
|
<head>
|
||
|
<meta charset="utf-8" />
|
||
|
<title>Newsletter</title>
|
||
|
</head>
|
||
|
<body>
|
||
|
<h1>{{{newsletterTitle}}}</h1>
|
||
|
<p>{{{newsletterText}}}</p>
|
||
|
<br />
|
||
|
{{#each dates}}
|
||
|
<div>
|
||
|
<h2><b>{{this.formattedStarttime}}: {{this.title}}</b></h2>
|
||
|
<span>{{{this.content}}}</span>
|
||
|
</div>
|
||
|
<br />
|
||
|
{{/each}}
|
||
|
<br />
|
||
|
<br />
|
||
|
<p>{{{newsletterSignatur}}}</p>
|
||
|
</body>
|
||
|
<style>
|
||
|
h2,
|
||
|
h3,
|
||
|
p,
|
||
|
span,
|
||
|
ul,
|
||
|
li {
|
||
|
padding: 0;
|
||
|
margin: 0;
|
||
|
}
|
||
|
|
||
|
h1,
|
||
|
h2 {
|
||
|
color: #990b00;
|
||
|
}
|
||
|
|
||
|
h2 {
|
||
|
margin-bottom: 5px;
|
||
|
}
|
||
|
</style>
|
||
|
</html>
|
||
|
|
||
|
<!--Footer Template-->
|
||
|
<div style="font-size: 10pt; width: 100%; margin: 0 20px; padding-top: 5px; color: #888; border-top: 0.5px solid black">
|
||
|
{{recipient.lastname}}, {{recipient.firstname}}{{#if recipient.street}},{{/if}} {{recipient.street}}
|
||
|
{{recipient.streetNumber}} {{recipient.streetNumberAdd}}
|
||
|
</div>
|
||
|
|
||
|
```
|