Unser Developer Portal ermutigt Banken und Fintechs jeder Grösse dazu, Ideen auszutauschen und mit uns zusammen Innovationen zu erschaffen. 

Das Entwicklerportal ist voller nützlicher Hilfsmittel, zum Beispiel Entwicklungspakete, Dokumentationen, Beispiel-Code und spezialisierte User-Foren. 

Ob Sie also an einer UI-Komponente arbeiten, die auf unseren existierenden APIs aufsetzt, ob Sie eine neue Daten-API bauen oder ob Sie eine Drittanbieter-Funktionalität integrieren – Sie werden feststellen, dass Ihnen das Developer Portal einen enormen Fundus an Informationen und praktischen Ratschlägen bietet.

Registrieren Sie sich, und Sie erhalten Zugang zu unserem Entwicklerportal und zu allen Neuigkeiten über unsere offene Plattform.

Fehler bei der Verarbeitung der Vorlage.
The following has evaluated to null or missing:
==> articleId  [in template "20116#20152#THREE-COLUMNS-MODULE" at line 279, column 33]

----
Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: ${articleId}  [in template "20116#20152#THREE-COLUMNS-MODULE" at line 279, column 31]
----
1<#--The top-level if condition is a work-around to avoid the need of updating --> 
2<#--all current contents using the Content with Picture Structure.--> 
3<#--Remove this after the old template version is not necessary anymore.--> 
4<#if Content1.Media1??> 
5<#-------------------------------------------------------------------------------------------------> 
6<#--CURRENT TEMPLATE FOR THE NEW STRUCTURE--> 
7<#-------------------------------------------------------------------------------------------------> 
8<#assign isDarkBg = BackgroundColor.getData() == "bg-dark"> 
9<#assign additionalTextClass = isDarkBg?string(" white", "")> 
10<#assign additionalBtnClass = isDarkBg?string(" btn-hover-white", "")> 
11<#assign dLFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService")> 
12<#assign articleId = .vars['reserved-article-id'].getData() /> 
13 
14 
15  <div class="row three-columns"> 
16  <div class="bg-container-fullwidth ${BackgroundColor.getData()}"></div> 
17  <div class="col-xs-12 ${PaddingTop.getData()} ${PaddingBottom.getData()}"> 
18    <div class="row"> 
19      <#if Headline.getData()?has_content> 
20        <div id="headline-element-${articleId}" class="col-sm-12"> 
21          <h2 class="three-columns-headline${additionalTextClass}">${Headline.getData()}</h2> 
22        </div> 
23      </#if> 
24      <#if ThreeColumnsContent.getData()?has_content> 
25        <div id="description-element-${articleId}" class="col-xs-12 three-columns-description${additionalTextClass}"> 
26          ${ThreeColumnsContent.getData()} 
27        </div> 
28      </#if> 
29      <@contentSectionWithMedia "1"/> 
30      <@contentSectionWithMedia "2"/> 
31      <@contentSectionWithMedia "3"/> 
32    </div> 
33  </div> 
34</div> 
35 
36<#macro contentSectionWithMedia index> 
37  <#assign content = .vars["Content" + index]> 
38  <#assign media = content["Media" + index]> 
39  <#--The following usages of ?remove_* are necessary due to Liferay being bugged--> 
40  <#assign mediaType = media.getData()?remove_beginning("[\"")?remove_ending("\"]")> 
41  <#assign mediaCaption = content["MediaCaption" + index]> 
42  <#assign headline = content["HeadlineColumn" + index]> 
43  <#assign image = content["Image" + index]> 
44  <#assign internalLink = content["InternalLink" + index]> 
45  <#if internalLink.getData()?has_content> 
46    <#assign internalLinkName = internalLink["InternalLink" + index + "Name"]> 
47  </#if> 
48  <#assign externalLink = content["ExternalLink" + index]> 
49  <#if externalLink.getData()?has_content> 
50    <#assign externalLinkName = externalLink["ExternalLink" + index + "Name"]> 
51  </#if> 
52 
53  <#assign internalLinkFallbackLabel = languageUtil.get(locale, "avaloq-language.go-to-page")> 
54  <#assign externalLinkFallbackLabel = languageUtil.get(locale, "avaloq-language.visit-website")> 
55 
56  <#if content.getData()?has_content || headline.getData()?has_content || image.getData()?has_content> 
57  <div  class="col-xs-12 col-md-4 three-columns-section content-element-${articleId}"> 
58    <@header headline mediaType index mediaCaption/> 
59    <#if content.getData()?has_content> 
60      <div class="three-columns-section-text ${additionalTextClass}">${content.getData()}</div> 
61    </#if> 
62    <#if internalLink.getData()?has_content> 
63      <div class="three-column-section-link"> 
64        <a class="btn btn-link btn-icon-link-internal${additionalBtnClass}" href="${internalLink.friendlyUrl}"> 
65          ${internalLinkName.getData()?has_content?string(internalLinkName.getData(), internalLinkFallbackLabel)} 
66        </a> 
67      </div> 
68    </#if> 
69    <#if externalLink.getData()?has_content> 
70      <div class="three-column-section-link"> 
71        <a class="btn btn-link btn-icon-link-external${additionalBtnClass}" href="${externalLink.getData()}" target="_blank"> 
72          ${externalLinkName.getData()?has_content?string(externalLinkName.getData(), externalLinkFallbackLabel)} 
73        </a> 
74      </div> 
75    </#if> 
76  </div> 
77  </#if> 
78</#macro> 
79 
80<#macro header headline mediaType index mediaCaption> 
81  <#assign mediaField = .vars["Content" + index][mediaType + index]> 
82  <#switch mediaType> 
83    <#case "Image"> 
84      <@imageElement mediaField/> 
85      <@headlineElement headline/> 
86      <#break> 
87    <#case "Video"> 
88      <#assign imageField = .vars["Content" + index]["Image" + index]/> 
89      <@headlineElement headline/> 
90      <@Html5Video mediaField imageField/> 
91      <@mediaCaptionElement mediaCaption/> 
92      <#break> 
93    <#case "YouTubeVideo"> 
94      <@headlineElement headline/> 
95      <@iframeVideo mediaField.getData()/> 
96      <@mediaCaptionElement mediaCaption/> 
97      <#break> 
98    <#case "BrightcoveVideo"> 
99      <@headlineElement headline/> 
100      <@iframeVideo mediaField.getData()/> 
101      <@mediaCaptionElement mediaCaption/> 
102      <#break> 
103  </#switch> 
104</#macro> 
105 
106<#macro headlineElement headline> 
107  <#if headline.getData()?has_content> 
108    <#if HeadlineColumnSize.getData()=="bigHeadline"> 
109      <h2 class="three-columns-section-headline${additionalTextClass}">${headline.getData()}</h2> 
110    <#else> 
111      <h3 class="three-columns-section-headline${additionalTextClass}">${headline.getData()}</h3> 
112    </#if> 
113  </#if> 
114</#macro> 
115 
116<#macro imageElement imageField> 
117  <#if imageField.getData()?has_content> 
118 
119    <#-- Get media description (which is used as alt text for images) --> 
120    <#assign mediaDescription = "" /> 
121    <#if imageField?? && imageField.getData()?has_content > 
122      <#attempt> 
123        <#assign mediaParams = imageField.getData()?split("/") /> 
124        <#assign mediaGroupId = mediaParams[2] /> 
125        <#assign mediaUuid = mediaParams[5]?split("?")[0] /> 
126        <#assign mediaFileEntry = dLFileEntryLocalService.getFileEntryByUuidAndGroupId(mediaUuid, mediaGroupId?number) /> 
127        <#assign mediaDescription = mediaFileEntry.getDescription() /> 
128        <#recover> 
129      </#attempt> 
130    </#if> 
131 
132    <div class="three-columns-section-image"> 
133      <img src="${imageField.getData()}" alt="${mediaDescription}"/> 
134    </div> 
135  </#if> 
136</#macro> 
137 
138<#macro Html5Video videoField imageField> 
139  <video preload="none" controls poster="${imageField.getData()}"> 
140    <source src="${videoField.getData()}" type="video/mp4"> 
141  </video> 
142</#macro> 
143 
144<#macro iframeVideo iframeAsString> 
145  <#assign matchWidthOrHeight = "\\s((width=(\"|')\\d*(\"|'))|(height=(\"|')\\d*(\"|')))"/> 
146  <#assign matchAutoplay = "autoplay; "/> 
147  <#assign normalizedIframe = iframeAsString?replace("(" + matchWidthOrHeight + ")|(" + matchAutoplay + ")", "", "rs")/> 
148  ${normalizedIframe} 
149</#macro> 
150 
151<#macro mediaCaptionElement mediaCaption> 
152  <#if mediaCaption.getData()?has_content> 
153    <div class="avlq-media-caption caption">${mediaCaption.getData()}</div> 
154  </#if> 
155</#macro> 
156 
157<#else> 
158<#-------------------------------------------------------------------------------------------------> 
159<#--DEPRECATED TEMPLATE FOR DEPRECATED CONTENT TO STILL WORK--> 
160<#-------------------------------------------------------------------------------------------------> 
161  <#assign isDarkBg = BackgroundColor.getData() == "bg-dark"> 
162  <#assign additionalTextClass = isDarkBg?string(" white", "")> 
163  <#assign additionalBtnClass = isDarkBg?string(" btn-hover-white", "")> 
164  <#assign dLFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService")> 
165<div class="row three-columns"> 
166  <div class="bg-container-fullwidth ${BackgroundColor.getData()}"></div> 
167  <div class="col-xs-12 ${PaddingTop.getData()} ${PaddingBottom.getData()}"> 
168    <div class="row"> 
169      <#if Headline.getData()?has_content> 
170        <div class="col-xs-12"> 
171          <h2 class="three-columns-headline${additionalTextClass}">${Headline.getData()}</h2> 
172        </div> 
173      </#if> 
174      <#if ThreeColumnsContent.getData()?has_content> 
175        <div class="col-xs-12 three-columns-description${additionalTextClass}"> 
176        ${ThreeColumnsContent.getData()} 
177        </div> 
178      </#if> 
179      <@contentSection "1"/> 
180      <@contentSection "2"/> 
181      <@contentSection "3"/> 
182    </div> 
183  </div> 
184</div> 
185 
186  <#function getFilePath fileField> 
187    <#assign imageURL = "#"> 
188    <#attempt> 
189      <#assign imageData = fileField?eval> 
190      <#assign imageData = processFileData(imageData)> 
191      <#assign image = dLFileEntryLocalService.fetchDLFileEntryByUuidAndGroupId(imageData["uuid"],imageData["groupId"]?eval) > 
192 
193      <#if themeDisplay.getCDNHost()?? && themeDisplay.getCDNHost()?has_content> 
194        <#assign imageURL = themeDisplay.getCDNHost() + "/documents/" + imageData["groupId"] + "/" + image.getFolder().getFolderId() + "/" +  imageData["title"] + "/" + imageData["uuid"] /> 
195      <#else> 
196        <#assign imageURL = "/documents/" + imageData["groupId"] + "/" + image.getFolder().getFolderId() + "/" +  imageData["title"] + "/" + imageData["uuid"] /> 
197      </#if> 
198      <#recover> 
199        <#assign imageURL = fileField> 
200    </#attempt> 
201 
202    <#return imageURL> 
203  </#function> 
204 
205  <#function processFileData fileData> 
206    <#if fileData["data"]??> 
207      <#return processFileData(fileData["data"]?eval)> 
208    </#if> 
209    <#return fileData> 
210  </#function> 
211 
212  <#macro contentSection index> 
213    <#assign content = .vars["Content" + index]> 
214    <#assign image = content["Image" + index]> 
215    <#assign headline = content["HeadlineColumn" + index]> 
216    <#assign internalLink = content["InternalLink" + index]> 
217    <#if internalLink.getData()?has_content> 
218      <#assign internalLinkName = internalLink["InternalLink" + index + "Name"]> 
219    </#if> 
220    <#assign externalLink = content["ExternalLink" + index]> 
221    <#if externalLink.getData()?has_content> 
222      <#assign externalLinkName = externalLink["ExternalLink" + index + "Name"]> 
223    </#if> 
224 
225    <#if content.getData()?has_content || headline.getData()?has_content || image.getData()?has_content> 
226    <div class="col-xs-12 col-md-4 three-columns-section"> 
227      <#if image.getData()?? && image.getData() != ""> 
228 
229        <#-- Get media description (which is used as alt text for images) --> 
230        <#assign mediaDescription = "" /> 
231        <#if image?? && image.getData()?has_content > 
232          <#attempt> 
233            <#assign mediaParams = image.getData()?split("/") /> 
234            <#assign mediaGroupId = mediaParams[2] /> 
235            <#assign mediaUuid = mediaParams[5]?split("?")[0] /> 
236            <#assign mediaFileEntry = dLFileEntryLocalService.getFileEntryByUuidAndGroupId(mediaUuid, mediaGroupId?number) /> 
237            <#assign mediaDescription = mediaFileEntry.getDescription() /> 
238            <#recover> 
239          </#attempt> 
240        </#if> 
241 
242        <div class="three-columns-section-image"> 
243          <img src="${getFilePath(image.getData())}" alt="${mediaDescription}"/> 
244        </div> 
245      </#if> 
246 
247      <#if headline.getData()?has_content> 
248        <#if HeadlineColumnSize.getData()=="bigHeadline"> 
249          <h2 class="three-columns-section-headline${additionalTextClass}">${headline.getData()}</h2> 
250        <#else> 
251          <h3 class="three-columns-section-headline${additionalTextClass}">${headline.getData()}</h3> 
252        </#if> 
253      </#if> 
254      <#if content.getData()?has_content> 
255        <div class="three-columns-section-text ${additionalTextClass}">${content.getData()}</div> 
256      </#if> 
257      <#if internalLink.getData()?has_content> 
258        <div class="three-column-section-link"> 
259          <a class="btn btn-link btn-icon-link-internal${additionalBtnClass}" href="${internalLink.friendlyUrl}"> 
260          ${internalLinkName.getData()!"Go to page"} 
261          </a> 
262        </div> 
263      </#if> 
264      <#if externalLink.getData()?has_content> 
265        <div class="three-column-section-link"> 
266          <a class="btn btn-link btn-icon-link-external${additionalBtnClass}" href="${externalLink.getData()}" target="_blank"> 
267          ${externalLinkName.getData()!"Visit website"} 
268          </a> 
269        </div> 
270      </#if> 
271    </div> 
272    </#if> 
273  </#macro> 
274</#if> 
275<script> 
276 
277  if ("true" === "${(Animation?? && Animation.getData() == "true")?c}" && !Liferay.Browser.isIe()) { 
278    $(document).ready(function() { 
279      if($('#headline-element-${articleId}').length){ 
280        ($('#headline-element-${articleId}')).css('opacity', '0'); 
281
282      if($('#description-element-${articleId}').length){ 
283        ($('#description-element-${articleId}')).css('opacity', '0'); 
284
285      if($('.content-element-${articleId}').length){ 
286        ($('.content-element-${articleId}')).css('opacity', '0'); 
287
288    }); 
289    // Register animation 
290    Liferay.Loader.require('avaloq-animator', function (avaloqAnimator) { 
291      avaloqAnimator.fadeIn("#headline-element-${articleId}"); 
292      avaloqAnimator.fadeIn("#description-element-${articleId}"); 
293      avaloqAnimator.fadeIn(".content-element-${articleId}"); 
294 
295    }); 
296
297</script>