An error occurred while processing the template.
The following has evaluated to null or missing:
==> formField.getValue().getString(locale)  [in template "blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" at line 56, column 49]

----
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 Bildnachweis = formField.getV...  [in template "blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" in function "getCopyrightText" at line 56, column 25]
----
1<#import "/blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" as common> 
2 
3<#assign layoutService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") /> 
4<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
5<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
6<#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") /> 
7<#assign namespace = randomNamespace /> 
8<#assign journalArticle = journalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].data) /> 
9 
10<#assign 
11parentLayoutPlid = layout.getParentPlid() 
12parentLayout = layoutLocalService.fetchLayout(parentLayoutPlid)!"" 
13parentAssetPublisherId = "" 
14/> 
15<#if validator.isNotNull(parentLayout)> 
16    <#if parentLayout.isTypePortlet()> 
17        <#assign parentLayoutTypePortlet = parentLayout.getLayoutType() /> 
18        <#assign parentPortlets = parentLayoutTypePortlet.getExplicitlyAddedPortlets() /> 
19        <#list parentPortlets as parentPortlet> 
20            <#if parentPortlet.getRootPortletId() == "com_liferay_asset_publisher_web_portlet_AssetPublisherPortlet"> 
21                <#assign parentAssetPublisherId = parentPortlet.getPortletId() /> 
22 
23                <#break /> 
24            </#if> 
25        </#list> 
26    </#if> 
27</#if> 
28 
29<#assign topBgColorClass = "on-" + TopBgColor.getData() + "-bg" /> 
30 
31<article class="article" itemscope itemtype="https://schema.org/Article"> 
32    <#if Slider?? && Slider.NeuerSlider?? && (Slider.NeuerSlider.Image.getData()?has_content || Slider.NeuerSlider.Youtube.getData()?has_content)> 
33        <div class="slider-hero" id="slider_${namespace}"> 
34            <div class="slides-list"> 
35                <#list Slider.NeuerSlider.getSiblings() as curSlide> 
36 
37                    <#if curSlide.AltTextImage?? && curSlide.AltTextImage.getData()?has_content> 
38                        <#assign AltText = curSlide.AltTextImage.data /> 
39                    </#if> 
40 
41                    <#assign AltText = common.getAltText(curSlide.Image.data, AltText) /> 
42 
43                    <#assign Copyright = "" /> 
44                    <#assign CopyrightMobile = "" /> 
45                    <#if (common.getCopyrightText(curSlide.Image.data)!"") != ""> 
46                        <#assign Copyright = common.getCopyrightTag("",curSlide.Image.data) /> 
47                    </#if> 
48 
49 
50 
51                    <#assign hasMobileImageClass= "" /> 
52                    <#assign ImageMobileFocusClass= "image-focus-mobile-center" /> 
53                    <#if curSlide.ImageMobile?? && curSlide.ImageMobile.getData()?has_content> 
54                        <#assign hasMobileImageClass= "image-with-mobile-alternative" /> 
55                        <#if (common.getCopyrightText(curSlide.ImageMobile.data)!"") != ""> 
56                            <#assign CopyrightMobile = common.getCopyrightTag("",curSlide.ImageMobile.data,"","mobile") /> 
57                        </#if> 
58                        <#if curSlide.ImageMobile.ImageMobileFocus?? && curSlide.ImageMobile.ImageMobileFocus.getData()?has_content> 
59                            <#assign ImageMobileFocusClass= "image-focus-mobile-" + curSlide.ImageMobile.ImageMobileFocus.getData() /> 
60                        </#if> 
61                    </#if> 
62 
63                    <#assign ImageDesktopFocusClass= "image-focus-desktop-center fooo" /> 
64                    <#if curSlide.Image.ImageDesktopFocus?? && curSlide.Image.ImageDesktopFocus.getData()?has_content> 
65                        <#assign ImageDesktopFocusClass= "image-focus-desktop-" + curSlide.Image.ImageDesktopFocus.getData()/> 
66                    </#if> 
67 
68 
69                    <div class="slide"> 
70                        <div class="slide-content"> 
71                            <#if (curSlide.Youtube?? && curSlide.Youtube.getData()?has_content) && (curSlide.Image?? && curSlide.Image?has_content)> 
72                                <#assign videoId = curSlide.Youtube.getData()/> 
73 
74                                <#if videoId?starts_with("http")> 
75                                    <#assign videoId = videoId?split("/")[3]> 
76                                </#if> 
77 
78                                <div class="slide-content-video image-with-caption ${hasMobileImageClass} ${ImageDesktopFocusClass} ${ImageMobileFocusClass}"> 
79                                    <a href="https://www.youtube-nocookie.com/${videoId}" target="_blank" 
80                                       class="video-link"> 
81                                        <img src="${common.getScaledImageURL(curSlide.Image.getData(), "bg-image-medium")}" 
82                                             data-src="${common.getScaledImageURL(curSlide.Image.getData(), "bg-image-medium")}" 
83                                             class="slide__image image--desktop" alt="${AltText}" loading="lazy"/> 
84                                        <#if curSlide.ImageMobile?? && curSlide.ImageMobile.getData()?has_content> 
85                                            <img src="${common.getScaledImageURL(curSlide.ImageMobile.getData(), "bg-image-medium")}" 
86                                                 data-src="${common.getScaledImageURL(curSlide.ImageMobile.getData(), "bg-image-medium")}" 
87                                                 class="slide__image image--mobile" alt="${AltText}" loading="lazy"/> 
88                                            ${CopyrightMobile} 
89                                        </#if> 
90                                    </a> 
91                                    ${Copyright} 
92                                </div> 
93                            <#else> 
94                                <div class="slide-content-image image-with-caption ${hasMobileImageClass} ${ImageDesktopFocusClass} ${ImageMobileFocusClass}"> 
95                                    <img src="${common.getScaledImageURL(curSlide.Image.getData(), "bg-image-medium")}" 
96                                         data-src="${common.getScaledImageURL(curSlide.Image.getData(), "bg-image-medium")}" 
97                                         class="slide__image image--desktop" alt="${AltText}" loading="lazy" /> 
98                                    <#if curSlide.ImageMobile?? && curSlide.ImageMobile.getData()?has_content> 
99                                        <img src="${common.getScaledImageURL(curSlide.ImageMobile.getData(), "bg-image-medium")}" 
100                                             data-src="${common.getScaledImageURL(curSlide.ImageMobile.getData(), "bg-image-medium")}" 
101                                             class="slide__image image--mobile" alt="${AltText}" loading="lazy"/> 
102                                    </#if> 
103                                    ${Copyright} 
104                                </div> 
105                            </#if> 
106                        </div> 
107                    </div> 
108                </#list> 
109            </div> 
110        </div> 
111    </#if> 
112 
113    <section class="article-area article-area--${topBgColorClass}"> 
114        <div class="container"> 
115            <div class="row justify-content-center"> 
116                <div class="col-sm-8"> 
117                    <nav id="breadcrumbs"> 
118                        <#assign preferencesMap = {"portletSetupPortletDecoratorId": "decorate-yellow-bg", "displayStyle": "ddmTemplate_BREADCRUMB-BLAUES-GUT","showPortletBreadcrumb":"true"} /> 
119 
120                        <@liferay.breadcrumbs default_preferences = freeMarkerPortletPreferences.getPreferences(preferencesMap) /> 
121                    </nav> 
122                </div> 
123            </div> 
124            <div class="row justify-content-center"> 
125                <div class="col-sm-8"> 
126                    <h1 class="article-headline" itemprop="name">${HeadlineArticle.getData()}</h1> 
127                </div> 
128            </div> 
129            <div class="row justify-content-center"> 
130                <div class="col-sm-8"> 
131                    <#assign assetCategories = assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", journalArticle.resourcePrimKey) /> 
132                    <#if assetCategories?? && assetCategories?size gt 0> 
133                        <ul class="tags"> 
134                            <#list assetCategories as assetCategory> 
135                                <#assign 
136                                categoryURL = portletURLFactory.create(renderRequest, parentAssetPublisherId, parentLayoutPlid, "RENDER_PHASE") 
137                                href = categoryURL.toString() 
138                                href = httpUtil.setParameter(href, "_" + parentAssetPublisherId + "_categoryId", assetCategory.getCategoryId()?string) 
139                                href = httpUtil.setParameter(href, "_" + parentAssetPublisherId + "_resetCur", "true") 
140                                /> 
141 
142                                <li class="tag"> 
143                                    <a href="${href}" class="no-icon">${assetCategory.getTitle(locale)}</a> 
144                                </li> 
145                            </#list> 
146                        </ul> 
147                    </#if> 
148                </div> 
149            </div> 
150            <#if Intro?? && Intro.data?has_content> 
151                <div class="row justify-content-center"> 
152                    <div class="col-md-8"> 
153                        <p class="bold">${Intro.getData()}</p> 
154                    </div> 
155                </div> 
156            </#if> 
157 
158            <div class="row justify-content-center"> 
159                <div class="col-md-8"> 
160                    <div class="button-area"> 
161                        <button class="share-social-link btn btn-text"> 
162                            <span class="icon-bg icon-bg--share"></span> <span class="link-title"> <span 
163                                        class="hide-accessible">Seite </span>Teilen </span> 
164                        </button> 
165                        <button class="btn btn-text" onclick="window.print();"> 
166                            <span class="icon-bg icon-bg--print"></span> <span class="link-title"> <span 
167                                        class="hide-accessible">Seite </span>Drucken </span> 
168                        </button> 
169                    </div> 
170                </div> 
171            </div> 
172        </div> 
173 
174    </section> 
175 
176 
177    <#if WaveTop?? && WaveTopColor??> 
178        <section class="article-wave-area" data-source="${WaveTop.getData()}"> 
179            <section class="waves"> 
180                <div class="wave wave--${WaveTop.getData()}-${WaveTopColor.getData()} v-mirrored"></div> 
181            </section> 
182        </section> 
183    </#if> 
184 
185 
186 
187 
188 
189    <#if Text?? && Text.data?has_content> 
190        <section class="article-text container"> 
191            <div class="row justify-content-center"> 
192                <div class="col-md-8"> 
193                    ${Text.getData()} 
194                </div> 
195            </div> 
196        </section> 
197    </#if> 
198 
199    <#if ImageLarge?? && ImageLarge.data?has_content> 
200 
201        <#assign CopyrightImageLarge= "" /> 
202        <#assign CopyrightImageLargeMobile= "" /> 
203 
204        <#assign hasMobileImageLargeClass= "" /> 
205        <#if ImageLargeMobile?? && ImageLargeMobile.getData()?has_content> 
206            <#assign hasMobileImageLargeClass= "image-with-mobile-alternative" /> 
207            <#if (common.getCopyrightText(ImageLargeMobile.data)!"") != ""> 
208                <#assign CopyrightMobile = common.getCopyrightTag("",ImageLargeMobile.data,"","mobile") /> 
209            </#if> 
210        </#if> 
211 
212        <#if (common.getCopyrightText(ImageLarge.data)!"") != ""> 
213            <#assign CopyrightImageLarge = common.getCopyrightTag("",ImageLarge.data) /> 
214        </#if> 
215 
216        <section class="article-image-large"> 
217            <section class="image-large image-with-caption ${hasMobileImageLargeClass}" id="image-large_${namespace}"> 
218                <div class="image-inner"> 
219                    <span itemprop="image" content="${portal.getPortalURL(themeDisplay) + common.getScaledImageURL(ImageLarge.getData(), "bg-image-medium")}" /> 
220                    <img 
221                         src="${common.getScaledImageURL(ImageLarge.getData(), "bg-image-medium")}" 
222                         alt="${common.getAltText(ImageLarge.data)}" class="image image--desktop" loading="lazy"/> 
223                    <#if ImageLargeMobile?? && ImageLargeMobile.getData()?has_content> 
224                        <img src="${common.getScaledImageURL(ImageLarge.getData(), "bg-image-medium")}" 
225                             alt="${common.getAltText(ImageLarge.data)}" class="image image--mobile" loading="lazy"/> 
226                        ${CopyrightImageLargeMobile} 
227                    </#if> 
228                    ${CopyrightImageLarge} 
229                </div> 
230            </section> 
231            <#if ImageCaption?? && ImageCaption.data?has_content> 
232                <div class="container"> 
233                    <div class="row justify-content-center"> 
234                        <div class="col-md-8"> 
235                            <div class="article__image-large-caption">${ImageCaption.getData()}</div> 
236                        </div> 
237                    </div> 
238                </div> 
239            </#if> 
240        </section> 
241    </#if> 
242 
243    <#if TextBottom?? && TextBottom.data?has_content> 
244        <section class="article-text container"> 
245            <div class="row justify-content-center"> 
246                <div class="col-md-8"> 
247                    ${TextBottom.getData()} 
248                </div> 
249            </div> 
250        </section> 
251    </#if> 
252 
253</article> 
254 
255<#if Slider?? && Slider.NeuerSlider?? && (Slider.NeuerSlider.Image.getData()?has_content || Slider.NeuerSlider.Youtube.getData()?has_content)> 
256    <script> 
257        window.addEventListener("load", function () { 
258            function ${namespace}_updateInfo(info) { 
259                for (var i = 0; i < info.navItems.length; i++) { 
260                    info.navItems[i].setAttribute('aria-label', 'Folie ' + (i + 1)); 
261
262 
263                info.navItems[info.navCurrentIndex].setAttribute('aria-label', 'Folie ' + (info.navCurrentIndex + 1) + ' (aktuell)'); 
264 
265                info.controlsContainer.setAttribute('aria-label', 'Navigationselemente'); 
266                info.prevButton.setAttribute('aria-label', 'zur vorhergehenden Folie springen'); 
267                info.nextButton.setAttribute('aria-label', 'zur nächsten Folie springen'); 
268                info.navContainer.setAttribute('aria-label', 'Auswahl der Folien') 
269
270 
271            var slider = tns({ 
272                container: '#slider_${namespace} .slides-list', 
273                items: 1, 
274                slideBy: 'page', 
275                center: true, 
276                controlsPosition: 'bottom', 
277                navPosition: 'bottom', 
278                touch: true, 
279                mouseDrag: false, 
280                freezable: true, 
281                speed: 600, 
282                lazyload: true, 
283                arrowKeys: true, 
284                lazyloadSelector: '.slide__image', 
285                controlsText: ['<span class="icon-bg icon-bg--arrow1-left"></span>', '<span class="icon-bg icon-bg--arrow1-right"></span>'], 
286                autoplay: true, 
287                autoplayHoverPause: true, 
288                autoplayPosition: 'bottom', 
289                autoplayTimeout: 3000, 
290                autoplayText: ["▶", "❚❚"], 
291                onInit: function (info) { 
292                    ${namespace}_updateInfo(info); 
293 
294                    var btn = document.querySelector('#slider_${namespace} button[data-action="stop"]'); 
295                    var nav = document.querySelector('#slider_${namespace} .tns-nav'); 
296 
297                    if (btn && nav) { 
298                        var wrapper = document.createElement('div'); 
299                        wrapper.classList.add('nav-wrapper'); 
300 
301                        nav.parentNode.insertBefore(wrapper, nav); 
302 
303                        wrapper.appendChild(nav); 
304                        wrapper.appendChild(btn); 
305
306
307            }); 
308            slider.events.on('indexChanged', function (info) { 
309                ${namespace}_updateInfo(info); 
310            }); 
311        }); 
312    </script> 
313</#if>