Fehler bei der Verarbeitung der Vorlage.
The following has evaluated to null or missing: ==> serviceLocator.findService("com.liferay.dynamic.data.mapping.storage.StorageEngine") [in template "20116#20152#2674494" at line 104, column 66] ---- Tip: If the failing expression is known to 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: #assign StorageEngine = serviceLocato... [in template "20116#20152#2674494" at line 104, column 41] ----
1<#-- Get current journal article -->
2<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
3<#assign journalArticleId = .vars['reserved-article-id'].data>
4<#assign journalArticle = JournalArticleLocalService.getArticle(groupId, journalArticleId)>
5
6<#-- Get current journal article create date -->
7<#assign date_Data = getterUtil.getString(date.day.getData())>
8<#assign date_CH = serviceLocator.findService("ch.ti8m.akb.liferay.service.DateUtilsService").reformatDate(date_Data, "yyyy-MM-dd", "dd. MMMM yyyy", localeUtil.getDefault())>
9
10<#-- Get current journal article categories -->
11<#assign categoryList = serviceLocator.findService("ch.ti8m.akb.liferay.service.CategoryService").getCategories(groupId, journalArticleId)>
12<#assign categoryListSort = categoryList?sort_by("categoryId")>
13
14<#-- Get current journal article tags -->
15<#assign tagList = serviceLocator.findService("ch.ti8m.akb.liferay.service.TagService").getTags(groupId, journalArticleId)>
16
17<#-- Get current url -->
18<#assign currentUrl = themeDisplay.getLayout().getFriendlyURL()>
19
20<#-- Get current plid -->
21<#assign plid = themeDisplay.getLayout().getPlid()>
22
23<#-- Get default Metadata Id -->
24<#assign metadataId = 30376 />
25
26<#-- Set Header Colors -->
27<#assign defaultTextColor = "#ffffff" />
28<#assign defaultBgColor = "#071a3f" />
29<#if textColor??>
30 <#if textColor.getData()?has_content>
31 <#assign defaultTextColor = textColor.getData() />
32 </#if>
33</#if>
34<#if bgColor??>
35 <#if bgColor.getData()?has_content>
36 <#assign defaultBgColor = bgColor.getData() />
37 </#if>
38</#if>
39
40
41
42<#-- Inhalte auf der Detailseite -->
43
44<akb-event-details data-url="${currentUrl}" data-plid="${plid}" itemscope itemtype="https://schema.org/Event">
45 <#if detailpage.getData() == "true">
46 <#assign has_gallery = "false" />
47
48 <#assign thumbnail_url = "">
49 <#if image.getData()?has_content>
50 <#assign thumbnail_url = image.getData()>
51 <#elseif teaser.thumbnail.getData()?has_content>
52 <#assign thumbnail_url = teaser.thumbnail.getData()>
53 </#if>
54
55 <div class="header">
56 <akb-header>
57 <div class="content-width">
58 <div class="background">
59 <div class="content">
60 <div style="color: ${defaultTextColor}; background-color: ${defaultBgColor};">
61 <h1><span itemprop="name">${title.getData()}</span></h1>
62 </div>
63 </div>
64 <div class="image">
65 <div style="background-image:url(${thumbnail_url});
66 <#if bgPositionHeaderImg.getData()?has_content>
67 background-position: ${bgPositionHeaderImg.getData()};
68 </#if>
69 ">
70 <#if image.getData()?has_content>
71 <img src="${image.getData()}" alt="${title.getData()}" style="display:none;" itemprop="image">
72 </#if>
73 </div>
74 </div>
75 </div>
76 </div>
77 </akb-header>
78 </div>
79 <div class="main">
80 <div class="content-width">
81 <div class="row">
82 <div class="col-sm-8 col-xs-12">
83
84 <#-- Content -->
85
86 <div class="html-content">
87 <#if content.getData()?has_content>
88 <div itemprop="description">${content.getData()}</div>
89 </#if>
90
91 <#list imageGallery.getSiblings() as this_gallery>
92 <#if this_gallery.folderId.getData()?number != 0>
93 <#assign has_gallery = "true" />
94 <#assign HttpUtil = staticUtil["com.liferay.portal.kernel.util.HttpUtil"] />
95 <#assign HtmlUtil = staticUtil["com.liferay.portal.kernel.util.HtmlUtil"] />
96 <#assign StringPool = staticUtil["com.liferay.petra.string.StringPool"] />
97 <#assign DLFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") />
98
99
100 <#assign files = DLFileEntryLocalService.getFileEntries(groupId, this_gallery.folderId.getData()?number) />
101
102 <#if files?has_content>
103 <#assign DLFileEntryMetadataLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryMetadataLocalService") />
104 <#assign StorageEngine = serviceLocator.findService("com.liferay.dynamic.data.mapping.storage.StorageEngine") />
105
106
107 <#if this_gallery.galleryTitle.getData()?has_content>
108 <h2 id="${this_gallery.galleryTitle.getData()?lower_case}" style="text-align: center;">${this_gallery.galleryTitle.getData()}</h2>
109 <#-- <p style="display:none;">${files?join(", ")}</p>-->
110 </#if>
111 <div class="akb-image-gallery">
112 <#list files as file>
113 <#assign filePath = "/documents/" + file.repositoryId + "/" + file.folderId + "/" />
114 <#assign fileName = file.fileName />
115 <#assign fileUuid = file.uuid />
116 <#assign fileTitle = file.title />
117 <#assign fileDescription = file.description />
118 <#assign fileVersion = file.version />
119 <#assign fileVersionId = file.getFileVersion().getFileVersionId() />
120 <#assign fileSrc = filePath + fileName + "?version=" + fileVersion />
121
122 <#assign fileMetadata = DLFileEntryMetadataLocalService.getFileEntryMetadata(metadataId, fileVersionId) />
123 <#assign ddmFormValues = StorageEngine.getDDMFormValues(fileMetadata.getDDMStorageId()) />
124 <#assign ddmFormFieldValuesMap = ddmFormValues.getDDMFormFieldValuesMap() />
125
126 <#assign fileWidth = ddmFormFieldValuesMap['TIFF_IMAGE_WIDTH'][0].getValue().getString(locale) />
127 <#assign fileHeight = ddmFormFieldValuesMap['TIFF_IMAGE_LENGTH'][0].getValue().getString(locale) />
128
129
130 <#-- <p style="display:none;">${fileWidth}</p> -->
131 <div class="akb-image-item">
132 <a data-pswp-title="${fileTitle}"
133 href="${fileSrc}"
134 data-pswp-description="${fileDescription}"
135 data-pswp-width="${fileWidth}"
136 data-pswp-height="${fileHeight}">
137 <div class="akb-image-thumbnail" style="background-image:url('${fileSrc}')"></div>
138 </a>
139 </div>
140 </#list>
141 </div>
142 </#if>
143 </#if>
144 </#list>
145 </div>
146
147 </div>
148 <div class="col-sm-4 col-xs-12">
149
150 <#-- Sidebar -->
151
152 <div class="sidebar">
153 <div>
154 <p>Details</p>
155
156 <#if eventType.getData() == "Offline" || eventType.getData() == "Mixed">
157
158 <#list address.getSiblings() as this_address>
159 <div class="icon-location-pin-2" itemprop="location" itemscope itemtype="https://schema.org/Place">
160 <div>
161 <#if this_address.location.getData()?has_content>
162 <p itemprop="name">${this_address.location.getData()}</p>
163 </#if>
164 <#if this_address.street.getData()?has_content || this_address.place.getData()?has_content>
165 <div itemprop="address" itemscope itemtype="https://schema.org/PostalAddress">
166 <#if this_address.street.getData()?has_content>
167 <p itemprop="streetAddress">${this_address.street.getData()}</p>
168 </#if>
169 <#if this_address.plz.getData()?has_content && this_address.place.getData()?has_content>
170 <p>
171 <span itemprop="postalCode">${this_address.plz.getData()}</span>
172 <span itemprop="addressLocality">${this_address.place.getData()}</span>
173 </p>
174 </#if>
175 </div>
176 </#if>
177 </div>
178 </div>
179 </#list>
180
181 <#elseif eventType.getData() == "Online">
182
183 <div class="icon-computer-imac-1" itemprop="location" itemscope itemtype="https://schema.org/VirtualLocation">
184 <div>
185 <p>Online-Event <a href="${onlineUrl.getData()}" target="_blank" style="display:none;" itemprop="url">Link</a></p>
186 </div>
187 </div>
188
189 </#if>
190
191 <div class="icon-calendar-2">
192 <div>
193 <#list date.day.getSiblings() as this_day>
194 <#if this_day.getData()?has_content>
195 <#assign thisDay_Data = getterUtil.getString(this_day.getData())>
196 <#assign thisDay_CH = serviceLocator.findService("ch.ti8m.akb.liferay.service.DateUtilsService").reformatDate(thisDay_Data, "yyyy-MM-dd", "dd.MM.yyyy", localeUtil.getDefault())>
197
198 <#-- For Googles Rich-Snippets -->
199 <#if this_day.start.getData()?has_content>
200 <#assign starttime = "T" + this_day.start.getData() + "+01:00">
201 <#else>
202 <#assign starttime = "">
203 </#if>
204 <#if this_day.end.getData()?has_content>
205 <#assign endtime = "T" + this_day.end.getData() + "+01:00">
206 <#else>
207 <#assign endtime = "">
208 </#if>
209
210
211 <p>
212 <span itemprop="startDate" content="${this_day.getData()+starttime}">${thisDay_CH}</span>
213 <#if this_day.endday.getData()?has_content>
214 <#assign thisEndDay_Data = getterUtil.getString(this_day.endday.getData())>
215 <#assign thisEndDay_CH = serviceLocator.findService("ch.ti8m.akb.liferay.service.DateUtilsService").reformatDate(thisEndDay_Data, "yyyy-MM-dd", "dd.MM.yyyy", localeUtil.getDefault())>
216 bis <span itemprop="endDate" content="${this_day.endday.getData()+endtime}">${thisEndDay_CH}</span>
217 <#else>
218 <span style="display:none;" itemprop="endDate" content="${this_day.getData()+endtime}">${thisDay_CH}</span>
219 </#if>
220 <#if this_day.start.getData() != "" && this_day.end.getData() != "">
221 | ${this_day.start.getData()?replace(":", ".")} bis ${this_day.end.getData()?replace(":", ".")} Uhr
222 <#elseif this_day.start.getData() != "" || this_day.end.getData() != "">
223 <#if this_day.start.getData() == "">
224 | bis ${this_day.end.getData()?replace(":", ".")} Uhr
225 </#if>
226 <#if this_day.end.getData() == "">
227 | ab ${this_day.start.getData()?replace(":", ".")} Uhr
228 </#if>
229 </#if>
230 </p>
231 </#if>
232 </#list>
233 </div>
234 </div>
235
236 <#if additionalFieldSet.additionalFieldSetFieldSet?? >
237 <#if additionalFieldSet.additionalFieldSetFieldSet.info.getData()?has_content>
238 <div class="icon-infomation-circle">
239 <div>
240 <p>${additionalFieldSet.additionalFieldSetFieldSet.info.getData()}</p>
241 </div>
242 </div>
243 </#if>
244 </#if>
245
246 </div>
247
248 <#if links.linkText.getData()?has_content>
249 <div>
250 <p>Links</p>
251 <#list links.linkText.getSiblings() as this_link>
252 <div class="icon-globe-2">
253 <p><a href="${this_link.linkUrl.getData()}" target="${this_link.linkTarget.getData()}">${this_link.getData()}</a></p>
254 </div>
255 </#list>
256 </div>
257 </#if>
258
259 <#if downloads.downloadText.getData()?has_content>
260 <div>
261 <p>Downloads</p>
262 <#list downloads.downloadText.getSiblings() as this_download>
263 <div class="icon-file-acrobat">
264 <p><a href="${this_download.downloadUrl.getData()}" target="${this_download.downloadTarget.getData()}">${this_download.getData()}</a></p>
265 </div>
266 </#list>
267 </div>
268 </#if>
269
270 <#if archive.archiveLink.getData()?has_content>
271 <div>
272 <p>Archiv</p>
273 <div class="icon-globe-2">
274 <p><a href="${archive.archiveLink.getData()}" target="${archive.archiveTarget.getData()}">${archive.archiveText.getData()}</a></p>
275 </div>
276 </div>
277 </#if>
278
279 <#if contact.getData()?has_content>
280 <div>
281 <p>Kontakt</p>
282 <div>
283 <p>${contact.getData()}</p>
284 </div>
285 </div>
286 </#if>
287
288 <#if additionalField.additionalFieldBoolean.getData() == "true">
289 <div>
290 <p>${additionalField.additionalFieldTitle.getData()}</p>
291 <div>
292 <p>${additionalField.additionalFieldContent.getData()}</p>
293 </div>
294 </div>
295 </#if>
296
297 <a class="akb-button colored-button color-akb-blue full-width filled small" style="margin-top:0" data-action="back">zurück zur Übersicht</a>
298
299 </div>
300
301 </div>
302 </div>
303
304 </div>
305 </div>
306
307 <#assign meta = "meta">
308 <${meta} itemprop="eventAttendanceMode" content="https://schema.org/${eventType.getData()}EventAttendanceMode">
309 <${meta} itemprop="eventStatus" content="https://schema.org/Event${alert.alertType.getData()}">
310
311 <#else>
312 <div class="main">
313 <div class="content-width">
314 <h1 class="page-title">${title.getData()}</h1>
315 <div class="portal-alert alert alert-warning">Diese Veranstaltung verfügt über keine Detailseite.</div>
316 <a class="akb-button colored-button color-akb-blue normal-width filled big" data-action="back">zurück zur Übersicht</a>
317
318 </div>
319 </div>
320 </#if>
321
322</akb-event-details>
323<style>
324 .asset-full-content .component-title.h4 {
325 display: none;
326 }
327</style>