Variablen und Mehrfachnutzung über Websites

Variablen sind das, was aus einem Template ein Netz macht. Ist der Variablenentwurf richtig, rendern 100 Websites aus einer Quelle. Ist er falsch, kopieren Sie Text von Hand in jedes Preset.

Drei Quellen, ein gemeinsamer Geltungsbereich

Beim Rendern führen die meisten Engines Variablen aus drei Quellen in einer Nachschlagetabelle zusammen. Liest das Template %SomeName%, geht der Resolver diese Tabelle durch und setzt den Wert ein.

  1. Template-lokale Helfer, im Template-Rumpf mit #set oder #def deklariert.
  2. Website-Variablen, pro Mandant definiert — ein Datensatz pro Website, gemeinsam genutzt von allen Templates dieser Website.
  3. Runtime-Variablen, die dem Resolver beim Aufruf übergeben werden (Artikelkontext, Systemkontext, Nutzerkontext).

Die Entscheidungen beim Schreiben laufen darauf hinaus, welcher Ebene welcher Fakt gehört.

Template-lokale Helfer mit #set

Nehmen Sie #set für kurzlebige Helfer innerhalb eines Templates:

#set %Lead% = {Welcome|Greetings|Hello}
%Lead% to %brand_name%!

Gute Verwendung:

  • Helfer für ein einzelnes Template, die den Rumpf sonst mit Wiederholung zumüllen;
  • lange Phrasen, die im selben Template mehrfach vorkommen;
  • Lesbarkeit, wenn die Verschachtelung tief genug wird, um wehzutun.

Schlechte Verwendung:

  • mandantenspezifische Fakten — die gehören in Website-Variablen;
  • alles, was die Runtime ohnehin liefert — ein lokales #set verliert den Vorrangstreit.

Syntaxregeln, über die alle stolpern

  • Variablennamen sind nicht zwischen Groß- und Kleinschreibung unterscheidend.
  • Nur ASCII: Buchstaben, Ziffern, Unterstrich. Keine Leerzeichen, keine Bindestriche.
  • #set funktioniert nur am Zeilenanfang.
  • Kommentare stehen in /# ... #/ und werden vor der Verarbeitung entfernt.
  • Unbekannte Variablen bleiben wörtlich stehen. %MissingVar% rendert als %MissingVar%, nicht als leerer String und nicht als Fehler. Behandeln Sie Überbleibsel als QA-Fehler.

Website-Variablen — der Multiplikator

Website-Variablen sind der Grund, warum ein gemeinsames Template viele Websites bedienen kann, ohne auf jeder Domain gleich zu klingen.

Ein generisches Website-Preset sieht so aus:

#set %BrandTone% = {practical|no-nonsense|straightforward}
#set %Industry% = SaaS analytics
#set %TopFeatures% = [<minsize=3;maxsize=4;sep=", ";lastsep=" and ">dashboards|alerting|audit logs|SSO|role-based access]
#set %Audience% = {teams|product leads|operations}

Jedes gemeinsame Template kann jetzt %BrandTone%, %TopFeatures% und so weiter lesen, und die Ausgabe ändert sich pro Website, ohne dass jemand das Template anfasst.

Wann eine Website-Variable entsteht

SignalMaßnahme
Die Phrase taucht in 2+ Templates aufIn eine Website-Variable auslagern.
Der Fakt ändert sich pro WebsiteMuss eine Website-Variable sein.
Die Liste soll mischen oder pro Website abweichenWebsite-Variable mit einer Permutation darin.
Genau einmal in einem Template verwendetMeist inline lassen.

Runtime-Variablen

Runtime-Variablen kommen aus dem aufrufenden Kontext: dem gerenderten Artikel, der aktuellen Nutzerin, der Systemuhr. Sie überschreiben Website-Variablen und template-lokale Helfer gleichen Namens.

Übliche Runtime-Variablen (die Namen hängen von Ihrer Implementierung ab):

  • %year% — aktuelles Jahr
  • %lang% — aktueller Sprachcode
  • %site_domain% — Host der aktuellen Website
  • %brand_name%, %product_name% — Marke/Produkt, um das es im Artikel geht
  • %article_topic%, %category% — Metadaten auf Artikelebene

Aus einem Template heraus werden diese nie gesetzt. Lesen genügt.

Vorrang der Variablen

Existiert derselbe Name auf mehreren Ebenen, gewinnt die höchste Priorität. Eine übliche Reihenfolge, von stark nach schwach:

  1. Runtime-Variablen
  2. Website-Variablen
  3. Systemvariablen
  4. Template-lokales #set

Praktische Folge: #set %brand_name% = Demo im Template bewirkt nichts, wenn die Runtime %brand_name% liefert. Die Runtime gewinnt. Wählen Sie Helfernamen, die die Runtime nicht verdecken.

Namenskonventionen

Einheitlichkeit innerhalb eines Presets zählt mehr als ein bestimmter Stil. Trotzdem ein vernünftiger Standard:

  • Runtime-Variablen: meist lowercase_snake_case. Sie liegen außerhalb Ihrer Kontrolle.
  • Website-Variablen: PascalCase für normale Strings, PascalCaseMitSuffix für grammatische Varianten.
  • Listenvariablen: im Plural (%TopFeatures%, %SupportedLanguages%).
  • Lokale Helfer: kurz und sprechend — %Lead%, %Closing%.

Zusammengesetzte Variablen

Website-Variablen dürfen einander referenzieren. Der Preset-Resolver ersetzt die Verweise zwischen Variablen zuerst und lässt verschachteltes Spintax roh, damit spätere Neuwürfe weiter funktionieren:

#set %FoundedLine% = launched in %FoundedYear%, based in %HQ%
#set %Pitch% = {fast|lightweight|self-hosted} %ProductCategory%

Setzen Sie wiederkehrende Fakten einmal zusammen und nutzen Sie sie über Templates hinweg.

Die Neuwürfel-Falle

Das ist die mit Abstand häufigste Verwirrung am Anfang. Enthält eine Variable rohes Spintax, würfelt jedes Vorkommen unabhängig neu.

#set %Tone% = {safe|trusted}
%Tone% and %Tone%

Mögliche Ausgabe:

Safe and trusted

Gehen Sie nicht davon aus, dass eine #set-Variable einmal auflöst und danach nur noch echot. Brauchen Sie zwei verschiedene Adjektive, nehmen Sie zwei Variablen.

Wenn Sie exakte Wiederholung brauchen: #def

Die Regel oben gilt für #set, ein Makro. Das Geschwister #def hat dieselbe Form und tut das Gegenteil: Es löst seinen Wert einmal pro Render auf und gibt dasselbe Ergebnis an jede Referenz.

#def %Tone% = {safe|trusted|secure}

%Tone% and %Tone%

Jetzt stimmen beide Stellen immer überein — „safe and safe", „trusted and trusted" —, weil der Wurf einmal fiel, bevor irgendeine Referenz gefüllt wurde. Das ist der ganze Unterschied zwischen den beiden Direktiven; alles andere (zeilengebunden, eine pro Zeile, aus der Ausgabe entfernt, gleiche Namensregeln) ist identisch.

Greifen Sie zu #def, wenn ein Wert im Template stabil bleiben muss: eine Zahl, die einen {plural}-Block speist, ein aus einer Pluralform herausgezogenes Substantiv oder jede Phrase, die Sie bewusst wiederholen. Greifen Sie zu #set, wenn Sie die Variation wollen — im Fließtext der Normalfall.

Eine Einschränkung, die man deutlich sagen sollte: #def macht eine Variable mit sich selbst konsistent. Es koppelt nicht zwei verschiedene Variablen — jedes #def würfelt für sich, also können %Noun% und %NounGenitive% weiterhin auf verschiedenen Wörtern landen. Müssen zwei Werte miteinander übereinstimmen, binden Sie sie in eine einzige Aufzählung statt in zwei Variablen.

Optionale Fragmente

Ein leerer Zweig in einer Aufzählung ergibt ein optionales Fragment:

{|official }website
{fast|secure|} withdrawals

Setzen Sie das Leerzeichen in den optionalen Zweig, wenn das Fragment verschwinden kann, sonst bekommen Sie doppelte Leerzeichen oder verklebte Wörter. Für eine optionale Liste (eine Permutation, die leer sein darf) umschließen Sie die ganze Permutation:

