Visuelle Inhaltsfragmente - Vorlagen visual-content-fragments-templates
In Adobe Experience Manager (AEM) as a Cloud Service können HTML-Vorlagen verwendet werden, um Inhaltsfragmente zu visualisieren und im HTML-Format bereitzustellen.
Mit HTML-Vorlagen können Sie steuern, wie Ihre Inhaltsfragmente angezeigt werden. Sie können HTML-Vorlagen in Ihrem Codeeditor erstellen und diese dann hochladen und Inhaltsfragmentmodellen in AEM zuweisen. Platzhalter für Inhalte mit Handlebars.js ermöglichen die Zuordnung der Vorlage zu Datentypen im Inhaltsfragmentmodell. Sobald eine Vorlage einem Modell zugewiesen wurde, kann sie mit jedem auf dem Modell basierenden Inhaltsfragment verwendet werden, um das Fragment zu visualisieren oder als modulares Erlebnis im HTML-Format für jeden Kanal bereitzustellen, z. B. Web, E-Mail, Mobile App oder andere.
In diesem Artikel wird erläutert, wie Sie benutzerdefinierte HTML-Vorlagen mit Handlebars-Syntax zum Rendern visueller Inhaltsfragmente erstellen.
Nach der Erstellung der Vorlagen haben Sie folgende Möglichkeiten:
Was Sie lernen werden what-you-will-learn
Nach einer (sehr kurzen) Einführung in:
- Verwenden Ihrer Vorlagen in AEM
- Verwenden der Veröffentlichungs-URL
Auf dieser Seite wird Folgendes behandelt (detaillierter):
- Handlebars - die erforderlichen Grundlagen der Syntax
- Zugreifen auf Inhaltsfragmentdaten
- Arbeiten mit verschachtelten Inhaltsfragmenten
- Umgang mit Feldern mit mehreren Werten
- Erstellen von Schleifen und bedingter Logik
- Best Practices für den Vorlagenentwurf für Inhaltsfragmente
Voraussetzungen prerequisites
Um die hier behandelten Technologien zu verstehen und mit ihnen zu arbeiten, benötigen Sie Folgendes:
- Grundlegende Informationen zu HTML
- Vertrautheit mit AEM-Inhaltsfragmenten und Inhaltsfragmentmodellen
- Grundlegendes zu Ihren Inhaltsfragmentmodellen
Verwenden einer HTML-Vorlage für Inhaltsfragmente using-a-content-fragment-html-template
Verwenden einer HTML-Vorlage für Inhaltsfragmente in AEM using-a-content-fragment-html-template-in-aem
Weitere Informationen zur Verwendung Ihrer Vorlage in AEM finden Sie unter:
Verwenden der Veröffentlichungs-URL für visuelle Inhaltsfragmente using-the-visual-content-fragment-publish-url
Nachdem Sie visuelle Inhaltsfragmente mithilfe der Vorlage erstellt haben, können Sie die Veröffentlichungs-URL Ihrer visuellen Inhaltsfragmente“ .
Handlebars - die (sehr) Grundlagen handlebars-the-very-basics
Handlebars ist eine einfache Vorlagensprache, die geschweifte Klammern ({{ }}) verwendet, um dynamische Inhalte in HTML einzufügen.
Grundlegende Syntax basic-syntax
Ein Beispiel für die grundlegende Handlebars-Syntax:
Wichtige Konzepte key-concepts
Die wichtigsten Konzepte von Handlebars:
{{ }}{{{ }}}{{! }}{{{ }}}) für Feldwerte, da Werte vorab in HTML gerendert werden.Kontextreferenz zur Vorlage template-context-reference
Wenn die Vorlage gerendert wird, erhält sie ein Kontextobjekt, das alle Daten zu Ihrem Inhaltsfragment enthält. Dies umfasst Folgendes:
-
Das ausgewählte Fragment
-
Alle weiteren Fragmente, auf die von diesem ausgewählten Fragment verwiesen wird
note NOTE Fragmente können referenziert werden: - in der Benutzeroberfläche: bis zur maximalen Tiefe von 5
- Bei Verwendung der API: Die Tiefe kann konfiguriert werden, bis zur maximalen Tiefe von 10
Hauptinhaltsfragment main-content-fragment
Die Struktur des Kontextobjekts für das (ausgewählte) Inhaltsfragment:
fieldsallFields{name, value} für die IterationhasFieldstrue, ob das Fragment Felder enthältEigenschaftenstruktur (Haupt- und referenzierte Fragmente) properties-structure-main-and-referenced-fragments
Das properties-Objekt hat für das ausgewählte Fragment und für jedes referenzierte Fragment dieselbe Struktur.
idtitledescriptionpath/content/dam/...hasDescriptiontruecreatedDatemodifiedDatepublishedDatestatusDRAFTmodelid, path, name, technicalName, descriptionvalidationStatus{property, message}previewReplicationStatustagsid, title, titlePath, name, path, descriptionfieldTagstags.Beispiele: Vorlagenzugriff
Für das (ausgewählte) Inhaltsfragment:
Referenzierte Inhaltsfragmente referenced-content-fragments
Die Struktur des Kontextobjekts für alle referenzierten Fragmente:
hasReferencedFragmentstrue, wenn Verweise vorhanden sindreferencedFragmentsreferencesErrortrue, ob beim Laden von Verweisen ein Fehler aufgetreten istreferencesErrorMessagereferencesError true istFragmentstruktur, auf die verwiesen wird referenced-fragment-structure
Jedes Element in referencedFragments enthält:
anchorIdpropertieshasFieldsfieldsallFields{name, value} für die IterationBeispiele: Vorlagenzugriff für das erste referenzierte Inhaltsfragment (erstes Element in der 0-indizierten Liste):
Oder aus der Feldzuordnung:
Metadatenstruktur für Inhaltsfragmente content-fragment-metadata-structure
Die Metadaten eines Fragments - der Metadaten-/Feldblock, der durch sein Metadatenschema unterstützt wird - werden unter metadata angezeigt. Sie unterscheidet sich von properties, das die Strukturwerte enthält (title, description, path, tags, dates, status).
metadatametadata Ausdrücke leer anstatt fehlerhaft dargestellt werden.metadata.schemaIddefault wenn keine gefunden wirdmetadata.valuesmetadata.fieldsname, type (Zeichenfolge, Ganzzahl, Zahl, boolescher Wert, Array, Objekt), value und title (von Menschen lesbare Bezeichnung aus dem Schema)metadata.values JSON-Typen speichert, funktioniert eine Zahl oder ein boolescher Wert, der von dort gelesen wird, direkt mit dem Vergleichsassistenten und dem booleschen Helper, im Gegensatz zu einem skalaren Feld, das die Vorlage erreicht, die als Zeichenfolge vorgerendert wird. Siehe auch Vergleichs- und boolesche Logik-Helfer.Asset-Feldstruktur asset-field-structure
Referenzierte Assets sind keine Sammlung der obersten Ebene, es gibt keine referencedAssets. Ein Asset wird über das Feld erreicht, in dem es sich befindet bzw. in dem es sich fields.<assetField> oder fields.<ref>.fields.<assetField> für ein Asset befindet, auf das in einem referenzierten Fragment verwiesen wird.
Ein Asset-Feldwert ist von doppelter Natur. Roh gedruckt ist das vorgerenderte Asset HTML, das die Metadaten des Assets unter properties anzeigt.
<img> für ein Bild).Erfordert dreifache Klammern:
{{{fields.heroImage}}}propertiesEin Asset-Feld mit mehreren Werten ist eine Liste. Iterieren Sie mit {{#each fields.gallery}}, indem Sie {{{this}}} für die HTML und {{this.properties.assetId}} für Metadaten verwenden.
Eigenschaften eines lokalen DAM-Assets properties-of-a-local-dam-asset
Diese Schlüssel werden von der Inhaltsfragmentantwort übernommen und sind immer verfügbar:
assetIdurn:aaid:aem:1fb05fe4-...path/content/dam/wknd/ian_provo.jpgnameian_provo.jpgtitledescriptiontypeassetassetfieldNameprofilePicturestatusNEW, DRAFT, PUBLISHED, MODIFIED, UNPUBLISHEDDRAFTpreviewReplicationStatusPUBLISHED, UNPUBLISHED, MODIFIED, NEVER_PUBLISHEDcreated, modified, publishedat (ISO-8601), by, fullName, firstName, lastNamedc:formatimage/jpegrepo:size251434tiff:ImageWidth1152tiff:ImageHeight1152yournamespace:persistentID. Aus dem Asset bei Bedarf abgerufenEigenschaftsnamen, die einen Doppelpunkt enthalten, erfordern eine Klammersyntax:
Eigenschaften eines Dynamic Media-Assets properties-of-a-dynamic-media-asset
Ein Dynamic Media-Asset (remote) weist keinen DAM-Pfad auf. Nur zwei Schlüssel sind inline:
repositorydelivery-p12345-e67890.adobeaemcloud.comassetIdurn:aaid:aem:1fb05fe4-...Zusammen reichen diese Werte aus, um eine Bereitstellungs-URL für Dynamic Media zu erstellen, anstatt das eingebettete Bild zu verwenden. Jede andere Eigenschaft wird aus dem eigenen Bereitstellungs-Host des Assets abgerufen. Dort werden nur genehmigte (veröffentlichte) Assets bereitgestellt, sodass ein nicht genehmigtes Dynamic Media-Asset nichts über diese beiden Schlüssel hinaus auflöst.
this.properties.<key> und nicht eine bloße properties.<key>. Ein leerer Pfad, dessen Schlüssel auch eine Inhaltsfragment-Eigenschaft ist, z. B. title, description, path oder status, wird gegen das Fragment und nicht gegen das Asset aufgelöst.Grundlegender Feldzugriff basic-field-access
Der direkte Feldzugriff wird empfohlen. Bei Bedarf können Sie alle Felder durchlaufen.
Direkter Feldzugriff (empfohlen) direct-field-access-recommended
Greifen Sie mithilfe der Feldzuordnung direkt nach Namen auf Felder zu:
Denken Sie daran:
- Verwenden Sie dreifache Klammern
{{{ }}}für Feldwerte, wenn sie vorab gerenderten HTML (Rich-Text) enthalten - Feldnamen (Titel, Untertitel, Beschreibung, primaryImage) müssen genau mit Ihrem Inhaltsfragmentmodell exakt
- Fehlende Felder werden nicht gerendert - es werden keine Fehler ausgegeben und die Handlebars-Syntax bleibt im gerenderten HTML-Fragment vorhanden (und sichtbar)
Iteration aller Felder iterate-through-all-fields
Verwenden Sie allFields, wenn Sie die Feldnamen nicht im Voraus kennen:
Denken Sie daran:
{{name}}verwendet doppelte geschweifte Klammern (Nur-Text-Beschriftung){{{value}}}verwendet dreifache geschweifte Klammern (vorab gerenderter HTML-Wert)
Verschachtelte Inhaltsfragmente nested-content-fragments
Wenn ein Inhaltsfragmentfeld auf ein anderes Inhaltsfragment verweist, können Sie Punktnotation verwenden, um direkt auf Felder im referenzierten Fragment zuzugreifen.
Verschachtelung auf einer Ebene single-level-nesting
Ein Beispiel für die Verschachtelung auf einer Ebene:
Muster: fields.referenceFieldName.nestedFieldName
Verschachtelung mehrerer Ebenen multi-level-nesting
Das System unterstützt eine unbegrenzte Verschachtelungstiefe:
Muster: fields.level1.level2.level3.fieldName (begrenzte Tiefe; Standard ist 5, kann auf 10 erweitert werden, wenn die API verwendet wird)
API-Parameteranforderung: Hydratation api-parameter-requirements
Um den Zugriff auf verschachtelte Inhaltsfragmente zu aktivieren, müssen Sie den hydration Abfrageparameter in Ihren API-Aufruf einbeziehen:
So aktivieren Sie die Hydratation:
# Enable hydration with depth=2 for 2 levels of nesting
GET /adobe/sites/cf/fragments/{id}/preview?hydration=%7B%22enabled%22%3Atrue%2C%22maxDepth%22%3A2%7D
maxDepth123+Felder mit mehreren Werten multi-valued-fields
Es gibt mehrere Arten von Feldern mit mehreren Werten.
Textfelder mit mehreren Werten multi-valued-text-fields
Text, Zahl, Datum und andere einfache Felder werden bei mehreren Werten zu Arrays:
Denken Sie daran, beim Zugriff auf Array-Elemente nach Index in Handlebars:
- Verwenden Sie:
.[0](Punkt vor Klammer)
- Nicht:
[0]
Zahlenfelder mit mehreren Werten multi-valued-number-fields
Zahlen werden zur in umgewandelt:
Verweise auf Inhaltsfragmente mit mehreren Werten multi-valued-content-fragment-references
Wenn ein Feld auf mehrere Inhaltsfragmente verweist:
Verweise auf Assets mit mehreren Werten multi-valued-asset-references
Inhaltsreferenz Felder, die für Inhaltstypen konfiguriert sind, bei denen es sich um Assets handelt (z. B. Bilder und Dokumente), werden vorab als HTML gerendert. Assets mit mehreren Werten werden zu Arrays:
Verschachtelte Verweise mit mehreren Werten nested-multi-valued-references
Verweise mit mehreren Werten können Verweise mit mehreren Werten in jeder Tiefe enthalten:
Schleifen und Iteration loops-and-iteration
Handlebars stellt den {{#each}} Helper für die Iteration über Arrays und Objekte bereit.
Iteration über Arrays iterating-over-arrays
Beispiel für die Iteration über Arrays:
Spezielle Variablen in Schleifen special-variables-in-loops
Innerhalb {{#each}} Blöcke stellt Handlebars spezielle Variablen bereit:
Iteration über referenzierte Fragmente iterating-over-referenced-fragments
Ein Beispiel für die Iteration über referenzierte Fragmente:
Verschachtelte Schleifen nested-loops
Beispiel für verschachtelte Schleifen:
Bedingtes Rendering conditional-rendering
Verwenden Sie Bedingungen, um Inhalte je nach Verfügbarkeit der Daten ein- oder auszublenden.
Basic IF/Else basic-if-else
Beispiel für ein einfaches If-Else-Konstrukt:
Außer (negativ bedingt) unless-negative-conditional
Ein unless Helper:
hideAuthor ein echter boolescher Wert ist, z. B. aus metadata.values.*. Ein boolesches Feld mit einem Wert wird jedoch vorab als "true" oder "false" gerendert und "false" ist eine nicht leere (wahre) Zeichenfolge - {{#unless fields.hideAuthor}} blendet den Autor aus, selbst wenn das Feld false wird. Vergleichen Sie stattdessen explizit das Skalarfeld, z. B. {{#if (eq fields.hideAuthor "true")}}. Siehe auch Vergleichs- und boolesche Logik-Helfer.Verschachtelte Bedingungen nested-conditials
Ein Beispiel für verschachtelte bedingte Regeln:
Vergleich und boolesche Logik - Helper comparison-and-boolean-logic-helpers
Zusätzlich zu den {{#if}}- und {{#unless}}-Helfern registriert der Service Vergleichs- und boolesche Helper, damit eine Vorlage bedingt anhand von Feldwerten gerendert werden kann. Sowohl Vergleichs- als auch boolesche Helper funktionieren als Block und als Inline-Unterausdruck:
Numerischer Vergleich mit Feldern mit einem Wert numeric-comparison-on-single-valued-fields
Ein Feld mit einem Wert wird vorab als Zeichenfolge gerendert (fields.quantity is "7", nicht 7), aber die Helper erzwingen eine numerische Zeichenfolge zum Vergleichszeitpunkt, sodass {{#gte fields.quantity 5}} und {{#eq fields.quantity 0}} als Zahlen verglichen werden - neben {{#gte metadata.values.quantity 5}}, bei denen der Wert bereits eingegeben wurde. Die Sortierung (gt/gte/lt/lte) wird immer numerisch verglichen. Gleichheit zwingt mit Absicht: Ein Zeichenfolgenfeld vergleicht die Werte nur dann als Zahl, wenn der andere Operand eine echte Zahl ist - ein numerisches Literal ({{#eq fields.qty 0}}) oder ein eingegebenes Feld wie metadata.values.*. Beim Vergleich von zwei Zeichenfolgenfeldern oder einem in Anführungszeichen gesetzten Literal ({{#eq fields.version "1.0"}}) wird die exakte Zeichenfolgengleichheit gewahrt, sodass als Text modellierte Versionen, Postleitzahlen und IDs nie reduziert werden ("007" entspricht nicht "7"). Datumsangaben überschneiden sich als ISO-8601-Zeichenfolgen, sodass eq/neq sie durch exakte Zeichenfolgen-Gleichheit vergleichen und die Ordnungshelfer sie als nicht numerisch ablehnen. Ein fehlender, leerer oder nicht numerischer Operand wird als „Bedingung nicht erfüllt“ behandelt und rendert die else Verzweigung anstatt eines Fehlers.
Boolesche Helfer verwenden einfache Wahrhaftigkeit (keine Nötigung) boolean-helpers-use-plain-truthiness-no-coercion
Die booleschen Helper and/or/not erzwingen nicht - sie wenden eine Stock-Handlebars-Richtigkeit an, bei der eine nicht leere Zeichenfolge wahr ist (falsche Werte sind false, null, undefined, 0, "", []). Ein boolesches Feld mit einem einzigen Wert kommt als "true" oder "false" an und "false" ist eine nicht leere Zeichenfolge, sodass {{#not fields.flag}} einen wahren Wert sieht und die Verzweigung Sonst nimmt, selbst wenn das Feld „false“ liest. Vergleichen Sie ein skalares boolesches Feld explizit ({{#eq fields.flag "true"}}), anstatt es an and/or/not zu übergeben. Ein boolesches Auslesen aus metadata.values.* ist bereits typisiert und funktioniert direkt mit den booleschen Helfern.
Nach einem Helper benannte Felder fields-named-after-a-helper
Die globale Registrierung dieser Helper beansprucht ihre Namen, aber ein Feld mit dem Namen nach einem rendert dennoch seinen eigenen Wert, wenn es ohne Argumente gelesen wird: {{eq}} in {{#with fields}} druckt den Text des eq-Felds, kein Vergleichsergebnis. Die Helper sind sowohl in der Visualisierungsvorlage als auch in Handlebars verfügbar, die in einen Inhaltsfragmentfeldwert eingebettet sind.
Integrierte Handlebars-Helfer built-in-handlebars-helpers
Handlebars umfasst mehrere integrierte Helper, die über {{#if}} und {{#each}} hinausgehen.
{{#if condition}}false, undefined, null, 0, "", []{{#unless condition}}#if){{#each array}}{{else}} für leere Arrays{{#with object}}{{lookup this "key"}}Mit Helper with-helper
Erstellt einen neuen Bereich für verschachtelte Objekte, um Präfixe für sich wiederholende Pfade zu reduzieren:
Erweiterte Muster advanced-patterns
Es folgen einige Beispiele für erweiterte Muster.
Zugreifen auf den übergeordneten Kontext in verschachtelten Schleifen accessing-parent-context-in-nested-loops
Verwenden Sie ../ , um innerhalb einer verschachtelten Schleife auf den übergeordneten Bereich zuzugreifen:
Dynamische CSS-Klassen dynamic-css-classes
Beispiel für dynamische CSS-Klassen:
Vollständige Beispiele complete-examples
Mehrere vollständige Beispiele sind als Referenz angegeben.
Blogpost mit Autor
Ein Blogpost mit Autorendetails:
Erforderlicher API-Aufruf:
GET /adobe/sites/cf/fragments/{id}/preview?hydration=%7B%22enabled%22%3Atrue%2C%22maxDepth%22%3A1%7D
Allgemeine Tabellenansicht (keine Vorkenntnisse in Feldern) generic-table-view-no-prior-knowledge-of-fields
Eine allgemeine Tabellenansicht ohne inhärente Feldkenntnisse. Die ähnelt der Generische Vorlage:
Best Practices best-practices
Zu den Best Practices gehören:
-
Verwenden Sie immer dreifache Klammern für Feldwerte, die HTML-Markup-Inhalte enthalten.
-
Feldwerte werden in HTML vorab gerendert.
note NOTE Doppelte Klammern zeigen unformatierte HTML-Tags als Nur-Text-Text an.
code language-handlebars <!-- CORRECT --> {{{fields.description}}} <!-- WRONG - displays HTML tags as text --> {{fields.description}} -
-
Prüfen Sie das Vorhandensein, bevor Sie auf verschachtelte Felder zugreifen.
code language-handlebars <!-- GOOD: check before accessing nested fields --> {{#if fields.author}} <p>By {{{fields.author.name}}}</p> {{/if}} <!-- RISKY: may render empty if author is not set --> <p>By {{{fields.author.name}}}</p> -
Verwenden Sie nach Möglichkeit den direkten Feldzugriff.
- Es ist leichter lesbar und verwaltbar als das Iterieren von
allFieldsund Übereinstimmungen mit dem Namen.
- Es ist leichter lesbar und verwaltbar als das Iterieren von
-
Strukturvorlagen mit Abschnittskommentaren.
code language-handlebars {{! ===== HEADER SECTION ===== }} <header> <h1>{{properties.title}}</h1> </header> {{! ===== MAIN CONTENT ===== }} <main> {{#if hasFields}} <!-- fields rendering --> {{/if}} </main> {{! ===== REFERENCES ===== }} {{#if hasReferencedFragments}} <!-- references rendering --> {{/if}} -
Verarbeiten Sie fehlende Daten mit Fallbacks.
code language-handlebars {{#if fields.title}} <h1>{{{fields.title}}}</h1> {{snippet-not-found:else}} <h1>Untitled</h1> {{/if}} -
Verwenden Sie immer eine ordnungsgemäße HTML-Dokumentstruktur.
code language-handlebars <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>{{properties.title}}</title> </head> <body> <!-- your content here --> </body> </html> -
Testen mit einer Vielzahl von Inhaltsszenarien:
- Alle Felder vollständig ausgefüllt
- Optionale Felder fehlen
- Leere Felder mit mehreren Werten
- Tiefe Verschachtelung (mehrere Ebenen)
- Verweise, die nicht geladen werden können
-
Verwenden semantischer HTML-Elemente:
- Verwenden Sie für eine bessere Barrierefreiheit
<article>,<header>,<main>,<footer>,<time>,<address>oder Ähnliches.
- Verwenden Sie für eine bessere Barrierefreiheit
-
Beibehalten von Stilen in CSS.
- Verwenden Sie
<style>Tags oder externe Stylesheets. - Inline-Stile sollten nach Möglichkeit vermieden werden.
- Verwenden Sie
-
Komplexe Logik von Dokumenten:
- Verwenden Sie Handlebars-Kommentare
({{! }}). - Verwenden Sie keine HTML-Kommentare, die in der gerenderten Ausgabe angezeigt werden.
- Verwenden Sie Handlebars-Kommentare
Fehlerbehebung troubleshooting
Einige Hinweise zur Fehlerbehebung:
<p>Hello World</p> wörtlich angezeigt{{{fields.description}}}{{{fields.author.name}}} ist leermaxDepth tief genug ist{{#each fields.tags}} verwenden, um alle Elemente zu iterieren{{{fields.tags[0]}}} wird leer dargestellt{{{fields.tags.[0]}}}hasReferencedFragments ist immer „false“?hydration=%7B%22enabled%22%3Atrue%7D; auch {{#if referencesError}} überprüfen{{#if}} oder {{#each}} prüfen; Diagnoseausgabe hinzufügen: <pre>hasFields: {{hasFields}} | title: {{properties.title}}</pre>{{! comment }} anstelle von HTML <!-- comment -->{{#if fields.enabled}} ist immer wahr"false" ist in Handlebars wahr. Nur tatsächliche false, null, undefined, 0, "" und [] sind falsch.<, & anstelle von < angezeigt, &{{{fields.content}}}#each ist nicht definiert../ für übergeordneten Bereich verwenden: {{{../name}}}; ../../ für übergeordnete Elemente verwenden{{else}} in {{#each}} verwenden: {{#each fields.tags}}...{{else}}<p>No tags</p>{{/each}}Arbeiten mit Assets working-with-assets
Assets, auf die von Inhaltsfragmenten verwiesen wird, wird von AEM vorab als HTML gerendert. Daher sind dreifache Klammern für alle Asset-Verweise obligatorisch.
<img src="..." alt="..."><video><a href="...">Denken Sie daran:
- Verwenden Sie immer dreifache Klammern für Asset-Felder.
Bei Verwendung doppelter Klammern wird das generierte HTML-Tag mit Escape-Zeichen versehen und als Rohtext angezeigt, anstatt das Bild, Video oder den Link zu rendern.
Nutzung der Asset-Felder asset-field-usage
Beispiel für die Verwendung von Asset-Feldern:
Helper für benutzerdefinierte Vorlagen customer-template-helpers
Das System stellt benutzerdefinierte Handlebars-Helper zum Generieren von HTML-Elementen mit benutzerdefinierten HTML-Attributen bereit. Diese Helper geben Ihnen die Kontrolle über das generierte Markup und bewältigen gleichzeitig die Komplexität des Extrahierens von Quell-URLs aus vorgerenderten Inhalten.
Verfügbare Helper:
asset- Generiert<img>-Tags mit benutzerdefinierten Attributentext- Erzeugt<span>Tags, die Textinhalte mit benutzerdefinierten Attributen umschließen
asset Helper asset-helper
Syntax:
Denken Sie daran:
- Verwenden Sie mit dem Asset-Helper
{{{ }}}dreifache Klammern, keine doppelten Klammern!
Vier grundlegende Beispiele four-basic-examples
Vier grundlegende Beispiele sind:
Unterstützte Attribute supported-attributes
Sie können jedes gültige HTML-Attribut hinzufügen:
classclass="my-class another-class"idid="unique-id"altalt="Custom alt text" (overrides existing alt)data-*data-index="1" data-type="hero"aria-*aria-label="Description" aria-hidden="true"widthwidth="300"heightheight="200"loadingloading="lazy"stylestyle="border-radius: 8px;"Alt-Text überschreiben override-alt-text
Das alt-Attribut aus dem Originalbild kann überschrieben werden:
Komplexes Beispiel complex-example
Ein komplexes Beispiel:
Verwenden von mit Schleifen using-with-loops
Asset Helper in Schleifen:
text Helper text-helper
Der Text-Helper generiert einen <span> Tag, der Textinhalte mit benutzerdefinierten CSS-Klassen und HTML-Attributen umschließt. Nützlich für die Gestaltung einzelner Textfelder.
Syntax:
Denken Sie daran:
- Verwenden Sie dreifache Klammern
{{{ }}}mit dem Text Helper, keine doppelten Klammern!
Drei grundlegende Beispiele three-basic-examples
Drei grundlegende Beispiele sind:
Häufige Anwendungsfälle common-use-cases
Einige gängige Anwendungsfälle sind:
Mit Schleifen with-loops
Ein gängiges Anwendungsbeispiel für -Schleifen sind:
Helper - Attributvalidierung helpers-attribute-validation
Beide Helper validieren Attributnamen, bevor sie in die Ausgabe aufgenommen werden.
Gültige Attributnamen:
-
Muss mit einem Buchstaben beginnen (a-z, A-Z)
-
Darf nur Buchstaben, Ziffern, Bindestriche und Unterstriche enthalten; siehe Namenskonventionen
-
Ignorieren der Groß-/Kleinschreibung
-
Beispiel:
- Gültig:
class,id,data-value,aria-label,my_attr,dataIndex1
- Ungültig:
123-attr,-class,@special,$money
- Gültig:
Ungültige Attributnamen werden mit einer Warnung in den Protokollen im Hintergrund übersprungen:
Denken Sie daran:
- Überprüfen Sie die Serverprotokolle auf Warnungen zu „Blockierte ungültige Attributnamensformate“.
Vergleichen der direkten Ausgabe mit Helfern comparing-direct-output-to-helpers
Verwendung der {{{fields.xxx}}} für die direkte Ausgabe:
- Sie benötigen keinen benutzerdefinierten Stil
- Die Standardausgabe soll unverändert bleiben
- Das Feld enthält eine komplexe HTML, die Sie nicht ändern möchten
Wann Helper verwendet werden sollten:
- Sie müssen CSS-Klassen für die Formatierung hinzufügen
- Sie müssen benutzerdefinierte HTML-Attribute (
data-*,aria-*und andere) hinzufügen - Sie wünschen sich eine konsistente, kontrollierte HTML-Struktur
Vergleich:
Kurzübersicht quick-reference
Einige Kurzanleitungen werden als Referenz bereitgestellt.
Kontextvariablen context-variables
Die Kontextvariablen:
Feldzugriff field-access
Zugriff auf Felder:
Kontrollfluss control-flow
Der Kontrollfluss:
Schleifenvariablen loop-variables
Die Schleifenvariablen:
Helper für benutzerdefinierte Vorlagen custom-template-helpers
Die benutzerdefinierten Vorlagen-Helper:
Zusätzliche Ressourcen additional-resources
Zusätzliche Ressourcen sind verfügbar: