[Gäller även för v8]{class="badge positive" title="Gäller även Campaign v8"}
Formatering formatting
JavaScript-mallar javascript-templates
En JavaScript-mall är ett HTML- eller textdokument som innehåller JavaScript-kod. Den är konstruerad på samma sätt som ett e-postinnehåll i en leveransåtgärd.
Identifiering av en JavaScript-mall identification-of-a-javascript-template
En JavaScript-mall identifieras av sitt namn och namnutrymme på samma sätt som scheman och formulär. Vi rekommenderar dock att du lägger till alternativet .js i mallnamnet.
Struktur för en JavaScript-mall structure-of-a-javascript-template
Exempel på en JavaScript HTML-formateringsmall som baseras på "cus:book"-schemat:
<html>
<body>
<!-- Title of book -->
<h1><%= content.@name %></h1>
<ul>
<% for each(var chapter in content.chapter) { %>
<li><%= chapter.@name %></li>
<% }%>
</ul>
</body>
</html>
De olika JavaScript-direktiven visas i följande format:
- Sammanfoga fält: visar innehållet i data med syntaxen
<%= <source> %>
där<source>
är källfältet för de data som ska visas. - Instruktionsblock: kör en serie JavaScript-instruktioner som finns mellan taggarna <% och %>.
Objektet content representerar huvudelementet i XML-indatadokumentet.
I följande exempel visas innehållet i namnet book name:
<h1><%= content.@name %></h1>
Följande kod itererar på samlingselementet <chapter>
:
<% for each(var chapter in content.chapter) { %>
<li><%= chapter.@name %></li>
<% }%>
Innehållets attribut och element representeras som JavaScript-objekt och källdokumentets struktur respekteras.
Exempel:
- innehåll.@name: hämtar värdet för attributet "name" för huvudelementet
- innehåll.@
['name']
: identiskt med innehållet.Syntax för @name - content.chapter.length: returnerar antalet element i samlingselementet
<chapter
- content.chapter
[0]
.@name: hämtar namnet på det första<chapter>
-elementet - chapter.name(): returnerar namnet på elementet
<chapter>
- chapter.parent().name(): returnerar namnet på det överordnade elementet för
<chapter>
['<field>']
.content.@['offer-id']
.Alla funktioner i ett programmeringsspråk (variabler, slingor, villkorstester, funktioner etc.). ) är tillgängligt för att skapa utdatadokumentet. SOAP API:er är tillgängliga för att berika utdatadokumentet.
Exempel:
-
Villkorstest:
code language-none <% if (content.@number == 1 || content.@language == 'en') { %> <!-- Content to be displayed if test is true--> <% } %>
-
Funktionsanrop:
code language-none <!-- Displays a horizontal bar --> ;<% function DisplayHorizontalBar() { %> <hr/> <% } %> <!-- The same function in a block --> <% function DisplayHorizontalBar2() { document.write('<hr/>'); } %> <!-- Returns the value in uppercase --> <% function formatName(value) { return value.toUpperCase(); } %> <!-- Call functions --> <%= DisplayHorizontalBar1() %> <%= DisplayHorizontalBar2() %> <%= formatName(content.@name) %>
-
Deklarationer och variabelanrop:
code language-none <% var counter = 0; %> <%= counter += 10 %>
-
Hämta och visa ett mottagarnamn med statiska metoder:
code language-none <% var recipient = nms.recipient.get(1246); %> <%= recipient.lastName %>
-
Återställning och visning av ett mottagarnamn med icke-statiska metoder:
code language-none <% var query = xtk.queryDef.create( <queryDef schema="nms:recipient" operation="get"> <select> <node expr="@lastName"/> </select> <where> <condition expr="@id=1246"/> </where> </queryDef>); var recipient = query.ExecuteQuery(); %> <%= recipient.@lastName %>
Inkludera en JavaScript-mall including-a-javascript-template
Du kan skapa ett bibliotek med funktioner eller variabler för senare bruk. Om du vill göra det importerar du JavaScript-mallen med funktionen eval. På så sätt kan du förbättra kontexter med ytterligare funktioner som deklarerats i andra JavaScript-mallar.
Exempel: importera mallen common.jsp.
<% eval(xtk.javascript.get("cus:common.js").data); %>
Redigera en JavaScript-mall editing-a-javascript-template
Med redigeringszonen kan du fylla i innehållet i JavaScript-mallen:
Om du vill generera en förhandsgranskning av utdatadokumentet markerar du ett innehåll och ett utdataformat (HTML, Text, XML) och klickar sedan på Generate :
Exempel på hur du skapar och använder en JavaScript-mall example-of-how-to-create-and-use-a-javascript-template
Nedan hittar du den konfiguration som krävs för att implementera följande innehållshantering med en JavaScript-mall:
I det här exemplet beskrivs följande steg:
-
Skapa följande schema (i det här fallet: neo:news):
code language-none <srcSchema _cs="Invitation (neo)" entitySchema="xtk:srcSchema" img="xtk:schema.png" label="Invitation" mappingType="sql" name="news" namespace="neo" xtkschema="xtk:srcSchema"> <enumeration basetype="string" default="en" name="language"> <value label="Français" name="fr" value="fr"/> <value label="English" name="gb" value="gb"/> </enumeration> <enumeration basetype="string" name="css"> <value label="Blue" name="bl" value="blue"/> <value label="Orange" name="or" value="orange"/> </enumeration> <element label="Intervenants" name="attendee"> <key internal="true" name="id"> <keyfield xpath="@id"/> </key> <attribute label="Name" name="name" type="string"/> <element label="Image" name="image" target="xtk:fileRes" type="link"/> <attribute label="Description" name="description" type="string"/> <attribute default="Gid()" label="Id" name="id" type="long"/> </element> <element label="Invitation" name="news" template="ncm:content" xmlChildren="true"> <compute-string expr="@name"/> <attribute enum="language" label="Language" name="language" type="string"/> <attribute enum="css" label="Stylesheet" name="css" type="string"/> <attribute label="Title" name="title" type="string"/> <element label="Presentation" name="presentation" type="html"/> <attribute label="Date" name="date" type="date"/> <element label="Attendees list" name="attendeesList" ordered="true" ref="attendee" unbound="true"/> </element> </srcSchema>
-
Skapa det länkade Content management-typformuläret (neo:news)
code language-none <form _cs="News (neo)" entitySchema="xtk:form" img="xtk:form.png" label="News" name="news" namespace="neo" type="contentForm" xtkschema="xtk:form"> <container type="iconbox"> <container label="Invitation"> <input xpath="@langue"/> <input xpath="@css"/> <input xpath="@title"/> <input xpath="@date"/> <input xpath="presentation"/> </container> <container label="Intervenants"> <container toolbarCaption="Liste des intervenants" type="notebooklist" xpath="attendeesList" xpath-label="@nom"> <container> <input xpath="@nom"/> <input img="nl:sryimage.png" newEntityFormChoice="true" xpath="image"> <sysFilter> <condition expr="@isImage = true"/> </sysFilter> </input> <input xpath="@description"/> </container> </container> </container> </container> </form>
-
Skapa JavaScript-mallarna med meddelandeinnehåll för HTML och textformat.
-
I vårt exempel, för HTML:
code language-none <html> <head> <title>Newsletter</title> <style type="text/css"> .body {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; color:#514c48; margin-left: auto; margin-right: auto;} .body table {width:748; border: solid 1px; cellpadding:0; cellspacing:0"} </style> </head> <body> <p><center><%= mirrorPage %></center></p> <center> <table> <tr> <td> <img src="[LOGO]"/> </td> <td> <h1><%= content.@title %></h1> </td> </tr> <tr> <td> <div > <h0><%= hello,</h0> <p><%= content.presentation %></p> <h0>Useful information</h0> <p> <img src="[IMAGE 1]"/>When? <br/><%= formatDate(content.@date, "%2D %Bl %4Y") %> From 10 AM in your bookshop.</p><br/> <p> <img src="[IMAGE 2]"/>Who? <br>Meet our favorite authors and illustrators and get a signed copy of their book.</p><br/> <p> <img src="[IMAGE 3]"/>Attendance is free but there is a limited number of seats: sign up now!</p> </div> </td> <td> <div style="text-align:left; width:210; height:400px; background:url([IMAGE DE FOND])"> <h0><%= participant %></h0> <% var i var iLength = content.attendeesList.length() for (i=0; i<iLength; i++) { %> <p> <%= generateImgTag(content.attendeesList[i].@["image-id"]) %> <%= content.attendeesList[i].@description %> </p> <% } %> </div2> </td> </tr> </table> </center> </body> </html>
-
För texten:
code language-none <%= content.@title %> <%= content.presentation %> *** When? On <%= formatDate(content.@date, "%2D %Bl %4Y") %> From 10 AM in your bookshop. *** Who? Come and meet our favorite authors and illustrators and get a signed copy of their books. *** Attendance is free but there is a limited number of seats: sign up now! Guests: ****************** <% var i var iLength = content.attendeesList.length() //for (i=(iLength-1); i>-1; i--) for( i=0 ; i<iLength ; i++ ) { %> Description <%= i %> : <%= content.attendeesList[i].@description %> <% } %>
-
-
Skapa nu en publiceringsmall som används för båda formaten:
-
För HTML:
-
För text:
-
-
Du kan sedan använda den här innehållsmallen i dina leveranser.
Mer information finns i Använda en innehållsmall.
XSL-formatmallar xsl-stylesheets
Med XSLT-språk kan du ändra ett XML-dokument till ett utdatadokument. Beroende på formatmallens utdatametod kan det resulterande dokumentet genereras i HTML, oformaterad text eller ett annat XML-träd.
Omformningen beskrivs i sin tur i XML i ett dokument som kallas formatmall.
Identifiera en formatmall identifying-a-stylesheet
En formatmall identifieras av sitt namn och namnutrymme, precis som scheman och formulär. Vi rekommenderar dock att du lägger till tillägget .xsl i formatmallens namn.
Identifieringsnyckeln för en formatmall är en sträng som formas av namnutrymmet och namnet som avgränsas av ett kolon, till exempel: cus:book.xsl.
Struktur för en formatmall structure-of-a-stylesheet
Exempel på en formateringsmall för HTML baserad på exempelschemat "cus:book":
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output encoding="ISO-8859-1" method="html"/>
<!-- Point of entry of the stylesheet -->
<xsl:template match="/book">
<html>
<body>
<!-- Book title -->
<h1><xsl:value-of select="@name"/></h1>
<lu>
<!-- List of chapters -->
<xsl:for-each select="child::chapter">
<li><xsl:value-of select="@name"/></li>
</xsl:for-each>
</lu>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
En formatmall är ett XML-dokument som följer följande regler:
- attributvärdena ligger mellan citattecken,
- ett element måste ha en öppningsmarkör och en slutmarkör,
- ersätta tecknen '<' eller '&' med entiteterna '<' eller '&',
- varje XSL-element måste använda namnutrymmet xsl.
En formatmall måste börja med XSL-rotelementmarkören <xsl:stylesheet>
och sluta med </xsl:stylesheet>
-markören. XSL-namnutrymmet måste definieras i öppningsmarkören enligt följande:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
Elementet <xsl:output>
anger formatet för det dokument som genereras. Ange önskad teckenuppsättning och utdataformat.
<xsl:output encoding="ISO-8859-1" method="html"/>
Följande instruktioner beskriver formatmallens konfiguration för formateringen av utdatadokumentet.
<xsl:template match="/book">
<html>
<body>
<!-- Book title -->
<h1><xsl:value-of select="@name"/></h1>
<lu>
<!-- List of chapters -->
<xsl:for-each select="child::chapter">
<li><xsl:value-of select="@name"/></li>
</xsl:for-each>
</lu>
</body>
</html>
</xsl:template>
Som standard söker XSLT-processorn efter mallen som gäller för rot- eller huvudnoden i XML-indatadokumentet. Byggandet av utdatadokumentet börjar med den här mallen.
I vårt exempel genereras en HTML-sida från "cus:book"-schemat genom att bokens namn och listan med kapitel visas.
Visa HTML/XML displaying-html-xml
Om du vill visa ett html-fält använder du alternativet disable-output-escape="yes" från direktivet <xsl:value-of>
. På så sätt kan du undvika att ersätta tecken med deras XML-enhet (till exempel < med <).
Med direktivet <xsl:text>
med alternativet disable-output-escape="yes" kan du infoga JavaScript-taggar för anpassningsfält eller villkorstester.
Exempel:
-
Visa innehållet i ett fält av typen"html":
code language-none <xsl:value-of select="summary" disable-output-escaping="yes"/>
-
Infogar anpassningsfältet <%= mottagare.e-post %>:
code language-none <xsl:text disable-output-escaping="yes"><%= recipient.email %></xsl:text>
-
Lägger till villkorstestet <% if (mottagare.språk == 'en')
{
%>:code language-none <xsl:text disable-output-escaping="yes"><% if (recipient.language == 'en') { %></xsl:text>
Inkludera formatmallar including-stylesheets
Du kan skapa ett bibliotek med mallar eller variabler som ska delas mellan flera formatmallar. Mallen longMonth, som presenteras ovan, är ett typiskt exempel på fördelen med att fjärrsöka efter en mall i en formatmall så att den kan återanvändas senare.
Direktivet <xsl:include>
anger namnet på den formatmall som ska inkluderas i dokumentet.
Exempel: inkluderar formatmallen"common.xsl".
<? xml version="1.0" encoding="ISO-8859-1" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:include href="common.xsl"/>
<xsl:output encoding="ISO-8859-1" method="jsp" indent="yes"/>
...
</xsl:stylesheet>
Redigera en formatmall editing-a-stylesheet
Med redigeringszonen kan du fylla i formatmallens innehåll:
Om du vill generera en förhandsgranskning av utdatadokumentet markerar du en innehållsinstans och formatet (HTML, Text, XML) och klickar sedan på Generate :
Bildhantering image-management
Bildreferenser image-referencing
De bilder som anges i utdatadokumentet för HTML kan refereras med absoluta eller relativa referenser.
Med Relativ referens kan du ange URL-adressen till servern som innehåller bilderna i alternativen NcmRessourcesDir och NcmRessourcesDirPreview . Dessa alternativ innehåller platsen för bilder som ska publiceras och förhandsgranskas i Adobe Campaign klientkonsol.
De här två alternativen är tillgängliga via alternativhanteringsskärmen i mappen Administration > Platform > Options.
Exempel:
- NcmResourcesDir = "https://server/images/"
- NcmResourcesDirPreview = "x:/images/"
Under formatmallsbearbetningen fylls attributet _resPath i huvudelementet i XML-indatadokumentet automatiskt i med ett eller flera av alternativen beroende på sammanhanget (förhandsgranskning eller publikation).
Exempel på hur du använder bildplaceringsalternativet och dess användning med en bild:
<img src="<%= content.@_resPath %>/newsletter/image.png"/>
Använda offentliga resurser using-public-resources
Du kan också använda Public resources för att deklarera bilder och överföra dem till servern beroende på instansinställningarna som anges i distributionsguiden.
Du kan sedan anropa dessa bilder i innehållet. Om du vill göra det använder du följande syntax i innehållshanteringsschemat:
<element label="Image" name="image" target="xtk:fileRes" type="link"/>
I formuläret läggs fältet för att välja bilden till med följande syntax:
<input img="nl:sryimage.png" newEntityFormChoice="true" xpath="image">
<sysFilter>
<condition expr="@isImage = true"/>
</sysFilter>
</input>
Datumvisning date-display
I XML-indatadokumentet lagras datumen i det interna XML-formatet: YYYY/MM/DD HH:MM:SS
(exempel: 2018/10/01 12:23:30
).
Adobe Campaign tillhandahåller datumformateringsfunktioner för JavaScript-mallar och XSL-formatmallar som beskrivs nedan.
JavaScript datumformatering javascript-date-formatting
För att visa ett datum i det önskade formatet tillhandahåller Adobe Campaign funktionen formatDate som tar datuminnehållet som indata och en sträng som anger utdataformatet med följande syntax: %4Y/%2M/%2D %2H%2N%2S
Exempel:
-
Visa datumet i formatet 31/10/2018:
code language-none <%= formatDate(content.@date, "%2D/%2M/%4Y") %>
-
Visa datumet i formatet juli 2018:
code language-none <% function displayDate(date) { var aMonth = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ]; var month = formatDate(content.@date, "%2M") var year = formatDate(content.@date, "%4Y") return aMonth[month-1]+" "+year; } %> <%= displayDate(content.@date) %>
XSL-datumformatering xsl-date-formatting
Det finns ingen standardfunktion för datumhantering i XSLT-syntax. Om du vill visa ett datum i det önskade formatet tillhandahåller Adobe Campaign den externa funktionen date-format. Den här funktionen tar innehållet från datumet som indata och en sträng som anger utdataformatet med följande syntax: %4Y/%2M/%2D %2H%2N%2S
Exempel:
-
Så här visar du datumet i formatet 01/10/2018:
code language-none <xsl:value-of select="external:date-format(@date, '%2D/%2M/%4Y')"/>
-
Så här visar du datumet i formatet juli 2018:
code language-none <!-- Returns the month in the form of a string with the month number as input --> <xsl:template name="longMonth"> <xsl:param name="monthNumber"/> <xsl:choose> <xsl:when test="$monthNumber = 1">January</xsl:when> <xsl:when test="$monthNumber = 2">February</xsl:when> <xsl:when test="$monthNumber = 3">March</xsl:when> <xsl:when test="$monthNumber = 4">April</xsl:when> <xsl:when test="$monthNumber = 5">May</xsl:when> <xsl:when test="$monthNumber = 6">June</xsl:when> <xsl:when test="$monthNumber = 7">July</xsl:when> <xsl:when test="$monthNumber = 8">August</xsl:when> <xsl:when test="$monthNumber = 9">September</xsl:when> <xsl:when test="$monthNumber = 10">October</xsl:when> <xsl:when test="$monthNumber = 11">November</xsl:when> <xsl:when test="$monthNumber = 12">December</xsl:when> </xsl:choose> </xsl:template> <!-- Display date --> <xsl:call-template name="longMonth"> <xsl:with-param name="monthNumber"> <xsl:value-of select="external:date-format(@date, '%2M')"/> </xsl:with-param> </xsl:call-template> <xsl:value-of select="external:date-format(@date, '%4y')"/>