{|[<minsize=2;maxsize=3;sep=", ";lastsep=" and ">Slack|Jira|Linear]}

Die Engine kann keine null Elemente aus einer Permutation wählen. Umschließen ist der einzige Weg, „gar keine Liste" möglich zu machen.

Trennzeichen-Kollisionen

Ein häufiger Renderfehler: Die Listenvariable enthält bereits ein and, und der umgebende Text setzt noch eines dazu.

%Integrations% and other tools

Löst %Integrations% zu Slack, Jira, and Linear auf, steht am Ende:

Slack, Jira, and Linear and other tools

Abhilfe:

  • ein Komma setzen: %Integrations%, and other tools;
  • umbauen: {Besides|Along with} %Integrations%, other tools...;
  • die abschließende Konjunktion streichen und Doppelpunkt oder Gedankenstrich nehmen.

Dasselbe passiert bei einer Permutation mit lastsep=" and ", auf die fester Text mit and folgt. Sehen Sie sich vor dem Ausliefern ein paar Varianten an.

Variablen oder Inline-Spintax

Variable nehmenInline-Spintax nehmen
Die Phrase wiederholt sich über Templates hinwegEinmaliges Synonym in einem Satz
Der Fakt ändert sich pro WebsiteGenerisches Verb- oder Substantivsynonym
Die Liste soll pro Mandant abweichenKleine, feste, einmalige Liste
Die grammatische Form braucht mehrere Schreibungen (siehe russische KasusEN im Grammatik-Leitfaden)Wort steht nur in einer grammatischen Position

Faustregel: Ziehen Sie wiederholte, grammatisch heikle Phrasen in Variablen, bevor Sie kleine Inline-Synonymlücken einbauen. Die Variable gibt Ihnen eine Stelle, an der Fehler zu beheben sind. Inline verteilt sie.

Häufige Fehler mit Variablen

Nicht soWarumStattdessen
Einen Mandantenfakt fest ins gemeinsame Template schreibenAlle Websites geben denselben Text aus, die Mehrfachnutzung ist dahin.Den Fakt in eine Website-Variable verschieben.
#set nehmen, um eine Runtime-Variable zu überschreibenDie Runtime gewinnt immer, Ihre Überschreibung tut still nichts.Den Helfer umbenennen, damit er den Runtime-Namen nicht verdeckt.
Annehmen, %X% ... %X% wiederhole dasselbe WortJedes Vorkommen würfelt neu. Sie können zwei verschiedene Wörter bekommen.Den Satz umschreiben oder zwei verschiedene Variablen nehmen.
Annehmen, fehlende Variablen würfen einen FehlerSie rendern wörtlich als %MissingVar%.Einen Preview-Durchgang einbauen, der übrig gebliebene %...% meldet.
Eine Listenvariable mit einem weiteren „and" verkettenErgibt „A, B, and C and other things".Komma setzen oder umbauen.
Das Leerzeichen im optionalen Fragment vergessenErgibt doppelte Leerzeichen oder verklebte Wörter.Das Leerzeichen in den optionalen Zweig setzen.

Checkliste für den Variablenentwurf

  • Jeder mandantenspezifische Fakt lebt in einer Website-Variablen, nicht im gemeinsamen Template.
  • Jeder artikelspezifische Fakt lebt in einer Runtime-Variablen, nicht in einem #set.
  • Kein #set-Helfername verdeckt eine Runtime-Variable.
  • Variablennamen sind ASCII, ohne Leerzeichen und ohne Bindestriche.
  • Jede wiederholte Variable wurde auf den Neuwürfel-Effekt geprüft.
  • Jedes optionale Fragment regelt seine Leerzeichen innerhalb des Zweigs.
  • Jede Listenvariable mit folgender Konjunktion wurde auf Trennzeichen-Kollision geprüft.
  • Fünf aufgelöste Muster enthalten kein übrig gebliebenes %...%.

Bereit für die Struktur? Der nächste Leitfaden behandelt Permutationen in der Praxis — dort steckt die eigentliche Vielfalt.


Serie fortsetzen