Schulen machen mit
Fehler bei der Verarbeitung der Vorlage.
The following has evaluated to null or missing: ==> httpServletRequest.getCookies() [in template "20098#20124#ARTIKEL-HEADER" at line 17, column 24] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign cookies = httpServletRequest... [in template "20098#20124#ARTIKEL-HEADER" at line 17, column 5] ----
1<#import "/um-lr73-base-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" as common>
2<#import "/um-lr73-base-portal.web-resources_SERVLET_CONTEXT_/export.ftl" as export>
3
4<@export.includeExportStyles />
5
6<#assign domainHost = export.getDomainHost() />
7
8<#assign youtubeEnabled = false />
9
10<#if viewMode == "view">
11 <#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()>
12 <#assign httpServletRequest = serviceContext.getRequest()>
13 <#assign VOID = httpServletRequest.setAttribute("LIFERAY_SHARED_ARTICLE_HEADER_ID", .vars['reserved-article-id'].data) />
14 <#assign VOID = httpServletRequest.setAttribute("LIFERAY_SHARED_ARTICLE_HEADER_TITLE", .vars['reserved-article-title'].data) />
15 <#assign VOID = httpServletRequest.setAttribute("LIFERAY_SHARED_ARTICLE_HEADER_NAMESPACE", renderResponse.getNamespace()) />
16
17 <#assign cookies = httpServletRequest.getCookies() />
18 <#if validator.isNotNull(cookies)>
19 <#list cookies as cookie>
20 <#if (cookie.name == "ACCEPTED_COOKIE_YOUTUBE_ENABLED")>
21 <#if cookie.getValue() == "true">
22 <#assign youtubeEnabled = true />
23 <#break />
24 </#if>
25 </#if>
26 </#list>
27 </#if>
28</#if>
29
30<#assign title = .vars['reserved-article-title'].data />
31
32<div class="article">
33 <div class="main-content">
34 <#if Spitzmarke?? && Spitzmarke.data?has_content>
35 <#if viewMode == "view" || viewMode == "print">
36 <p class="spitzmarke">
37 ${Spitzmarke.data}
38 <#if show_modified_date?? && getterUtil.getBoolean(show_modified_date.data)>
39 <span class="info pull-right">${getLatestModifiedDate()}</span>
40 </#if>
41 </p>
42 <#elseif viewMode == "export">
43 <div class="spitzmarke">
44 <br/>
45 <table border="0" cellspacing="0" cellpadding="0" width="100%">
46 <tr>
47 <td align="left" style="text-transform: uppercase">
48 <b>${Spitzmarke.data}</b>
49 </td>
50 <#if show_modified_date?? && getterUtil.getBoolean(show_modified_date.data)>
51 <td align="right">
52 <b>${getLatestModifiedDate()}</b>
53 </td>
54 </#if>
55 </tr>
56 </table>
57
58 <hr color="#b2b2b0" size="1"/>
59 </div>
60 </#if>
61 </#if>
62
63 <h1 class="title">${title}</h1>
64
65 <#if Medientyp.getData()=="2" && Video.Vorschaubild.getData()!="">
66
67 <#assign videoId=Video.YoutubeCode.getData()/>
68
69 <#if videoId?starts_with("http")>
70 <#assign videoId = videoId?split("/")[3]>
71 </#if>
72
73 <#if Video.Vorschaubild??>
74
75 <#if Video.Vorschaubild?has_content>
76 <#if viewMode == "view" || viewMode == "print">
77 <div class="article-video">
78 <#if viewMode == "view">
79 <div class="video-box">
80 <div class="video" style="background-image: url(${Video.Vorschaubild.getData()});background-size: cover;padding-bottom:50%; ">
81 <#if youtubeEnabled>
82 <div class="video-trigger-icon" data-source="${videoId}"
83 title="Video abspielen">
84 <button style="border:none;" class="no-icon item-icon">
85 <span class="icon-um icon-um--play"
86 style="position:absolute; top:0; left:0;"></span>
87 </button>
88 </div>
89 </#if>
90 </div>
91 <#if youtubeEnabled>
92 <div class="video-trigger">
93 <p class="text-center video-trigger-overlay-text">
94 Um das Video zu sehen, müssen Sie es durch einen Klick aktivieren.
95 Dadurch werden Informationen an Youtube übermittelt und unter Umständen dort
96 verarbeitet. Bitte beachten Sie unsere Hinweise und Informationen zum <a
97 title="Zum Datenschutz" class="arrow-link"
98 href="<#if Video.Datenschutz.data?has_content>${Video.Datenschutz.getFriendlyUrl()}<#else>/datenschutz</#if>"><span
99 class="icon-um icon-um--chevron-right"></span><span
100 class="link-title">Datenschutz</span></a>.
101 </p>
102 </div>
103 <div class="video-layer" style="display: none">
104 <iframe src="" frameborder="0" allowfullscreen="" width="960"
105 height="480"></iframe>
106 </div>
107 </div>
108 </#if>
109 <#elseif viewMode == "print">
110 <img src="${Video.Vorschaubild.getData()}" class="img-responsive"/>
111 </#if>
112
113 <#if Video.Vorschaubild.BildunterschriftVideo.getData()!="">
114 <div class="summary">${Video.Vorschaubild.BildunterschriftVideo.getData()}</div>
115 </#if>
116 </div>
117 <#elseif viewMode == "export">
118 <@export.createExportImageTag jsonContent="${Video.Vorschaubild.data}" />
119 </#if>
120 </#if>
121 </#if>
122
123
124 <#else>
125 <#--Foto-->
126 <#if BildMitBildunterschrift??>
127
128 <#if BildMitBildunterschrift.getSiblings()?has_content>
129
130 <#if viewMode == "view" || viewMode == "print">
131 <#if (BildMitBildunterschrift.getSiblings()?size>1 && viewMode == "view") >
132 <@imageTextSlider/>
133 <#else>
134 <#list BildMitBildunterschrift.getSiblings() as cur_Bild>
135 <#if cur_Bild.Bild.getData()?has_content>
136 <div class="teaser-image no-carousel title-image">
137 <@common.createImageTag jsonContent="${cur_Bild.Bild.data}"/>
138
139 <#if cur_Bild.Bild.Bildunterschrift.getData()!="">
140 <div class="summary">${cur_Bild.Bild.Bildunterschrift.getData()}</div>
141 </#if>
142 </div>
143 <#if viewMode == "print">
144 <#break />
145 </#if>
146 </#if>
147 </#list>
148 </#if>
149 <#elseif viewMode == "export">
150 <#assign FirstImage = BildMitBildunterschrift.siblings?first />
151
152 <#if FirstImage.Bild.data?has_content>
153 <@export.createExportImageTag jsonContent=FirstImage.Bild.data bildunterschrift=FirstImage.Bild.Bildunterschrift.data />
154 </#if>
155 </#if>
156
157 </#if>
158
159 </#if>
160
161 </#if>
162 </div>
163</div>
164
165<#if viewMode == "print" || viewMode == "export">
166 <@includeArticleParts />
167</#if>
168<#if viewMode == "print">
169 <style>
170 @media print {
171 @page {
172 margin-bottom: 0;
173 }
174 }
175 </style>
176
177 <div class="print-footer">
178 ${portal.getCanonicalURL(themeDisplay.getPortalURL() + themeDisplay.getURLCurrent(), themeDisplay, layout, true, false)}
179 </div>
180</#if>
181<#if viewMode == "export">
182 <#assign url = portal.getCanonicalURL(themeDisplay.getPortalURL() + themeDisplay.getURLCurrent(), themeDisplay, layout, true, false) />
183 <div class="print-footer">
184 <hr color="#b2b2b0" size="1"/>
185
186 <p>
187 <center>Originalseite: <a href="${url}">${url}</a></center>
188 </p>
189 </div>
190</#if>
191
192<script>
193 var updateVideoWrapper = function () {
194 AUI().use('aui-base', function (A) {
195 A.all('.video-box').each(function (elem) {
196 elem.all('.video-trigger-icon').each(function (triggerElem) {
197 triggerElem.on(
198 'click',
199 function (event) {
200 if (event && event.target && event.target.get('nodeName') === 'A') {
201 return;
202 }
203
204 var youtubeId = triggerElem.getData('source');
205 var videoLayer = elem.one('.video-layer');
206 var iframe = videoLayer.one('iframe');
207 iframe.attr('src', 'https://www.youtube.com/embed/' + youtubeId);
208 triggerElem.hide();
209 videoLayer.show();
210 }
211 );
212 });
213 });
214 });
215 };
216
217 Liferay.on('endNavigate', updateVideoWrapper);
218 $(document).ready(updateVideoWrapper);
219</script>
220
221<#macro imageTextSlider>
222
223 <section class="image-slider" id="slider_artikel">
224
225 <div class="slides-list" aria-roledescription="Karusell">
226
227 <#list BildMitBildunterschrift.getSiblings() as cur_images>
228 <div class="slide" role="group" aria-roledescription="Folie"
229 aria-label="Folie ${cur_images?index + 1} von ${ BildMitBildunterschrift.getSiblings()?size}">
230 <div class="image">
231 <@common.createImageTag jsonContent="${cur_images.Bild.data}"/>
232 </div>
233 <#if cur_images.Bild.Bildunterschrift.getData()!="">
234 <div class="summary">
235 ${cur_images.Bild.Bildunterschrift.getData()}
236 </div>
237 </#if>
238 </div>
239 </#list>
240
241
242 </div>
243
244 </section>
245
246</#macro>
247
248<@common.initializeSlider wrapper="#slider_artikel" container="#slider_artikel .slides-list" loop=false/>
249
250<#macro includeArticleParts>
251 <#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
252
253 <#if article_parts?? && article_parts.article_part??>
254 <#list article_parts.article_part.siblings as part>
255 <#if part.data?has_content>
256 <#assign
257 contentInfo = part.data?eval
258 contentArticle = journalArticleLocalService.fetchLatestArticle(getterUtil.getLong(contentInfo.classPK))
259 />
260
261 ${journalContent.getContent(contentArticle.groupId, contentArticle.articleId, contentArticle.getDDMTemplateKey(), viewMode, locale.toString(), themeDisplay)}
262 </#if>
263 </#list>
264 </#if>
265</#macro>
266
267<#function getLatestModifiedDate>
268 <#assign
269 journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")
270 journalArticle = journalArticleLocalService.getLatestArticle(groupId, .vars['reserved-article-id'].data)
271 modifiedDate = journalArticle.modifiedDate
272 />
273 <#if article_parts?? && article_parts.article_part??>
274 <#list article_parts.article_part.siblings as part>
275 <#if part.data?has_content>
276 <#assign
277 contentInfo = part.data?eval
278 contentArticle = journalArticleLocalService.fetchLatestArticle(getterUtil.getLong(contentInfo.classPK))
279 />
280 <#if contentArticle.modifiedDate?long gt modifiedDate?long>
281 <#assign modifiedDate = contentArticle.modifiedDate />
282 </#if>
283 </#if>
284 </#list>
285 </#if>
286
287 <#return modifiedDate?datetime?string('dd.MM.yyyy') />
288</#function>