From 365158c43b0e3521885772ea8561e80fc4eaa226 Mon Sep 17 00:00:00 2001 From: s4luorth Date: Fri, 11 Sep 2026 20:55:32 +0200 Subject: [PATCH] =?UTF-8?q?Manueller=20Druck:=20Textvorlage=20=C3=BCbersch?= =?UTF-8?q?reibt=20Inhalt;=20Zeile1=E2=80=935=20als=20Platzhalter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Mustertext-Auswahl ersetzt den bisherigen Brieftext (statt anzuhängen). - Vorschau: [[Zeile1]]..[[Zeile5]] aus den 5 Adresszeilen verfügbar; Tipp im UI. Co-Authored-By: Claude Opus 4.8 --- .../dist/index.js | 6 ++-- .../dist/index.js | 32 +++++++++++-------- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/extensions/directus-extension-skrift-neuauftrag/dist/index.js b/extensions/directus-extension-skrift-neuauftrag/dist/index.js index 0b8ab82..ab06ea3 100644 --- a/extensions/directus-extension-skrift-neuauftrag/dist/index.js +++ b/extensions/directus-extension-skrift-neuauftrag/dist/index.js @@ -420,7 +420,8 @@ const NeuAuftrag = defineComponent({ if (wert === 'du' || wert === 'sie') t = wert === 'du' ? musterTexte.value.text_du : musterTexte.value.text_sie; else t = (musterListe.value.find((m) => String(m.id) === String(wert)) || {}).text || ''; if (!t) return; - neu.text = neu.text.trim() ? `${neu.text}\n\n${t}` : t; + // Vorlage ersetzt den bisherigen Inhalt (nicht anhängen). + neu.text = t; neu.previewSession = null; }; @@ -607,7 +608,8 @@ const NeuAuftrag = defineComponent({ requestAnimationFrame(() => { try { ta.selectionStart = ta.selectionEnd = s + 1; } catch {} }); } }), h('div', { style: 'font-size:11px;color:var(--foreground-subdued,#888);margin-top:4px;line-height:1.5;' }, - 'Tipp: [[seitenumbruch]] erzwingt an dieser Stelle eine neue Seite (mehrseitiger Brief). [[signatur1]] setzt die Unterschrift.'), + 'Tipp: [[seitenumbruch]] erzwingt an dieser Stelle eine neue Seite (mehrseitiger Brief). [[signatur1]] setzt die Unterschrift. ' + + 'Platzhalter: [[Vorname]], [[Nachname]], [[Anrede]], [[Strasse]], [[PLZ]], [[Ort]] – im 5-Zeilen-Modus außerdem [[Zeile1]]…[[Zeile5]].'), // ── Unterschrift auf den Brief ───────────────────────────────────── h('div', { style: 'margin-top:16px;border-top:1px solid rgba(30,80,165,.15);padding-top:14px;' }, [ label('Unterschrift auf den Brief (optional) · Platzhalter [[signatur1]]'), diff --git a/extensions/directus-extension-skrift-orders/dist/index.js b/extensions/directus-extension-skrift-orders/dist/index.js index 72660e1..627c8ec 100644 --- a/extensions/directus-extension-skrift-orders/dist/index.js +++ b/extensions/directus-extension-skrift-orders/dist/index.js @@ -691,19 +691,25 @@ const handler = (router, { services, getSchema, logger }) => { filter: { key: { _eq: briefFormat } }, limit: 1, fields: ['kind'], }))?.[0]?.kind === 'postkarte'; - const platzhalterVon = (e, i) => ({ - Anrede: clean(e.salutation || ''), - Vorname: clean(e.first_name || ''), - Nachname: clean(e.last_name || ''), - Strasse: clean([e.street, e.house_no].filter(Boolean).join(' ')), - PLZ: clean(e.zip || ''), - Ort: clean(e.city || ''), - Land: clean(e.country || ''), - Briefnummer: String(i + 1), - ...(e.placeholders && typeof e.placeholders === 'object' - ? Object.fromEntries(Object.entries(e.placeholders).map(([k, v]) => [k, clean(String(v))])) - : {}), - }); + const platzhalterVon = (e, i) => { + // 5 Adresszeilen (5-Zeilen-Modus) auch als [[Zeile1]]..[[Zeile5]]. + const zeilen = String(e.free_text || '').split('\n'); + return { + Anrede: clean(e.salutation || ''), + Vorname: clean(e.first_name || ''), + Nachname: clean(e.last_name || ''), + Strasse: clean([e.street, e.house_no].filter(Boolean).join(' ')), + PLZ: clean(e.zip || ''), + Ort: clean(e.city || ''), + Land: clean(e.country || ''), + Briefnummer: String(i + 1), + Zeile1: clean(zeilen[0] || ''), Zeile2: clean(zeilen[1] || ''), Zeile3: clean(zeilen[2] || ''), + Zeile4: clean(zeilen[3] || ''), Zeile5: clean(zeilen[4] || ''), + ...(e.placeholders && typeof e.placeholders === 'object' + ? Object.fromEntries(Object.entries(e.placeholders).map(([k, v]) => [k, clean(String(v))])) + : {}), + }; + }; const adressBlock = (e) => { if (e.free_text) return clean(String(e.free_text));