Asset Headline Events

Fehler bei der Verarbeitung der Vorlage.
Java method "com.liferay.journal.web.asset.JournalArticleAssetRenderer.getTitle(Locale)" threw an exception when invoked on com.liferay.journal.web.asset.JournalArticleAssetRenderer object "com.liferay.journal.web.asset.JournalArticleAssetRenderer@34eb5eb6"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: entryTitle = htmlUtil.escape(assetRen...  [in template "20115#20151#ASSET-HEADLINE-EVENTS" at line 15, column 9]
	- Reached through: #assign-container  [in template "20115#20151#ASSET-HEADLINE-EVENTS" at line 13, column 5]
----
1<#-- @ftlvariable name="journalArticle" type="com.liferay.journal.model.JournalArticle" --> 
2<#-- @ftlvariable name="entry" type="com.liferay.asset.kernel.model.AssetEntry" --> 
3<#-- @ftlvariable name="assetCategoryLocalService" type="com.liferay.asset.kernel.service.AssetCategoryLocalService" --> 
4<#-- @ftlvariable name="assetCategories" type="java.util.List<liferay.asset.kernel.model.AssetCategory>" --> 
5 
6<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()> 
7<#assign httpServletRequest = serviceContext.getRequest()> 
8<#assign 
9    entry = httpServletRequest.getAttribute('LIFERAY_SHARED_LAYOUT_ASSET_ENTRY')!"" 
10/> 
11 
12<#if entry?? && entry?has_content> 
13    <#assign 
14        assetRenderer = entry.getAssetRenderer() 
15        entryTitle = htmlUtil.escape(assetRenderer.getTitle(locale)) 
16    /> 
17    <#if assetRenderer.getClassName()=="com.liferay.journal.model.JournalArticle"> 
18        <#assign 
19            groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService") 
20            assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") 
21            assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") 
22            globalGroup = groupLocalService.getGroup(companyId, companyId?c) 
23            articleCategoryVocabularyArtikelKategorien = assetVocabularyLocalService.getGroupVocabulary(globalGroup.groupId, "Artikel Kategorien") 
24            assetCategories = assetCategoryLocalService.getAssetEntryAssetCategories(entry.entryId) 
25            dayMonthYearFormat = dateFormatFactory.getSimpleDateFormat("dd.MM.yyyy") 
26            journalArticle = assetRenderer.getArticle() 
27            displayDate = journalArticle.getDisplayDate() 
28            docXml = saxReaderUtil.read(assetRenderer.getArticle().getContent()) 
29            startdate = docXml.valueOf("//dynamic-element[@name='startdate']/dynamic-content/text()")!"" 
30            enddate = docXml.valueOf("//dynamic-element[@name='enddate']/dynamic-content/text()")!"" 
31        /> 
32 
33        <#if startdate?has_content> 
34            <#assign 
35              displayStartDate = dateUtil.parseDate("yy-MM-dd", startdate, locale) 
36            /> 
37        </#if> 
38        <#if enddate?has_content> 
39            <#assign 
40            displayEndDate = dateUtil.parseDate("yy-MM-dd", enddate, locale) 
41            /> 
42        </#if> 
43 
44 
45        <div class="asset-headline"> 
46            <span class="metadata-entry metadata-startdate"> 
47                <#if displayStartDate?? && displayStartDate?has_content> 
48                    ${dayMonthYearFormat.format(displayStartDate)} 
49                </#if> 
50                <#if (displayEndDate?? && displayEndDate?has_content)> 
51                    - ${dayMonthYearFormat.format(displayEndDate)} 
52                </#if> 
53            </span> 
54 
55            <h1 class="main-title"> 
56                ${entryTitle} 
57            </h1> 
58 
59            <#list assetCategories as assetCategory> 
60                <#if assetCategory.vocabularyId == articleCategoryVocabularyArtikelKategorien.vocabularyId> 
61                    <span class="category badge badge-default badge-sm"> 
62                        ${assetCategory.getTitle(locale)} 
63                    </span> 
64                </#if> 
65            </#list> 
66        </div> 
67    </#if> 
68</#if> 

Asset Publisher

Fehler bei der Verarbeitung der Vorlage.
Java method "com.sun.proxy.$Proxy438.getArticle(long, String)" threw an exception when invoked on com.sun.proxy.$Proxy438 object "com.liferay.journal.service.impl.JournalArticleLocalServiceImpl@67576a4f"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign journalArticle = journalArtic...  [in template "20115#20151#EVENT" at line 16, column 1]
----
1<#-- @ftlvariable name="journalArticleLocalService" type="com.liferay.journal.service.JournalArticleLocalService" --> 
2<#-- @ftlvariable name="assetEntryLocalService" type="com.liferay.asset.kernel.service.AssetEntryLocalService" --> 
3<#-- @ftlvariable name="assetCategoryLocalService" type="com.liferay.asset.kernel.service.AssetCategoryLocalService" --> 
4<#-- @ftlvariable name="journalArticle" type="com.liferay.journal.model.JournalArticle" --> 
5<#-- @ftlvariable name="assetEntry" type="com.liferay.asset.kernel.model.AssetEntry" --> 
6<#-- @ftlvariable name="assetCategories" type="java.util.List<liferay.asset.kernel.model.AssetCategory>" --> 
7 
8<#import "/digital-bw.web-resources_SERVLET_CONTEXT_/common_macros.ftl" as common> 
9 
10<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
11<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
12<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
13<#assign layoutSetLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutSetLocalService") /> 
14<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") /> 
15 
16<#assign journalArticle = journalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].data) /> 
17<#assign resourcePrimKey = journalArticle.resourcePrimKey /> 
18<#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", resourcePrimKey) /> 
19<#assign assetCategories = assetCategoryLocalService.getAssetEntryAssetCategories(assetEntry.entryId) /> 
20 
21<#assign serviceContextThreadLocal = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"] /> 
22<#assign serviceContext = serviceContextThreadLocal.getServiceContext() /> 
23<#assign httpServletRequest = serviceContext.getRequest() /> 
24 
25<#assign currentURL = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() /> 
26 
27<#assign namespace = randomNamespace /> 
28<#assign title = .vars['reserved-article-title'].data /> 
29 
30<#assign 
31    exportPdfURLObj = portletURLFactory.create(httpServletRequest, "com_liferay_journal_web_portlet_JournalPortlet", "2") 
32    void = exportPdfURLObj.setCopyCurrentRenderParameters(false) 
33    void = exportPdfURLObj.setResourceID("exportArticle") 
34    void = exportPdfURLObj.setParameter("groupId", scopeGroupId?c) 
35    void = exportPdfURLObj.setParameter("articleId", .vars['reserved-article-id'].data) 
36    void = exportPdfURLObj.setParameter("plid", themeDisplay.plid?c) 
37    void = exportPdfURLObj.setParameter("targetExtension", "pdf") 
38    void = exportPdfURLObj.setParameter("portletResource", themeDisplay.getPortletDisplay().getId()) 
39    exportPdfURL = exportPdfURLObj.toString() 
40    exportPdfURL = httpUtil.setParameter(exportPdfURL, "p_p_lifecycle", "2") 
41/> 
42 
43<#switch portal.getPortalURL(themeDisplay)> 
44    <#case "https://digital-bw.web.bwl.de"> 
45    <#case "https://digital-bw.landbw.de"> 
46    <#case "https://www.digital-bw.de"> 
47        <#assign domainHost = "http://web-digital-bw-liferay:8080" /> 
48        <#break> 
49    <#default> 
50        <#assign 
51        domainHost = portal.getPortalURL(themeDisplay) 
52        /> 
53</#switch> 
54 
55 
56<#assign 
57    layoutSet = layoutSetLocalService.getLayoutSet(groupId, layout.isPrivateLayout()) 
58    groupFriendlyURL = portal.getGroupFriendlyURL(layoutSet, themeDisplay) 
59    viewURL = "" 
60/> 
61<#if journalArticle.layoutUuid?has_content> 
62    <#assign 
63        viewURL = groupFriendlyURL + "/-/" + journalArticle.urlTitle 
64    /> 
65</#if> 
66 
67 
68<#if viewMode == "export"> 
69    <style type="text/css"> 
70        /* roboto-regular - latin */ 
71        @font-face { 
72            font-family: 'Roboto'; 
73            font-style: normal; 
74            font-weight: 400; 
75            src: url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-regular.eot'); /* IE9 Compat Modes */ 
76            src: local('Roboto'), local('Roboto-Regular'), 
77            url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 
78            url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ 
79            url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-regular.woff') format('woff'), /* Modern Browsers */ 
80            url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ 
81            url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-regular.svg#Roboto') format('svg'); /* Legacy iOS */ 
82
83        /* roboto-700 - latin */ 
84        @font-face { 
85            font-family: 'Roboto'; 
86            font-style: normal; 
87            font-weight: 700; 
88            src: url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-700.eot'); /* IE9 Compat Modes */ 
89            src: local('Roboto Bold'), local('Roboto-Bold'), 
90            url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 
91            url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-700.woff2') format('woff2'), /* Super Modern Browsers */ 
92            url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-700.woff') format('woff'), /* Modern Browsers */ 
93            url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-700.ttf') format('truetype'), /* Safari, Android, iOS */ 
94            url('${domainHost}/o/digital-bw-theme/fonts/roboto-v18-latin/roboto-v18-latin-700.svg#Roboto') format('svg'); /* Legacy iOS */ 
95
96 
97        /* montserrat-300 - latin */ 
98        @font-face { 
99            font-family: 'Montserrat'; 
100            font-style: normal; 
101            font-weight: 300; 
102            src: url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300.eot'); /* IE9 Compat Modes */ 
103            src: local('Montserrat Light'), local('Montserrat-Light'), 
104            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 
105            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300.woff2') format('woff2'), /* Super Modern Browsers */ 
106            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300.woff') format('woff'), /* Modern Browsers */ 
107            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300.ttf') format('truetype'), /* Safari, Android, iOS */ 
108            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300.svg#Montserrat') format('svg'), /* Legacy iOS */ 
109
110        /* montserrat-regular - latin */ 
111        @font-face { 
112            font-family: 'Montserrat'; 
113            font-style: normal; 
114            font-weight: 400; 
115            src: url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-regular.eot'); /* IE9 Compat Modes */ 
116            src: local('Montserrat Regular'), local('Montserrat-Regular'), 
117            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 
118            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ 
119            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-regular.woff') format('woff'), /* Modern Browsers */ 
120            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ 
121            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-regular.svg#Montserrat') format('svg'); /* Legacy iOS */ 
122
123        /* montserrat-700 - latin */ 
124        @font-face { 
125            font-family: 'Montserrat'; 
126            font-style: normal; 
127            font-weight: 700; 
128            src: url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700.eot'); /* IE9 Compat Modes */ 
129            src: local('Montserrat Bold'), local('Montserrat-Bold'), 
130            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 
131            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700.woff2') format('woff2'), /* Super Modern Browsers */ 
132            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700.woff') format('woff'), /* Modern Browsers */ 
133            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700.ttf') format('truetype'), /* Safari, Android, iOS */ 
134            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700.svg#Montserrat') format('svg'); /* Legacy iOS */ 
135
136        /* montserrat-700italic - latin */ 
137        @font-face { 
138            font-family: 'Montserrat'; 
139            font-style: italic; 
140            font-weight: 700; 
141            src: url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin-700italic.eot'); /* IE9 Compat Modes */ 
142            src: local('Montserrat Bold Italic'), local('Montserrat-BoldItalic'), 
143            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 
144            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700italic.woff2') format('woff2'), /* Super Modern Browsers */ 
145            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700italic.woff') format('woff'), /* Modern Browsers */ 
146            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700italic.ttf') format('truetype'), /* Safari, Android, iOS */ 
147            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-700italic.svg#Montserrat') format('svg'); /* Legacy iOS */ 
148
149 
150        /* montserrat-italic - latin */ 
151        @font-face { 
152            font-family: 'Montserrat'; 
153            font-style: italic; 
154            font-weight: 400; 
155            src: url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin-italic.eot'); /* IE9 Compat Modes */ 
156            src: local('Montserrat Italic'), local('Montserrat-Italic'), 
157            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 
158            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-italic.woff2') format('woff2'), /* Super Modern Browsers */ 
159            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-italic.woff') format('woff'), /* Modern Browsers */ 
160            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-italic.ttf') format('truetype'), /* Safari, Android, iOS */ 
161            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-italic.svg#Montserrat') format('svg'); /* Legacy iOS */ 
162
163 
164        /* montserrat-300italic - latin */ 
165        @font-face { 
166            font-family: 'Montserrat'; 
167            font-style: italic; 
168            font-weight: 300; 
169            src: url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300italic.eot'); /* IE9 Compat Modes */ 
170            src: local('Montserrat Light Italic'), local('Montserrat-LightItalic'), 
171            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 
172            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300italic.woff2') format('woff2'), /* Super Modern Browsers */ 
173            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300italic.woff') format('woff'), /* Modern Browsers */ 
174            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300italic.ttf') format('truetype'), /* Safari, Android, iOS */ 
175            url('${domainHost}/o/digital-bw-theme/fonts/montserrat-v12-latin/montserrat-v12-latin-300italic.svg#Montserrat') format('svg'); /* Legacy iOS */ 
176
177 
178 
179        h1, h2, h3, h4, h5, h6{ 
180            font-family: 'Montserrat', Helvetica, Arial, sans-serif; 
181
182        body { 
183            margin:0; 
184            padding:0; 
185            -webkit-text-size-adjust:none; 
186            -ms-text-size-adjust:none; 
187 
188            font-family: 'Roboto', Helvetica, Arial, sans-serif; 
189
190 
191        a, a:hover, a:focus, a:active { 
192            color: #202240; 
193
194 
195        .summary { 
196            font-size: 1.4em; 
197
198    </style> 
199    <title>${title}</title> 
200</#if> 
201 
202<div class="row row-70-30" itemscope itemtype="http://schema.org/Event"> 
203    <div class="col-md-8 portlet-column portlet-column-only section-2" id="column-2"> 
204        <div class="row-70-30-left"> 
205            <div class="event-details news-details" id="${namespace}"> 
206 
207                <#if viewMode == "export"> 
208                    <#assign 
209                    dayMonthYearFormat = dateFormatFactory.getSimpleDateFormat("dd.MM.yyyy") 
210                    /> 
211 
212                    <#if startdate?? && startdate.data?has_content> 
213                        <#assign 
214                        displayStartDate = dateUtil.parseDate("yyyy-MM-dd", startdate.data, locale) 
215                        /> 
216                    </#if> 
217                    <#if enddate?? && enddate.data?has_content> 
218                        <#assign 
219                        displayEndDate = dateUtil.parseDate("yyyy-MM-dd", enddate.data, locale) 
220                        /> 
221                    </#if> 
222 
223                    <div class="asset-headline"> 
224                        <b> 
225                            <#if displayStartDate?? && displayStartDate?has_content> 
226                                ${dayMonthYearFormat.format(displayStartDate)} 
227                            </#if> 
228                            <#if (displayEndDate?? && displayEndDate?has_content)> 
229                                - ${dayMonthYearFormat.format(displayEndDate)} 
230                            </#if> 
231                        </b> 
232 
233                        <h1 class="main-title"> 
234                            ${title} 
235                        </h1> 
236                    </div> 
237                </#if> 
238 
239                <#assign isoDateFormat = dateFormatFactory.getSimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ") /> 
240 
241                <#if viewMode == "view"> 
242                    <@liferay_util["html-top"] outputKey="opengraph"> 
243                        <meta property="og:title" content="${title?trim}" /> 
244                        <meta property="og:description" content="${.vars['reserved-article-description'].data}" /> 
245                        <meta property="og:url" content="${viewURL}" /> 
246                        <meta property="og:type" content="article" /> 
247 
248                        <#if image??> 
249                            <#assign 
250                            imageUrl = image.siblings[0].data 
251                            alt = image.siblings[0].getAttribute("alt")!"DigitalBW Event" 
252                            /> 
253                            <meta property="og:image" content="${portal.getPortalURL(themeDisplay)}${imageUrl}" /> 
254                            <meta property="og:image:alt" content="${alt}" /> 
255                        </#if> 
256                    </@> 
257                </#if> 
258 
259                <span itemprop="name" content="${title}"></span> 
260                <span itemprop="description" content="${.vars['reserved-article-description'].data}"></span> 
261 
262                 
263                         <div class="row" style="padding-top:20px"> 
264                            <div class="col-md-12"> 
265                               <div class="alert alert-warning" role="alert"><strong>Achtung:</strong> Als Schutzmaßnahme gegen das Coronavirus werden momentan viele Veranstaltungen abgesagt oder verschoben. Bitte prüfen Sie daher im Einzelfall, ob eine Veranstaltung tatsächlich stattfindet.</div> 
266                            </div> 
267                        </div> 
268 
269                <article class="events-desktop"> 
270                    <#if eventname?? && eventname.data?has_content> 
271                        <div class="summary">${eventname.data}</div> 
272                    </#if> 
273                    <div class="row"> 
274                        <div class="col-md-12"> 
275                            <#if image??> 
276                                <#if viewMode == "view"> 
277                                    <div class="image-gallery"> 
278                                        <div class="row"> 
279                                            <div id="${namespace}carousel"> 
280                                                <div class="carousel slide"> 
281                                                    <div class="carousel-inner"> 
282                                                        <#list image.siblings as curMedium> 
283                                                            <#if (curMedium?? && curMedium.data?has_content) || (curMedium.youtubeurl?? && curMedium.youtubeurl.data?has_content)> 
284                                                                <@showSlide image=curMedium counter=curMedium?counter youtubeurl=curMedium.youtubeurl externalvideo=curMedium.externalvideo/> 
285                                                            </#if> 
286                                                        </#list> 
287                                                    </div> 
288                                                </div> 
289                                            </div> 
290                                        </div> 
291 
292                                        <#if (image.siblings?size >1)> 
293                                            <div class="row"> 
294                                                <ul class="list-unstyled"> 
295                                                    <#list image.siblings as curMedium> 
296                                                        <#if (curMedium?? && curMedium.data?has_content) || (curMedium.youtubeurl?? && curMedium.youtubeurl.data?has_content)> 
297                                                            <@showGallery image=curMedium counter=curMedium?counter youtubeurl=curMedium.youtubeurl /> 
298                                                        </#if> 
299                                                    </#list> 
300                                                </ul> 
301                                            </div> 
302                                        </#if> 
303                                    </div> 
304                                <#elseif viewMode == "export"> 
305                                    <div class="image-gallery"> 
306                                        <br/> 
307                                        <#list image.siblings as curMedium> 
308                                            <#if (curMedium?? && curMedium.data?has_content)> 
309                                                <@createExportImageTag image=curMedium /> 
310                                            </#if> 
311                                        </#list> 
312                                    </div> 
313                                </#if> 
314                            </#if> 
315 
316                            <section class="article-body"> 
317                                <#if description?? && description.data?has_content> 
318                                    <div> 
319                                        ${description.data} 
320                                    </div> 
321                                </#if> 
322 
323                                <#if viewMode == "view"> 
324                                    <br style="clear: both"> 
325                                    <p class="source"> 
326                                        <a href="${exportPdfURL}" target="_blank"><i class="mdi mdi-download"></i>&nbsp;<@liferay["language"] key="save-as-pdf" /></a> 
327                                    </p> 
328                                </#if> 
329                            </section> 
330                        </div> 
331                    </div> 
332 
333                </article> 
334 
335                <#if viewMode == "view"> 
336                    <article class="events-mobile"> 
337                        <#if eventname?? && eventname.data?has_content> 
338                            <div class="summary">${eventname.data}</div> 
339                        </#if> 
340                        <#if image??> 
341                            <div class="image-gallery"> 
342                                <div class="row"> 
343                                    <div class="col-md-12"> 
344                                        <#if (image.siblings?size >1)> 
345                                            <div class="swiper-container events-swiper"> 
346                                                <div class="swiper-wrapper"> 
347                                                    <#list image.siblings as curMedium> 
348                                                        <#if (curMedium?? && curMedium.data?has_content) || (curMedium.youtubeurl?? && curMedium.youtubeurl.data?has_content)> 
349                                                            <@showSlide image=curMedium counter=curMedium?counter youtubeurl=curMedium.youtubeurl externalvideo=curMedium.externalvideo /> 
350                                                        </#if> 
351                                                    </#list> 
352                                                </div> 
353                                                <div class="swiper-pagination"></div> 
354                                            </div> 
355                                        <#else> 
356                                            <#list image.siblings as curMedium> 
357                                                <#if (curMedium?? && curMedium.data?has_content) || (curMedium.youtubeurl?? && curMedium.youtubeurl.data?has_content)> 
358                                                    <@showSlide image=curMedium counter=curMedium?counter youtubeurl=curMedium.youtubeurl externalvideo=curMedium.externalvideo /> 
359                                                </#if> 
360                                            </#list> 
361                                        </#if> 
362                                    </div> 
363                                </div> 
364                            </div> 
365 
366                        </#if> 
367 
368                        <section class="article-body"> 
369                            <#if description?? && description.data?has_content> 
370                                <div> 
371                                    ${description.data} 
372                                </div> 
373                            </#if> 
374                        </section> 
375 
376                    </article> 
377                </#if> 
378 
379                <footer> 
380                    <#if viewMode == "view"> 
381                        <div class="row"> 
382                            <div class="col-md-12"> 
383                                <#if srcUrl?? && srcUrl.data?has_content> 
384                                    <div class="link"> 
385                                        <a href="${srcUrl.data}" target="_blank" class="btn btn-outline" title="<@liferay.language key="go-to-event" />"> 
386                                            <@liferay.language key="go-to-event" /> 
387 
388                                            <i class="svg-icon open-in-new blue-button icomoon-button_link_external"></i> 
389                                        </a> 
390                                    </div> 
391                                </#if> 
392                            </div> 
393                        </div> 
394                    </#if> 
395                </footer> 
396            </div> 
397 
398        </div> 
399    </div> 
400 
401    <div class="col-md-6 portlet-column portlet-column-only news-matches section-3" id="column-3"> 
402        <div class="row-70-30-right event-details-data"> 
403 
404            <#if startdate?? && startdate.data?has_content> 
405                <div class="row events-data"> 
406                    <div class="col-md-12"> 
407 
408                        <h3 class="headline" style="text-align:left;"><@liferay["language"] key="when-question" /></h3> 
409 
410                        <div class="asset-abstract"> 
411                            <span class="metadata-entry metadata-startdate"> 
412                            <#assign startDateValue = "" /> 
413                                <#assign endDateValue = "" /> 
414                                <#if startdate?? && startdate.data?has_content> 
415                                    <#assign startDateValue = startdate.data /> 
416                                </#if> 
417                                <#if enddate?? && enddate.data?has_content> 
418                                    <#assign endDateValue = enddate.data /> 
419                                </#if> 
420                                <#if viewMode == "view"> 
421                                    <i class="icon-calendar"></i> 
422                                </#if> 
423                                <@formatDateRange startDateValue=startDateValue endDateValue=endDateValue /> 
424 
425                                <br/> 
426 
427                                <#assign startTimeValue = "" /> 
428                                <#assign endTimeValue = "" /> 
429                                <#if (starttime?? && starttime.data?has_content)> 
430                                    <#assign startTimeValue = starttime.data /> 
431                                </#if> 
432                                <#if (enddate.endtime?? && enddate.endtime.data?has_content)> 
433                                    <#assign endTimeValue = enddate.endtime.data /> 
434                                </#if> 
435                                <#if startTimeValue?? && startTimeValue?has_content> 
436                                    <#if viewMode == "view"> 
437                                        <i class="icon-time"></i> 
438                                    </#if> 
439                                    <@formatTimeRange startTimeValue=startTimeValue endTimeValue=endTimeValue /> 
440                                </#if> 
441 
442                            <br/> 
443                            </span> 
444 
445                            <span itemprop="startDate" content="<@formatIsoDateTime dateValue=startDateValue timeValue=startTimeValue />"></span> 
446                            <span itemprop="endDate" content="<@formatIsoDateTime dateValue=endDateValue timeValue=endTimeValue />"></span> 
447 
448                            <#if viewMode == "view"> 
449                                <#assign 
450                                ddmStructureEventIcalExportURL = portletURLFactory.create(httpServletRequest, "de_xdot_bw_im_digbw_portlet_DdmStructureEventIcalExportPortlet", "2") 
451                                void = ddmStructureEventIcalExportURL.setCopyCurrentRenderParameters(false) 
452                                void = ddmStructureEventIcalExportURL.setResourceID("/ddm/structure/event/ical") 
453                                void = ddmStructureEventIcalExportURL.setParameter("groupId", scopeGroupId?c) 
454                                void = ddmStructureEventIcalExportURL.setParameter("articleId", .vars['reserved-article-id'].data) 
455 
456                                exportURL = ddmStructureEventIcalExportURL.toString() 
457                                exportURL = httpUtil.setParameter(exportURL, "p_p_lifecycle", "2") 
458                                /> 
459 
460                                <a class="link" href="${exportURL}" target="_blank"> 
461                                    <div class="row asset-title-row"> 
462                                        <div class="col-xs-10"> 
463                                            <h3> 
464                                                <@liferay.language key="add-to-calendar" /> 
465                                            </h3> 
466                                        </div> 
467                                        <div class="col-xs-2"> 
468                                            <i class="svg-icon open-in-new right-column icomoon-button_link_external" title="<@liferay.language key="add-to-calendar" />"></i> 
469                                        </div> 
470                                    </div> 
471                                </a> 
472                            </#if> 
473                        </div> 
474                    </div> 
475                </div> 
476            </#if> 
477 
478            <#if showNoGeo?? && showNoGeo.data?has_content> 
479            <#else> 
480                <#if eventlocation?? && eventlocation.data?has_content> 
481 
482                    <div class="row events-data"> 
483                        <div class="col-md-12"> 
484                            <div itemprop="location" itemscope itemtype="http://schema.org/Place"> 
485 
486                                <h3 class="headline" style="text-align:left;"><@liferay["language"] key="where-question" /></h3> 
487 
488                                <#list assetCategories as assetCategory> 
489                                    <#if assetVocabularyLocalService.fetchAssetVocabulary(assetCategory.vocabularyId)??> 
490                                        <#if ("Ort" == assetVocabularyLocalService.fetchAssetVocabulary(assetCategory.vocabularyId).name)> 
491                                            <span itemprop="name" content="${assetCategory.getTitle(locale)}"></span> 
492                                        </#if> 
493                                    </#if> 
494                                </#list> 
495 
496 
497                                <div class="asset-abstract pre" itemprop="address"> 
498                                    <p>${htmlUtil.replaceNewLine(eventlocation.data)}</p> 
499 
500 
501                                    <#if viewMode == "view"> 
502                                        <#if geo?? && geo.data?has_content> 
503 
504                                            <#assign coordinatesJSONObject = jsonFactoryUtil.createJSONObject(geo.data) /> 
505                                            <#assign latitude = coordinatesJSONObject.getDouble("latitude") /> 
506                                            <#assign longitude = coordinatesJSONObject.getDouble("longitude") /> 
507                                            <div class="locate"> 
508                                                <a class="link" href="//maps.google.de/maps?daddr=${latitude?c},${longitude?c}&t=h&om=0&hl=de" target="_blank"> 
509                                                    <div class="row asset-title-row"> 
510                                                        <div class="col-xs-10"> 
511                                                            <h3> 
512                                                                <@liferay.language key="route-planner" /> 
513                                                            </h3> 
514                                                        </div> 
515                                                        <div class="col-xs-2"> 
516                                                           <i class="svg-icon open-in-new right-column icomoon-button_link_external" title="<@liferay.language key="route-planner" />"></i> 
517                                                        </div> 
518                                                    </div> 
519                                                </a> 
520                                            </div> 
521                                            <span itemprop="geo" itemscope itemtype="http://schema.org/GeoCoordinates"> 
522                                    <span itemprop="latitude" content="${latitude?c}"></span> 
523                                    <span itemprop="longitude" content="${longitude?c}"></span> 
524                                </span> 
525                                        </#if> 
526                                    </#if> 
527                                </div> 
528                            </div> 
529                        </div> 
530                    </div> 
531                </#if> 
532            </#if> 
533            <div class="row events-data"> 
534                <div class="col-md-12"> 
535                    <#if organizer?? && organizer.data?has_content 
536                    || addressFooter?? && addressFooter.data?has_content 
537                    || logoFooter?? && logoFooter.data?has_content> 
538                        <h3 class="headline" style="text-align:left;"> 
539                            <@liferay["language"] key="who-question" /> 
540                        </h3> 
541                    </#if> 
542                    <div itemprop="performer" itemscope itemtype="http://schema.org/PerformingGroup" class="asset-abstract noborder"> 
543                        <#if organizer?? && organizer.data?has_content> 
544                            <p itemprop="name">${organizer.data}</p> 
545                        </#if> 
546                        <#if addressFooter?? && addressFooter.data?has_content> 
547                            <p itemprop="address">${addressFooter.data}</p> 
548                        </#if> 
549                        <#if logoFooter?? && logoFooter.data?has_content> 
550                            <div class="logo-footer"> 
551                                <#if viewMode == "view"> 
552                                    <img alt="${logoFooter.getAttribute("alt")}" title="${logoFooter.getAttribute("alt")}" src="${logoFooter.data}"  /> 
553                                    <span itemprop="logo" content="${portal.getPortalURL(themeDisplay)}${logoFooter.data}"></span> 
554                                <#elseif viewMode == "export"> 
555                                    <@createExportImageTag image=logoFooter /> 
556                                </#if> 
557                            </div> 
558                        </#if> 
559                    </div> 
560                </div> 
561            </div> 
562 
563            <#if viewMode == "export"> 
564                <p align="center"> 
565                    <a href="${viewURL}">${viewURL}</a> 
566                </p> 
567            </#if> 
568 
569        </div> 
570    </div> 
571</div> 
572 
573<#if viewMode == "view"> 
574    <div class="share-buttons-section"> 
575        <div class="max-width"> 
576            <div class="row share-buttons"> 
577                <div class="col-md-12"> 
578                    <span class="text"><@liferay["language"] key="share" /></span> 
579                    <@liferay_ui["social-bookmarks"] 
580                    displayStyle="simple" 
581                    target="_blank" 
582                    title="${title}" 
583                    url="${portal.getCanonicalURL(currentURL, themeDisplay, layout)}" 
584                    /> 
585 
586                </div> 
587            </div> 
588        </div> 
589    </div> 
590</#if> 
591 
592<#if viewMode == "view"> 
593    <script> 
594        initSwiper('events-swiper', '${namespace}'); 
595    </script> 
596 
597    <script type="text/javascript"> 
598        var initializeCarousel = function() { 
599            $('#${namespace}carousel').carousel( 
600
601                    interval: 5000 
602
603            ); 
604 
605            $('[id^=${namespace}carousel-selector-]').click( 
606                function() { 
607                    var selector = $(this).attr('id'); 
608                    try { 
609                        var slideNumber = /-(\d+)$/.exec(selector)[1]; 
610                        $('#${namespace}carousel').carousel(parseInt(slideNumber)); 
611                    } catch (e) { 
612                        console.log(e); 
613
614
615            ); 
616        }; 
617 
618        $(document).ready(initializeCarousel); 
619        Liferay.on('endNavigate', initializeCarousel); 
620 
621        var initializeVideoPopup = function () { 
622            AUI().use('aui-base', 'aui-io-plugin-deprecated', 'liferay-util-window', 'aui-dialog-iframe-deprecated', function (A) { 
623                A.all('.video-link-popup').each(function (elem) { 
624                    elem.on( 
625                        'click', 
626                        function (e) { 
627                            e.preventDefault(); 
628                            var modal; 
629 
630                            var isMobile = Liferay.Browser.isMobile(); 
631 
632                            var externalvideo = e.currentTarget.getAttribute('data-externalvideo'); 
633                            var youtubeId = e.currentTarget.getAttribute('data-youtube-id'); 
634                            var youtubeUrl = 'https://www.youtube-nocookie.com/embed/'+ youtubeId +'?autoplay=1&rel=0&amp;controls=2&amp;showinfo=0&modestbranding=1'; 
635 
636                            var width = (window.innerWidth > 0) ? window.innerWidth : screen.width; 
637                            var height = width * 0.5625; 
638 
639                            var content = ""; 
640 
641                            if (isMobile) { 
642 
643                                if (externalvideo) { 
644                                    content = '<div class="embed-container">' + externalvideo + '</div>'; 
645                                } else { 
646                                    content = '<iframe ' + 
647                                        'src="' + youtubeUrl + '" ' + 
648                                        'frameborder="0" ' + 
649                                        'width="' + width + '" ' + 
650                                        'height="' + height + '" ' + 
651                                        'allow="autoplay; encrypted-media" ' + 
652                                        'allowfullscreen' + 
653                                        '></iframe>'; 
654
655 
656                                modal = new A.Modal( 
657
658                                        bodyContent: '<div class="mobile-video-container">' + 
659                                            content + 
660                                            '</div>', 
661                                        destroyOnHide: true, 
662                                        centered: true, 
663                                        modal: true, 
664                                        render: '#mobile-videos-modal', 
665                                        width: '100%', 
666                                        height: '100%', 
667                                        on: { 
668                                            render: function () { 
669                                                var docStyle = document.documentElement.style; 
670                                                var _this = this; 
671                                                docStyle.setProperty('pointer-events', 'none'); 
672                                                docStyle.setProperty('touch-action', 'none'); 
673                                                docStyle.setProperty('overflow-y', 'hidden'); 
674 
675                                                window.history.pushState(null, 'Video Popup', 'video-popup'); 
676                                                window.onpopstate = function () { 
677                                                    _this.destroy(); 
678                                                }; 
679                                            }, 
680                                            destroy: function () { 
681                                                var docStyle = document.documentElement.style; 
682                                                docStyle.removeProperty('pointer-events'); 
683                                                docStyle.removeProperty('touch-action'); 
684                                                docStyle.removeProperty('overflow-y'); 
685 
686                                                window.onpopstate = null; 
687 
688                                                var pathName = location.pathname; 
689                                                if (pathName.indexOf('video-popup') > -1) { 
690                                                    history.back(); 
691
692
693
694
695                                ).render(); 
696                            } else { 
697                                if (externalvideo) { 
698                                    content = '<div class="embed-container">' + externalvideo + '</div>'; 
699                                } else { 
700                                    content = ' <iframe src="https://www.youtube-nocookie.com/embed/' + youtubeId + '?autoplay=1&rel=0&amp;controls=2&amp;showinfo=0&modestbranding=1"' + 
701                                        '         frameborder="0"' + 
702                                        '         allow="autoplay; encrypted-media"' + 
703                                        '         allowfullscreen' + 
704                                        '         width="720"' + 
705                                        '         height="560"' + 
706                                        ' >' + 
707                                        ' </iframe>'; 
708
709 
710                                modal = Liferay.Util.openWindow( 
711
712                                        dialog: { 
713                                            width: width * 0.5, 
714                                            height: height * 0.5, 
715                                            centered: true, 
716                                            constrain2view: true, 
717                                            modal: true, 
718                                            resizable: false, 
719                                            moveable: false, 
720                                            destroyOnHide: true, 
721                                            close: true, 
722                                            cssClass: 'dialog-iframe-popup', 
723                                            bodyContent: '<div class="asset-full-content videos youtube-video"><div class="video-player">' + 
724                                                content + 
725                                                '            <button type="button"\n' + 
726                                                '                    class="btn-toolbar-button close close-content yui3-widget aui-button yui3-aui-button yui3-aui-button-content"\n' + 
727                                                '                    id="video-close-btn" role="button" onclick="closePopup(\'videoplayer\');">\n' + 
728                                                '                <svg class="lexicon-icon" focusable="false" viewBox="0 0 512 512">\n' + 
729                                                '                    <title>Schließen</title>\n' + 
730                                                '                    <path class="lexicon-icon-outline"\n' + 
731                                                '                          d="M295.781 256l205.205-205.205c10.998-10.998 10.998-28.814 0-39.781-10.998-10.998-28.815-10.998-39.781 0l-205.205 205.205-205.205-205.238c-10.966-10.998-28.814-10.998-39.781 0-10.998 10.998-10.998 28.814 0 39.781l205.205 205.238-205.205 205.205c-10.998 10.998-10.998 28.815 0 39.781 5.467 5.531 12.671 8.265 19.874 8.265s14.407-2.734 19.907-8.233l205.205-205.238 205.205 205.205c5.5 5.5 12.703 8.233 19.906 8.233s14.407-2.734 19.906-8.233c10.998-10.998 10.998-28.815 0-39.781l-205.238-205.205z"></path>\n' + 
732                                                '                </svg>\n' + 
733                                                '            </button>\n' + 
734                                                '</div></div>' 
735                                        }, 
736                                        dialogIframe: { 
737                                            scrolling: "no", 
738                                            verticalscrolling: "no", 
739                                            gutter: { 
740                                                bottom: "0", 
741                                                left: "0", 
742                                                right: "0", 
743                                                top: "0" 
744                                            }, 
745                                            on: { 
746                                                load: function (e) { 
747                                                    document.getElementById(e.windowName).setAttribute("scrolling", "no"); 
748                                                    $('#videoplayer').find('.modal-content').find('.modal-header').css('display', 'none'); 
749                                                    $("#" + e.windowName).contents().find("html").css("overflow", "hidden"); 
750                                                    this._host._fillHeight(); 
751
752
753                                        }, 
754                                        id: 'videoplayer' 
755
756                                ); 
757
758                            return false; 
759
760                    ); 
761                }); 
762 
763                Liferay.provide(window, 'closePopup', function (dialogId) { 
764                        var dialog = Liferay.Util.Window.getById(dialogId); 
765                        dialog.destroy(); 
766                    }, 
767                    [ 'liferay-util-window' ] 
768                ); 
769            }); 
770        }; 
771 
772        $(document).ready(initializeVideoPopup); 
773        Liferay.on('endNavigate', initializeVideoPopup); 
774 
775    </script> 
776</#if> 
777 
778<#macro formatDateRange startDateValue="" endDateValue=""> 
779    <#assign 
780        yearFormat = dateFormatFactory.getSimpleDateFormat("yyyy") 
781        monthFormat = dateFormatFactory.getSimpleDateFormat("MM") 
782        dayFormat = dateFormatFactory.getSimpleDateFormat("dd.") 
783        dayMonthFormat = dateFormatFactory.getSimpleDateFormat("dd. MMM.") 
784        dayMonthYearFormat = dateFormatFactory.getSimpleDateFormat("dd. MMM. yyyy") 
785    /> 
786    <#if startDateValue?? && startDateValue?has_content> 
787        <#assign startDateObj = dateUtil.parseDate("yyyy-MM-dd", startDateValue, locale)> 
788    </#if> 
789    <#if endDateValue?? && endDateValue?has_content> 
790        <#assign endDateObj = dateUtil.parseDate("yyyy-MM-dd", endDateValue, locale)> 
791    </#if> 
792    <#if startDateObj?? && startDateObj?has_content> 
793        <#if endDateObj?? && endDateObj?has_content> 
794            <#assign 
795                startDateYear = yearFormat.format(startDateObj) 
796                endDateYear = yearFormat.format(endDateObj) 
797            /> 
798            <#assign 
799                startDateMonth = monthFormat.format(startDateObj) 
800                endDateMonth = monthFormat.format(endDateObj) 
801            /> 
802            <#assign 
803                startDateDay = dayFormat.format(startDateObj) 
804                endDateDay = dayFormat.format(endDateObj) 
805            /> 
806            <#if startDateYear == endDateYear> 
807                <#if (startDateMonth == endDateMonth)> 
808                    <#if startDateDay == endDateDay> 
809                        ${dayMonthYearFormat.format(endDateObj)} 
810                    <#else> 
811                        ${dayFormat.format(startDateObj)} - ${dayMonthYearFormat.format(endDateObj)} 
812                    </#if> 
813                <#else> 
814                    ${dayMonthFormat.format(startDateObj)} - ${dayMonthYearFormat.format(endDateObj)} 
815                </#if> 
816            <#else> 
817                ${dayMonthYearFormat.format(startDateObj)} - ${dayMonthYearFormat.format(endDateObj)} 
818            </#if> 
819        <#else> 
820            ${dayMonthYearFormat.format(startDateObj)} 
821        </#if> 
822    </#if> 
823</#macro> 
824 
825<#macro formatTimeRange startTimeValue="" endTimeValue=""> 
826    <#if startTimeValue?? && startTimeValue?has_content> 
827        ${startTimeValue} 
828        <#if endTimeValue?? && endTimeValue?has_content> 
829            <@liferay["language"] key="until" /> 
830            ${endTimeValue} 
831        </#if> 
832        <@liferay["language"] key="o-clock" /> 
833    </#if> 
834</#macro> 
835 
836<#macro showSlide image counter youtubeurl externalvideo=""> 
837    <#assign alt = "" /> 
838    <#assign href = "" /> 
839    <#assign src = "" /> 
840    <#assign target = "" /> 
841    <#assign isvideo = false /> 
842 
843    <#if youtubeurl?? && youtubeurl.data?has_content> 
844        <#assign youtubeId = getYoutubeId(youtubeurl.data) /> 
845        <#assign href = "https://www.youtube.com/watch?v=${youtubeId}" /> 
846        <#assign target = "_blank" /> 
847        <#assign src = "//i.ytimg.com/vi/${youtubeId}/maxresdefault.jpg" /> 
848        <#assign isvideo = true /> 
849    </#if> 
850    <#if image?? && image.data?has_content> 
851        <#assign src = portal.getPortalURL(themeDisplay) + image.data /> 
852        <#assign alt = image.getAttribute("alt")!"DigitalBW News Artikel" /> 
853    </#if> 
854    <#if externalvideo?? && externalvideo?has_content && externalvideo.data?has_content> 
855        <#assign isvideo = true /> 
856        <#assign href = "javascript:void(0);" /> 
857    </#if> 
858    <div class="swiper-slide item ${(counter==1)?then('active', '')}" data-slide-number="${counter - 1}"> 
859        <#if href?has_content> 
860            <a href="${href}" target="${target}" <#if isvideo>class="video-link-popup"</#if> <#if youtubeurl?? && youtubeurl.data?has_content>data-youtube-id="${youtubeId}"</#if> <#if externalvideo?? && externalvideo?has_content && externalvideo.data?has_content>data-externalvideo="${htmlUtil.escapeAttribute(externalvideo.data)}"</#if>> 
861                <@common.showCopyright imageUrl=src alt=alt/> 
862                <span itemprop="image" content="${src}"></span> 
863                <#if isvideo> 
864                    <div class="svg-icon play-icon"></div> 
865                </#if> 
866            </a> 
867        <#else> 
868            <@common.showCopyright imageUrl=src alt=alt/> 
869            <span itemprop="image" content="${src}"></span> 
870            <#if isvideo> 
871                <div class="svg-icon play-icon"></div> 
872            </#if> 
873        </#if> 
874    </div> 
875</#macro> 
876 
877<#macro showGallery image counter youtubeurl> 
878    <#assign alt = "" /> 
879    <#assign src = "" /> 
880    <#assign target = "" /> 
881 
882    <#if youtubeurl?? && youtubeurl.data?has_content> 
883        <#assign youtubeId = getYoutubeId(youtubeurl.data) /> 
884        <#assign target = "_blank" /> 
885        <#assign src = "//i.ytimg.com/vi/${youtubeId}/hqdefault.jpg" /> 
886    </#if> 
887    <#if image?? && image.data?has_content> 
888        <#assign src = portal.getPortalURL(themeDisplay) + httpUtil.addParameter(image.data, "imageThumbnail", 1) /> 
889        <#assign alt = image.getAttribute("alt")!"DigitalBW Event" /> 
890    </#if> 
891 
892    <li class="col-md-3"> 
893        <a class="thumbnail" id="${namespace}carousel-selector-${counter-1}" href="javascript:void(0);"> 
894            <@common.showCopyright imageUrl=src alt=alt/> 
895        </a> 
896    </li> 
897</#macro> 
898 
899<#function getYoutubeId youtubeUrl> 
900    <#assign url = httpUtil.getPath(youtubeUrl) /> 
901    <#assign url = stringUtil.extractLast(url, '/') /> 
902    <#return url /> 
903</#function> 
904 
905<#macro formatIsoDateTime dateValue="" timeValue=""> 
906    <#if dateValue?has_content> 
907    <#assign 
908        dateObj = dateUtil.parseDate("yyyy-MM-dd", dateValue, locale) 
909    /> 
910    <#if timeValue?? && timeValue?has_content> 
911        <#assign timeString = timeValue?replace('[A-Za-z]+', '', 'ri') /> 
912        <#assign timeString = timeString?trim /> 
913        <#assign dateAndTimeString = dateValue + " " + timeString /> 
914        <#attempt> 
915            <#assign 
916                dateObj = dateAndTimeString?datetime('yyyy-MM-dd HH:mm') 
917            /> 
918            <#recover> 
919        </#attempt> 
920    </#if> 
921    <#assign isoDateFormat = dateFormatFactory.getSimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ") /> 
922${isoDateFormat.format(dateObj)}</#if></#macro> 
923 
924<#macro createExportImageTag image> 
925    <#assign 
926    imageUrl = image.data 
927    alt = image.getAttribute("alt")!"DigitalBW News Artikel" 
928    imageFileUid = stringUtil.extractLast(imageUrl, "/") 
929    /> 
930    <#if (stringUtil.extractFirst(imageFileUid, "t")??)> 
931        <#assign imageFileUid = stringUtil.extractFirst(imageFileUid, "t")/> 
932        <#assign imageFileUid= imageFileUid?substring(0,imageFileUid?length-1)/> 
933    </#if> 
934    <#assign 
935    dlAppService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService") 
936    fileEntry = dlAppService.getFileEntryByUuidAndGroupId(imageFileUid,groupId) 
937    inputStream = fileEntry.getContentStream() 
938    imageModel = imageToolUtil.getImage(inputStream) 
939    /> 
940    <#assign 
941    width = imageModel.getWidth() 
942    height = imageModel.getHeight() 
943    aspectRatio = width / height 
944    /> 
945    <#if width gt 650> 
946        <#assign 
947        height = 650 / aspectRatio 
948        width = 650 
949        /> 
950    </#if> 
951    <img src="${imageUrl}" alt="${htmlUtil.escapeAttribute(alt)}" title="${htmlUtil.escapeAttribute(alt)}" width="${width}" height="${height}"/> 
952</#macro> 
953 
954<#macro createExportImageTag image> 
955    <#assign 
956        imageUrl = image.data 
957        alt = image.getAttribute("alt")!"DigitalBW Event" 
958        imageFileUid = stringUtil.extractLast(imageUrl, "/") 
959    /> 
960    <#if (stringUtil.extractFirst(imageFileUid, "t")??)> 
961        <#assign imageFileUid = stringUtil.extractFirst(imageFileUid, "t")/> 
962        <#assign imageFileUid= imageFileUid?substring(0,imageFileUid?length-1)/> 
963    </#if> 
964    <#assign 
965        dlAppService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService") 
966        fileEntry = dlAppService.getFileEntryByUuidAndGroupId(imageFileUid,groupId) 
967        inputStream = fileEntry.getContentStream() 
968        imageModel = imageToolUtil.getImage(inputStream) 
969    /> 
970    <#assign 
971        width = imageModel.getWidth() 
972        height = imageModel.getHeight() 
973        aspectRatio = width / height 
974    /> 
975    <#if width gt 650> 
976        <#assign 
977            height = 650 / aspectRatio 
978            width = 650 
979        /> 
980    </#if> 
981    <#switch portal.getPortalURL(themeDisplay)> 
982        <#case "https://digital-bw.web.bwl.de"> 
983        <#case "https://digital-bw.landbw.de"> 
984        <#case "https://www.digital-bw.de"> 
985            <#assign domainHost = "http://web-digital-bw-liferay:8080" /> 
986            <#break> 
987        <#default> 
988            <#assign 
989            domainHost = portal.getPortalURL(themeDisplay) 
990            /> 
991    </#switch> 
992    <img src="${domainHost}${imageUrl}" alt="${htmlUtil.escapeAttribute(alt)}" title="${htmlUtil.escapeAttribute(alt)}" width="${width}" height="${height}"/> 
993</#macro> 

Eventempfehlungen

Eventempfehlungen

Asset Publisher