Asset Headline News

Eventempfehlungen

Eventempfehlungen

Asset Publisher

Fehler bei der Verarbeitung der Vorlage.
Java method "com.sun.proxy.$Proxy154.getEntries(com.liferay.asset.kernel.service.persistence.AssetEntryQuery)" threw an exception when invoked on com.sun.proxy.$Proxy154 object "com.liferay.portlet.asset.service.impl.AssetEntryServiceImpl@65288873"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign allEntries = assetEntryServic...  [in template "20115#20151#93446" at line 41, column 1]
----
1<#-- @ftlvariable name="groupLocalService" type="com.liferay.portal.kernel.service.GroupLocalService" --> 
2<#-- @ftlvariable name="assetVocabularyLocalService" type="com.liferay.asset.kernel.service.AssetVocabularyLocalService" --> 
3<#-- @ftlvariable name="assetCategoryLocalService" type="com.liferay.asset.kernel.service.AssetCategoryLocalService" --> 
4<#-- @ftlvariable name="ddmStructureLocalService" type="com.liferay.dynamic.data.mapping.service.DDMStructureLocalService" --> 
5<#-- @ftlvariable name="classNameLocalService" type="com.liferay.portal.kernel.service.ClassNameLocalService" --> 
6<#-- @ftlvariable name="ddmStructureFieldFilterURL" type="com.liferay.portal.kernel.portlet.LiferayPortletURL" --> 
7<#-- @ftlvariable name="listUtil" type="com.liferay.portal.kernel.util.ListUtil" --> 
8<#-- @ftlvariable name="assetEntryQuery" type="com.liferay.asset.kernel.service.persistence.AssetEntryQuery" --> 
9 
10 
11<#assign 
12groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService") 
13assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") 
14assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") 
15ddmStructureLocalService = serviceLocator.findService("com.liferay.dynamic.data.mapping.service.DDMStructureLocalService") 
16classNameLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.ClassNameLocalService") 
17assetEntryService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryService") 
18dayMonthYearFormat = dateFormatFactory.getSimpleDateFormat("dd.MM.yy") 
19globalGroup = groupLocalService.getGroup(companyId, companyId?c) 
20articleCategoryVocabularyHauptkategorie = assetVocabularyLocalService.getGroupVocabulary(globalGroup.groupId, "Hauptkategorie") 
21/> 
22 
23<#assign 
24    assetEntryQuery = objectUtil("com.liferay.asset.kernel.service.persistence.AssetEntryQuery") 
25    VOID = assetEntryQuery.setEnablePermissions(getterUtil.getBoolean(enablePermissions)) 
26/> 
27<#if classNameIds?has_content> 
28    <#assign 
29        strClassNameIds = stringUtil.split(classNameIds) 
30        lngClassNameIds = getterUtil.getLongValues(strClassNameIds) 
31        VOID = assetEntryQuery.setClassNameIds(lngClassNameIds) 
32    /> 
33</#if> 
34<#if anyClassTypeJournalArticleAssetRendererFactory?has_content> 
35    <#assign 
36        strClassTypeIds = stringUtil.split(anyClassTypeJournalArticleAssetRendererFactory) 
37        lngClassTypeIds = getterUtil.getLongValues(strClassTypeIds) 
38        VOID = assetEntryQuery.setClassTypeIds(lngClassTypeIds) 
39    /> 
40</#if> 
41<#assign 
42    allEntries = assetEntryService.getEntries(assetEntryQuery) 
43/> 
44 
45<#assign 
46    allCategoryIds = [] 
47/> 
48 
49<#list allEntries as entry> 
50    <#list entry.getCategoryIds() as categoryId> 
51        <#assign 
52            strCategoryId = categoryId?c 
53        /> 
54        <#if !allCategoryIds?seq_contains(strCategoryId)> 
55            <#assign 
56                allCategoryIds = allCategoryIds + [ categoryId?c ] 
57            /> 
58        </#if> 
59    </#list> 
60</#list> 
61 
62<div id="events_desktop" class="row events-desktop desktop-version recommendations"> 
63     <#assign 
64        allAssetCategories = assetCategoryLocalService.getVocabularyRootCategories(articleCategoryVocabularyHauptkategorie.vocabularyId, -1, -1, null) 
65     /> 
66 
67    <div id="filter-tab-section-events"> 
68        <ul class="filter-tabs"> 
69            <li class="filter-tab"> 
70                <a href="#tab-categories-filter"> 
71                    <h6> 
72                        <@liferay.language key="filter-by-category" /> 
73                        <i id="filter-tab-icon" class="mdi mdi-chevron-down"></i> 
74                    </h6> 
75                </a> 
76            </li> 
77            <li class="filter-tab"> 
78                <a href="#tab-city-filter"> 
79                    <h6> 
80                        <@liferay.language key="city" /> 
81                        <i id="filter-tab-icon" class="mdi mdi-chevron-down"></i> 
82                    </h6> 
83                </a> 
84            </li> 
85            <li class="filter-tab"> 
86                <a href="#tab-format-filter"> 
87                    <h6> 
88                        <@liferay.language key="format" /> 
89                        <i id="filter-tab-icon" class="mdi mdi-chevron-down"></i> 
90                    </h6> 
91                </a> 
92            </li> 
93        </ul> 
94 
95        <div class="tab-content"> 
96                <@showFilterTab "Hauptkategorie" "tab-categories-filter" /> 
97                <@showFilterTab "Ort" "tab-city-filter" /> 
98                <@showFilterTab "Format" "tab-format-filter" /> 
99        </div> 
100    </div> 
101    <script> 
102        var initializeFilterTab = function() { 
103            YUI().use( 
104                    'aui-tabview', 
105                    function (Y) { 
106                        function onTabClick(e) { 
107                            var currentTarget = e.currentTarget; 
108                            if (currentTarget && currentTarget.classList.contains('active')) { 
109                                e.preventDefault(); 
110                                e.stopPropagation(); 
111                                tabview.deselectAll(); 
112
113
114 
115                        var tabview = new Y.TabView( 
116
117                                    srcNode: '#filter-tab-section-events' 
118
119                        ).render(); 
120                        tabview.deselectAll(); 
121                        $('.filter-tab').on('click', onTabClick); 
122 
123
124
125        }; 
126 
127        initializeFilterTab(); 
128        Liferay.on('assetPublisherLoadMoreSuccess', initializeFilterTab); 
129    </script> 
130    <div class="container-items"> 
131           <#if !entries?has_content> 
132                <div class="alert alert-info"> 
133                    <@liferay_ui["message"] key="there-are-no-results" /> 
134                </div> 
135           </#if> 
136        <#list entries as entry> 
137            <#assign 
138            assetRenderer = entry.getAssetRenderer() 
139            entryTitle = htmlUtil.escape(assetRenderer.getTitle(locale)) 
140            viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, entry, !stringUtil.equals(assetLinkBehavior, "showFullContent")) 
141            viewURL = httpUtil.removeParameter(viewURL, "redirect") 
142            /> 
143 
144            <#if assetRenderer.getClassName()=="com.liferay.journal.model.JournalArticle"> 
145                <#assign 
146                assetCategories = assetCategoryLocalService.getAssetEntryAssetCategories(entry.entryId) 
147                docXml = saxReaderUtil.read(assetRenderer.getArticle().getContent()) 
148                image = docXml.valueOf("//dynamic-element[@name='image']/dynamic-content/text()") 
149                startdate = docXml.valueOf("//dynamic-element[@name='startdate']/dynamic-content/text()") 
150                starttime = docXml.valueOf("//dynamic-element[@name='starttime']/dynamic-content/text()") 
151                enddate = docXml.valueOf("//dynamic-element[@name='enddate']/dynamic-content/text()") 
152                endtime = docXml.valueOf("//dynamic-element[@name='endtime']/dynamic-content/text()") 
153                eventlocation = docXml.valueOf("//dynamic-element[@name='eventlocation']/dynamic-content/text()") 
154                youtubeId = docXml.valueOf("//dynamic-element[@name='youtubeId']/dynamic-content/text()") 
155                /> 
156 
157            <div class="col-md-6 col-lg-4" itemscope itemtype="http://schema.org/Event"> 
158                 <@getEditIcon /> 
159 
160                <#assign startDateValue = "" /> 
161                <#assign endDateValue = "" /> 
162                <#if startdate?? && startdate?has_content> 
163                    <#assign startDateValue = startdate /> 
164                </#if> 
165                <#if enddate?? && enddate?has_content> 
166                    <#assign endDateValue = enddate /> 
167                </#if> 
168                <#assign startTimeValue = "" /> 
169                <#assign endTimeValue = "" /> 
170                <#if (starttime?? && starttime?has_content)> 
171                    <#assign startTimeValue = starttime /> 
172                </#if> 
173                <#if (endtime?? && endtime?has_content)> 
174                    <#assign endTimeValue = endtime /> 
175                </#if> 
176 
177                <#if startDateValue?has_content> 
178                    <span itemprop="startDate" content="<@formatIsoDateTime dateValue=startDateValue timeValue=startTimeValue />"></span> 
179                </#if> 
180                <#if endDateValue?has_content> 
181                    <span itemprop="endDate" content="<@formatIsoDateTime dateValue=endDateValue timeValue=endTimeValue />"></span> 
182                </#if> 
183 
184                <div class="asset-abstract card events"> 
185                    <img class="item-icon" src="${themeDisplay.getPathThemeImages()}/icons/icon_calendar.svg" alt="" /> 
186                    <#assign imageURL = "" /> 
187                    <#assign isYoutube = false /> 
188 
189                    <#if image?has_content> 
190                        <#assign imageURL = image /> 
191                        <#assign seoImageURL = portal.getPortalURL(themeDisplay) + imageURL /> 
192                    <#elseif youtubeId?has_content> 
193                        <#assign imageURL = "//i.ytimg.com/vi/${youtubeId}/maxresdefault.jpg" /> 
194                        <#assign seoImageURL = "https:" + imageURL /> 
195                        <#assign isYoutube = true /> 
196                    </#if> 
197                    <a href="${viewURL}" itemprop="url"><span 
198                            class="hide-accessible"><@liferay.language key="read-more" /> <@liferay.language key="about" />${entryTitle}</span> 
199                    <div class="aspect-ratio aspect-ratio-bg-cover" style="max-height: 300px;"> 
200                        <@createScaledImageTag imageURL=imageURL title=entryTitle seoImageURL=seoImageURL isYoutube=isYoutube/> 
201 
202                        <div class="img-filter"> 
203                            <div class="bg-box"> 
204                                <div class="card-content"> 
205                        <#if startdate?has_content> 
206                            <#assign 
207                            startDateObj = dateUtil.parseDate("yyyy-MM-dd", startdate, locale) 
208                            /> 
209                            <span class="metadata-entry metadata-startdate">${dayMonthYearFormat.format(startDateObj)}</span> 
210                        </#if> 
211 
212                        <span itemprop="location" itemscope itemtype="http://schema.org/Place"> 
213                            <#list assetCategories as assetCategory> 
214                                <#if assetVocabularyLocalService.fetchAssetVocabulary(assetCategory.vocabularyId)??> 
215                                    <#if ("Ort" == assetVocabularyLocalService.fetchAssetVocabulary(assetCategory.vocabularyId).name)> 
216                                        <span class="metadata-entry metadata-city location">${assetCategory.getTitle(locale)}</span> 
217                                        <span itemprop="name" content="${assetCategory.getTitle(locale)}"></span> 
218                                    </#if> 
219                                </#if> 
220                            </#list> 
221                            <#if eventlocation?? && eventlocation?has_content> 
222                                <span itemprop="address" content="${eventlocation}"></span> 
223                            </#if> 
224                        </span> 
225 
226                                    <h3 class="asset-title"> 
227                                            <span itemprop="name">${entryTitle}</span> 
228                                    </h3> 
229 
230                                    <div class="asset-summary" itemprop="description"> 
231                                        <#attempt> 
232                                            ${htmlUtil.escape(assetRenderer.getSummary(renderRequest, renderResponse))} 
233                                        <#recover> 
234 
235                                        </#attempt> 
236                                    </div> 
237 
238                                    <#list assetCategories as assetCategory> 
239                                        <#if assetVocabularyLocalService.fetchAssetVocabulary(assetCategory.vocabularyId)??> 
240                                            <#if ("Hauptkategorie" == assetVocabularyLocalService.fetchAssetVocabulary(assetCategory.vocabularyId).name)> 
241                                                <span class="category badge badge-default"> 
242                                                     ${assetCategory.getTitle(locale)} 
243                                                </span> 
244                                            </#if> 
245                                        </#if> 
246                                    </#list> 
247                                        <i class="mdi mdi-arrow-right"></i> 
248                                </div> 
249                            </div> 
250                        </div> 
251                    </div> 
252                    </a> 
253                </div> 
254            </div> 
255            </#if> 
256        </#list> 
257    </div> 
258</div> 
259 
260 
261<div id="events_list_mobile" class="events-mobile swiper-version recommendations padding-bottom-xs"> 
262    <div id="filter-tab-section-events-mobile"> 
263        <ul class="filter-tabs"> 
264            <li class="filter-tab"> 
265                <a href="#tab-categories-filter"> 
266                    <h6> 
267                        <@liferay.language key="filter-by-category" /> 
268                        <i id="filter-tab-icon" class="mdi mdi-chevron-down"></i> 
269                    </h6> 
270                </a> 
271            </li> 
272            <li class="filter-tab"> 
273                <a href="#tab-city-filter"> 
274                    <h6> 
275                        <@liferay.language key="city" /> 
276                        <i id="filter-tab-icon" class="mdi mdi-chevron-down"></i> 
277                    </h6> 
278                </a> 
279            </li> 
280            <li class="filter-tab"> 
281                <a href="#tab-format-filter"> 
282                    <h6> 
283                        <@liferay.language key="format" /> 
284                        <i id="filter-tab-icon" class="mdi mdi-chevron-down"></i> 
285                    </h6> 
286                </a> 
287            </li> 
288        </ul> 
289 
290        <div class="tab-content"> 
291                <@showFilterTab "Hauptkategorie" "tab-categories-filter" /> 
292                <@showFilterTab "Ort" "tab-city-filter" /> 
293                <@showFilterTab "Format" "tab-format-filter" /> 
294        </div> 
295    </div> 
296 
297    <script> 
298        var initializeFilterTabMobile = function() { 
299            YUI().use( 
300                    'aui-tabview', 
301                    function (Y) { 
302                        function onTabClick(e) { 
303                            var currentTarget = e.currentTarget; 
304                            if (currentTarget && currentTarget.classList.contains('active')) { 
305                                e.preventDefault(); 
306                                e.stopPropagation(); 
307                                tabview.deselectAll(); 
308
309
310 
311                        var tabview = new Y.TabView( 
312
313                                    srcNode: '#filter-tab-section-events-mobile' 
314
315                        ).render(); 
316                        tabview.deselectAll(); 
317                        $('.filter-tab').on('click', onTabClick); 
318 
319
320
321        }; 
322 
323        initializeFilterTabMobile(); 
324        Liferay.on('assetPublisherLoadMoreSuccess', initializeFilterTabMobile); 
325        Liferay.on('endNavigate', initializeFilterTabMobile); 
326    </script> 
327 
328    <div class="swiper-container event-list-swiper"> 
329        <!-- Additional required wrapper --> 
330    <#if !entries?has_content> 
331                <div class="alert alert-info"> 
332                    <@liferay_ui["message"] key="there-are-no-results" /> 
333                </div> 
334    <#else> 
335        <div class="swiper-wrapper"> 
336                        <#list entries as entry> 
337                            <#assign 
338                            assetRenderer = entry.getAssetRenderer() 
339                            entryTitle = htmlUtil.escape(assetRenderer.getTitle(locale)) 
340                            viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, entry, !stringUtil.equals(assetLinkBehavior, "showFullContent")) 
341                            viewURL = httpUtil.removeParameter(viewURL, "redirect") 
342                            /> 
343 
344                            <#if assetRenderer.getClassName()=="com.liferay.journal.model.JournalArticle" && entry?index < 4> 
345                                <#assign 
346                                assetCategories = assetCategoryLocalService.getAssetEntryAssetCategories(entry.entryId) 
347                                docXml = saxReaderUtil.read(assetRenderer.getArticle().getContent()) 
348                                image = docXml.valueOf("//dynamic-element[@name='image']/dynamic-content/text()") 
349                                youtubeId = docXml.valueOf("//dynamic-element[@name='youtubeId']/dynamic-content/text()") 
350                                startdate = docXml.valueOf("//dynamic-element[@name='startdate']/dynamic-content/text()") 
351                                /> 
352                         <div class="swiper-slide"> 
353                              <@getEditIcon /> 
354                             <div class="asset-abstract card events"> 
355                                 <img class="item-icon" 
356                                      src="${themeDisplay.getPathThemeImages()}/icons/icon_calendar.svg" alt=""/> 
357                    <#assign imageURL = "" /> 
358                    <#assign isYoutube = false /> 
359 
360                    <#if image?has_content> 
361                        <#assign imageURL = image /> 
362                        <#assign seoImageURL = portal.getPortalURL(themeDisplay) + imageURL /> 
363                    <#elseif youtubeId?has_content> 
364                        <#assign imageURL = "//i.ytimg.com/vi/${youtubeId}/maxresdefault.jpg" /> 
365                        <#assign seoImageURL = "https:" + imageURL /> 
366                        <#assign isYoutube = true /> 
367                    </#if> 
368                                 <a href="${viewURL}"><span 
369                                         class="hide-accessible"><@liferay.language key="read-more" /> <@liferay.language key="about" />${entryTitle}</span> 
370                                 <div class="aspect-ratio aspect-ratio-bg-cover" style="max-height: 300px;"> 
371                                     <@createScaledImageTag imageURL=imageURL title=entryTitle seoImageURL=seoImageURL isYoutube=isYoutube/> 
372                                     <div class="img-filter"> 
373                                         <div class="bg-box"> 
374                                             <div class="card-content"> 
375                        <#if startdate?has_content> 
376                            <#assign 
377                            startDateObj = dateUtil.parseDate("yyyy-MM-dd", startdate, locale) 
378                            /> 
379                            <span class="metadata-entry metadata-startdate">${dayMonthYearFormat.format(startDateObj)}</span> 
380                        </#if> 
381 
382                        <#list assetCategories as assetCategory> 
383                            <#if assetVocabularyLocalService.fetchAssetVocabulary(assetCategory.vocabularyId)??> 
384                                <#if ("Ort" == assetVocabularyLocalService.fetchAssetVocabulary(assetCategory.vocabularyId).name)> 
385                                    <span class="metadata-entry metadata-city location">${assetCategory.getTitle(locale)}</span> 
386                                </#if> 
387                            </#if> 
388                        </#list> 
389                                                 <h3 class="asset-title"> 
390                                                         <span>${entryTitle}</span> 
391                                                 </h3> 
392 
393                                                 <div class="asset-summary"> 
394                                                     ${htmlUtil.escape(assetRenderer.getSummary(renderRequest, renderResponse))} 
395                                                 </div> 
396 
397                                                <#list assetCategories as assetCategory> 
398                                                     <#if assetVocabularyLocalService.fetchAssetVocabulary(assetCategory.vocabularyId)??> 
399                                                        <#if ("Hauptkategorie" == assetVocabularyLocalService.fetchAssetVocabulary(assetCategory.vocabularyId).name)> 
400                                                            <span class="category badge badge-default"> 
401                                                                ${assetCategory.getTitle(locale)} 
402                                                            </span> 
403                                                        </#if> 
404                                                     </#if> 
405                                                </#list> 
406                                                     <i class="mdi mdi-arrow-right"></i> 
407                                             </div> 
408                                         </div> 
409                                     </div> 
410                                 </div> 
411                                 </a> 
412                             </div> 
413                         </div> 
414                            </#if> 
415                        </#list> 
416        </div> 
417        <!-- If we need pagination --> 
418        <div class="swiper-pagination"></div> 
419    </#if> 
420    </div> 
421 
422    <div class="col-md-12 center"> 
423        <a class="btn btn-outline show-more" href="/alle-events" data-senna-off="true"> <@liferay["language"] key="all-events" />&nbsp;<i class="mdi mdi-arrow-right"></i></a> 
424    </div> 
425</div> 
426<script> 
427    initSwiper('event-list-swiper', 'events_list_mobile'); 
428</script> 
429 
430 
431<#macro getEditIcon> 
432    <#if assetRenderer.hasEditPermission(themeDisplay.getPermissionChecker())> 
433        <#assign redirectURL = renderResponse.createRenderURL() /> 
434 
435        ${redirectURL.setParameter("mvcPath", "/add_asset_redirect.jsp")} 
436        ${redirectURL.setWindowState("pop_up")} 
437 
438        <#assign editPortletURL = assetRenderer.getURLEdit(renderRequest, renderResponse, windowStateFactory.getWindowState("pop_up"), redirectURL)!"" /> 
439 
440        <#if validator.isNotNull(editPortletURL)> 
441            <#assign title = languageUtil.format(locale, "edit-x", entryTitle, false) /> 
442 
443            <@liferay_ui["icon"] 
444            cssClass="icon-monospaced visible-interaction" 
445            icon="pencil" 
446            markupView="lexicon" 
447            message=title 
448            url="javascript:Liferay.Util.openWindow({id:'" + renderResponse.getNamespace() + "editAsset', title: '" + title + "', uri:'" + htmlUtil.escapeURL(editPortletURL.toString()) + "'});" 
449            /> 
450        </#if> 
451    </#if> 
452</#macro> 
453 
454<#function getYoutubeId youtubeUrl> 
455    <#assign url = httpUtil.getPath(youtubeUrl) /> 
456    <#assign url = stringUtil.extractLast(url, '/') /> 
457    <#return url /> 
458</#function> 
459 
460<#macro formatIsoDateTime dateValue="" timeValue=""> 
461    <#assign 
462    dateObj = dateUtil.parseDate("yyyy-MM-dd", dateValue, locale) 
463    /> 
464    <#if timeValue?? && timeValue?has_content> 
465        <#assign timeString = timeValue?replace('[A-Za-z]+', '', 'ri') /> 
466        <#assign timeString = timeValue?replace('\\.', ':', 'ri') /> 
467        <#assign timeString = timeString?trim /> 
468        <#assign dateAndTimeString = dateValue + " " + timeString /> 
469        <#attempt> 
470            <#assign 
471            dateObj = dateAndTimeString?datetime('yyyy-MM-dd HH:mm') 
472            /> 
473            <#recover> 
474        </#attempt> 
475    </#if> 
476    <#assign isoDateFormat = dateFormatFactory.getSimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ") /> 
477    ${isoDateFormat.format(dateObj)}</#macro> 
478 
479<#macro showFilterTab vocabulary id> 
480    <#assign 
481    globalGroup = groupLocalService.getGroup(companyId, companyId?c) 
482    articleCategoryVocabulary = assetVocabularyLocalService.getGroupVocabulary(globalGroup.groupId, vocabulary) 
483    allAssetCategories = assetCategoryLocalService.getVocabularyRootCategories(articleCategoryVocabulary.vocabularyId, -1, -1, null) 
484    /> 
485 
486    <div id="#${id}" class="tab-pane"> 
487        <div class="filter-list-container"> 
488            <ul class="filter-list"> 
489                <#list allAssetCategories as assetCategory> 
490                    <#if allCategoryIds?seq_contains(assetCategory.categoryId?c)> 
491                        <li class="filter-item"> 
492                            <#assign 
493                            categoryURL = renderResponse.createRenderURL() 
494                            VOID = categoryURL.setParameter("positionMarker", "true") 
495                            categoryURLCssClass = "btn filter-btn-outline btn-outline event-filter" 
496                            /> 
497                            <#if assetCategory.getCategoryId() == paramUtil.get(renderRequest, "categoryId", 0)> 
498                                <#assign categoryURLCssClass = "selected " + categoryURLCssClass /> 
499                            </#if> 
500                            <#assign 
501                            href = categoryURL.toString() 
502                            href = httpUtil.setParameter(href, renderResponse.getNamespace() + "categoryId", assetCategory.getCategoryId()?string) 
503                            href = httpUtil.setParameter(href, renderResponse.getNamespace() + "resetCur", "true") 
504                            /> 
505                            <a class="${categoryURLCssClass}" 
506                               href="${href}">${assetCategory.getTitle(locale)}</a> 
507                        </li> 
508                    </#if> 
509                </#list> 
510            </ul> 
511 
512            <#assign 
513            resetCategoryURL = renderResponse.createRenderURL() 
514            VOID = resetCategoryURL.setParameter("positionMarker", "true") 
515            href= resetCategoryURL.toString() 
516            href = httpUtil.setParameter(href, renderResponse.getNamespace() + "categoryId", "0") 
517            /> 
518 
519            <a href="${href}" class="btn"> 
520                Filter zurücksetzen 
521                <i class="mdi mdi-close"></i> 
522            </a> 
523        </div> 
524    </div> 
525 
526</#macro> 
527 
528<#function getScaledImageURL imageURL> 
529    <#assign 
530    imageFileUid = stringUtil.extractLast(imageURL, "/") 
531    /> 
532    <#if (stringUtil.extractFirst(imageFileUid, "t")??)> 
533        <#assign imageFileUid = stringUtil.extractFirst(imageFileUid, "t")/> 
534        <#assign imageFileUid= imageFileUid?substring(0,imageFileUid?length-1)/> 
535    </#if> 
536 
537    <#attempt> 
538        <#assign 
539        dlAppService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService") 
540        fileEntry = dlAppService.getFileEntryByUuidAndGroupId(imageFileUid,groupId)!"" 
541        /> 
542        <#if fileEntry??> 
543            <#assign 
544            scaledImageURL = "/o/adaptive-media/image/${fileEntry.fileEntryId?c}/720/${fileEntry.fileName}" 
545            /> 
546            <#return scaledImageURL /> 
547        <#else> 
548            <#return imageURL /> 
549        </#if> 
550        <#recover> 
551            <#return imageURL /> 
552    </#attempt> 
553</#function> 
554 
555<#macro createScaledImageTag imageURL title seoImageURL isYoutube> 
556    <img class="img lazy-image" data-src="${isYoutube?then(imageURL, getScaledImageURL(imageURL))}" title="${htmlUtil.escapeAttribute(title)}" alt="${htmlUtil.escapeAttribute(title)}" itemprop="image" content="${seoImageURL}" /> 
557</#macro>