An error occurred while processing the template.
The following has evaluated to null or missing: ==> fileDataHelperUtil.getAltText(contentBlock.quoteImage.getAttribute("fileEntryId")?number, locale) [in template "20097#20123#97091" at line 139, column 108] ---- 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: ${fileDataHelperUtil.getAltText(conte... [in template "20097#20123#97091" at line 139, column 106] ----
1<#-- Structure: News -->
2
3<#setting locale=locale.toString()>
4<#if locale == "en_US">
5 <#setting date_format="dd MMMM YYYY">
6<#else>
7 <#setting date_format="dd. MMMM YYYY">
8</#if>
9<#setting datetime_format="yyyy-MM-dd, HH':'mm">
10
11<#assign liferayDateFormat = "EEE, dd MMM yyyy hh:mm:ss zzz" />
12<#assign preeContactLimit = 3 />
13
14<#assign assetService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryService")>
15<#assign assetCategoryLocalService = serviceLocator.findService('com.liferay.asset.kernel.service.AssetCategoryLocalService')>
16<#assign journalLocalService = serviceLocator.findService('com.liferay.journal.service.JournalArticleLocalService')>
17
18<#assign version = .vars['reserved-article-version'].data?number?double />
19<#assign journalArticleId = .vars['reserved-article-id'].data>
20<#assign item = journalLocalService.getArticle(groupId, journalArticleId, version)>
21<#assign categoryList= assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", item.getResourcePrimKey()?number)>
22
23<#list categoryList as category>
24 <#if ! category.isRootCategory() >
25 <#assign categoryParent = category.getParentCategory() />
26 <#break>
27 </#if>
28</#list>
29
30<article class="news-detail" itemscope itemtype="https://schema.org/NewsArticle">
31 <header class="news-detail__header text-center">
32 <div class="d-flex flex-column container container-fluid-max-xl">
33 <div class="content-66">
34
35 <#setting locale = 'de_De'>
36 <#if .vars["reserved-article-display-date"]?exists>
37 <#assign displayDate = .vars["reserved-article-display-date"].data />
38 <#else>
39 <#assign displayDate = .vars["reserved-article-modified-date"].data />
40 </#if>
41 <#assign displayDateOutput = displayDate?datetime(liferayDateFormat)?date/>
42 <#assign displayGoogleDateTime = displayDate?datetime(liferayDateFormat)?string.iso/>
43 <#assign displayGoogleDate = displayDate?datetime(liferayDateFormat)?string["yyyy-MM-dd"]/>
44 <#setting locale=locale.toString()>
45
46 <div class="news-detail__meta displaydate overline" itemprop="datePublished" content="${displayGoogleDateTime}">
47 <#if categoryParent?? >${categoryParent.getTitle(locale)} / </#if>
48 <time datetime="${displayGoogleDate}">${displayDateOutput}</time>
49 </div>
50
51 <h1 class="news-detail__title h2" itemprop="headline">${.vars['reserved-article-title'].data}</h1>
52
53 <div class="news-detail__share">
54 <p class="sr-only">Diesen Artikel teilen:</p>
55 <ul class="news-detail__share-list d-flex justify-content-center">
56 <li class="news-detail__share-item">
57 <a rel="nofollow" class="news-detail__share-link news-detail__share-link--facebook" target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=${friendlyURL!""}">
58 <svg class="news-detail__share-icon" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="44" height="44" viewBox="0 0 44 44">
59 <path d="M22 44C9.9 44 0 34.1 0 22S9.9 0 22 0s22 9.9 22 22-9.9 22-22 22zm0-42C11 2 2 11 2 22s9 20 20 20 20-9 20-20S33 2 22 2z"/>
60 <path class="news-detail__share-icon--symbol" d="M23 32.8h-4c-.4 0-.8-.3-.8-.8v-7.2H16c-.4 0-.8-.3-.8-.8v-4c0-.4.3-.8.8-.8h2.2V17c0-1.5.6-3 1.7-4.1 1.1-1.1 2.5-1.7 4.1-1.7h3c.4 0 .8.3.8.8v4c0 .4-.3.8-.8.8h-3c-.1 0-.1 0-.2.1 0 0-.1.1-.1.2v2.2H27c.2 0 .4.1.6.3.1.2.2.4.1.6l-1 4c-.1.3-.4.6-.7.6h-2.2V32c0 .4-.4.8-.8.8zm-3.2-1.5h2.5V24c0-.4.3-.8.8-.8h2.4l.6-2.5h-3c-.4 0-.8-.3-.8-.8v-3c0-.5.2-.9.5-1.2.3-.3.8-.5 1.2-.5h2.2v-2.5H24c-1.1 0-2.2.4-3 1.2-.8.8-1.2 1.9-1.2 3v3c0 .4-.3.8-.8.8h-2.2v2.5H19c.4 0 .8.3.8.8v7.3z"/>
61 </svg>
62 <span class="sr-only">Per Facebook teilen</span>
63 </a>
64 </li>
65 <li class="news-detail__share-item">
66 <a rel="nofollow" class="news-detail__share-link news-detail__share-link--linkedin" target="_blank" href="http://www.linkedin.com/shareArticle?mini=true&url=${friendlyURL!""}&title=${.vars['reserved-article-title'].data}">
67 <svg class="news-detail__share-icon" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="44" height="44" viewBox="0 0 44 44">
68 <path d="M22 44C9.9 44 0 34.1 0 22S9.9 0 22 0s22 9.9 22 22-9.9 22-22 22zm0-42C11 2 2 11 2 22s9 20 20 20 20-9 20-20S33 2 22 2z"/>
69 <path class="news-detail__share-icon--symbol" d="M31.2 32.8c-.9 0-1.6-.7-1.6-1.6v-6c0-1.1-.4-2-1.2-2.7-.7-.6-1.7-.9-2.8-.9-1.5 0-4 .8-4 3.6v6c0 .9-.7 1.6-1.6 1.6-.9 0-1.6-.7-1.6-1.6V18.3c0-.9.7-1.6 1.6-1.6.9 0 1.6.7 1.6 1.6v1.2c1.2-.7 2.6-1.1 4-1.1 3.5 0 7.1 2.3 7.1 6.7v6c.1 1-.6 1.7-1.5 1.7zM12.8 14.4c-.4 0-.7-.1-1-.4-.6-.6-.7-1.6-.1-2.2.6-.6 1.6-.7 2.2-.1.6.6.7 1.6.1 2.2-.3.3-.8.5-1.2.5zM14.4 31c0 .9-.7 1.6-1.6 1.6s-1.6-.7-1.6-1.6V18.1c0-.9.7-1.6 1.6-1.6s1.6.7 1.6 1.6V31z"/>
70 </svg>
71 <span class="sr-only">Per LinkedIn teilen</span>
72 </a>
73 </li>
74 <li class="news-detail__share-item">
75 <a rel="nofollow" class="news-detail__share-link news-detail__share-link--xing" target="_blank" href="https://www.xing.com/spi/shares/new?url=${friendlyURL!""}">
76 <svg class="news-detail__share-icon" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" width="44" height="44" viewBox="0 0 44 44">
77 <path d="M22 44C9.9 44 0 34.1 0 22S9.9 0 22 0s22 9.9 22 22-9.9 22-22 22zm0-42C11 2 2 11 2 22s9 20 20 20 20-9 20-20S33 2 22 2z"/>
78 <path class="news-detail__share-icon--symbol" d="M16.3 26.4h-3.2c-.2 0-.3-.1-.4-.2-.1-.1-.1-.3 0-.5l3.4-5.9-2.2-3.8c-.1-.2-.1-.4 0-.5.1-.1.2-.2.4-.2h3.2c.5 0 .7.3.9.6l2.2 3.8c-.1.2-3.4 6.1-3.4 6.1-.2.3-.4.6-.9.6zm15-14.8-7 12.5 4.5 8.2c.1.2.1.4 0 .5-.1.2-.3.2-.4.2h-3.2c-.5 0-.7-.3-.9-.6l-4.5-8.3c.2-.4 7.1-12.5 7.1-12.5.2-.3.4-.6.9-.6H31c.2 0 .3.1.4.2 0 .1 0 .3-.1.4z"/>
79 </svg>
80 <span class="sr-only">Per Xing teilen</span>
81 </a>
82 </li>
83 </ul>
84 </div>
85
86 <#if (titleimage.getData())?? && titleimage.getData() != "" && getterUtil.getBoolean(showImageOnWebsite.getData())>
87 <figure class="news-detail__title-image-wrapper" itemscope itemtype="https://schema.org/ImageObject">
88 <img class="news-detail__title-image rounded" alt="${fileDataHelperUtil.getAltText(titleimage.getAttribute("fileEntryId")?number, locale)}" data-fileentryid="${titleimage.getAttribute("fileEntryId")}" src="${titleimage.getData()}" />
89 <meta itemprop="url" content="${titleimage.getData()}" />
90
91 <#assign copyright = fileDataHelperUtil.getCreditText(titleimage.getAttribute("fileEntryId")?number, locale) />
92 <#if copyright?? && copyright?has_content>
93 <figcaption class="news-detail__title-image-caption">${copyright}</figcaption>
94 </#if>
95
96 </figure>
97 </#if>
98
99 </div>
100 </div>
101 </header>
102
103 <section class="news-detail__body" itemprop="articleBody">
104 <div class="container container-fluid-max-xl">
105 <div class="content-66">
106
107 <#if (teaserText.getData())?? && (teaserText.getData())?has_content>
108 <div class="news-detail__intro h5" itemprop="description">
109 ${teaserText.getData()}
110 </div>
111 </#if>
112
113 <#if Feldergruppen88124806.getSiblings()?has_content>
114 <#list Feldergruppen88124806.getSiblings() as contentBlock>
115
116 <#if (contentBlock.richText.getData())?? && (contentBlock.richText.getData())?has_content>
117 <div class="news-detail__content-block text">
118 ${contentBlock.richText.getData()}
119 </div>
120 </#if>
121
122 <#if (contentBlock.image.getData())?? && contentBlock.image.getData() != "">
123 <figure class="news-detail__content-block news-detail__image">
124 <img alt="${fileDataHelperUtil.getAltText(contentBlock.image.getAttribute("fileEntryId")?number, locale)}" data-fileentryid="${contentBlock.image.getAttribute("fileEntryId")}" src="${contentBlock.image.getData()}" />
125
126 <#assign copyright = fileDataHelperUtil.getCreditText(contentBlock.image.getAttribute("fileEntryId")?number, locale) />
127 <#if copyright?? && copyright?has_content>
128 <figcaption class="copyright">${copyright}</figcaption>
129 </#if>
130
131 </figure>
132 </#if>
133
134 <#if (contentBlock.quoteText.getData())?? && (contentBlock.quoteText.getData())?has_content>
135
136 <div class="news-detail__content-block news-detail__quote">
137
138 <#if (contentBlock.quoteImage.getData())?? && contentBlock.quoteImage.getData() != "">
139 <img class="news-detail__quote-image rounded-circle square" alt="${fileDataHelperUtil.getAltText(contentBlock.quoteImage.getAttribute("fileEntryId")?number, locale)}" data-fileentryid="${contentBlock.quoteImage.getAttribute("fileEntryId")}" src="${contentBlock.quoteImage.getData()}" />
140 <#else>
141 <svg class="news-detail__quote-svg "width="61" height="51" viewBox="0 0 61 51" fill="none" xmlns="http://www.w3.org/2000/svg">
142 <path opacity="0.16" d="M16.7687 0C5.14682 0 0.664107 12.1957 6.80709 19.1646C12.1199 25.0248 11.4558 31.9938 0 43.5559L8.79941 51C39.8464 25.1832 32.3752 0 16.7687 0Z" fill="#5E5E5E"/>
143 <path opacity="0.16" d="M46.9228 0C35.3877 0 30.9384 12.1957 37.0356 19.1646C42.3088 25.0248 41.6496 31.9938 30.2793 43.5559L39.013 51C69.8283 25.1832 62.4129 0 46.9228 0Z" fill="#5E5E5E"/>
144 </svg>
145 </#if>
146
147 <blockquote class="news-detail__quote-text">
148 ${contentBlock.quoteText.getData()}
149 </blockquote>
150 </div>
151 </#if>
152 </#list>
153 </#if>
154
155 <#if (video.getData())?? && (video.getData())?has_content>
156 <#assign document = saxReaderUtil.read(item.getContentByLocale(locale.toString())) />
157 <#assign rootElement = document.getRootElement() />
158 <#assign videoContent = (rootElement.selectSingleNode("dynamic-element[@field-reference='video']").getStringValue())!""/>
159 <#assign videoJson = jsonFactoryUtil.createJSONObject(videoContent) />
160
161 <figure class="news-detail__content-block news-detail__video-wrapper">
162
163 <#if (videoJson.extension)?? && (videoJson.extension)?has_content>
164 <video class="news-detail__video video" controls>
165 <source src="${video.getData()}">
166 Your browser does not support the video tag.
167 </video>
168 <#else>
169 <div class="news-detail__video video video-external">
170 ${videoJson.html}
171 </div>
172 </#if>
173
174 </figure>
175 </#if>
176
177 </div>
178 </div>
179 </section>
180 <#if pressContact.getSiblings()?has_content>
181 <footer class="news-detail__footer">
182 <#list pressContact.getSiblings() as cur_pressContact>
183 <#if preeContactLimit gt 0>
184 <#assign preeContactLimit = preeContactLimit -1/>
185 <#assign pressContactData = jsonFactoryUtil.createJSONObject(cur_pressContact.getData())/>
186 <#if cur_pressContact.getData()?has_content>
187 <#attempt>
188 <#assign pressContactAsset = assetService.getEntry(cur_pressContact.getData()?eval.assetEntryId?number)>
189
190 <#assign image = assetHelperUtil.getValueFromContent(pressContactAsset, "image")>
191 <#if image?? && image.getString(locale)??>
192 <#assign imageJson = jsonFactoryUtil.createJSONObject(image.getString(locale))/>
193 <#assign imageUrl = "" />
194 <#if imageJson.url?? && imageJson.url?has_content>
195 <#assign imageUrl = imageJson.url />
196 </#if>
197 </#if>
198
199 <#assign firstName = assetHelperUtil.getValueFromContent(pressContactAsset, "firstName")>
200 <#assign lastName = assetHelperUtil.getValueFromContent(pressContactAsset, "lastName")>
201 <#assign function = assetHelperUtil.getValueFromContent(pressContactAsset, "function")>
202 <#assign phone = assetHelperUtil.getValueFromContent(pressContactAsset, "phone")>
203 <#assign email = assetHelperUtil.getValueFromContent(pressContactAsset, "email")>
204
205 <div class="container container-fluid-max-xl">
206 <#if cur_pressContact.getData()??>
207 <div class="news-detail__press-contact press-contact text-center" itemscope itemprop="author" itemtype="https://schema.org/Person">
208 <#if imageJson?? && imageJson?has_content && imageJson.fileEntryId??>
209 <div class="press-contact__img-wrapper">
210 <img class="press-contact__img rounded-circle" alt="${fileDataHelperUtil.getAltText(imageJson.fileEntryId?number, locale)}" data-fileentryid="${imageJson.fileEntryId}" src="${imageUrl}" itemprop="image" />
211 </div>
212 <meta itemprop="name" content="${firstName} ${lastName}">
213 <meta itemprop="url" content="${imageUrl}" />
214 </#if>
215 <dl class="press-contact__name h5">
216 <dt class="sr-only">Name: </dt>
217 <dd>
218 <#if firstName?? && firstName.getString(locale)??>
219 ${firstName.getString(locale)}
220 </#if>
221 <#if lastName?? && lastName.getString(locale)??>
222 ${lastName.getString(locale)}
223 </#if>
224 </dd>
225 </dl>
226 <#if function?? && function.getString(locale)??>
227 <dl class="press-contact__position">
228 <dt class="sr-only">Position: </dt>
229 <dd>${function.getString(locale)}</dd>
230 </dl>
231 </#if>
232 <#if phone?? && phone.getString(locale)??>
233 <dl class="press-contact__phone">
234 <dt class="sr-only">Telephone: </dt>
235 <dd>${phone.getString(locale)}</dd>
236 </dl>
237 </#if>
238 <#if email?? && email.getString(locale)??>
239 <dl class="press-contact__email">
240 <dt class="sr-only">Email: </dt>
241 <dd><a href="mailto:${email.getString(locale)}">${email.getString(locale)}</a></dd>
242 </dl>
243 </#if>
244 </div>
245 </#if>
246 </div>
247 <#recover>
248 ${.error}
249 </#attempt>
250 </#if>
251 </#if>
252 </#list>
253 </footer>
254 </#if>
255
256</article>