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"> 
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" aria-roledescription="Karusell"> 
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}"/> 
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}"/> 
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}"/> 
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}"/> 
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">${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                    <img src="${common.getScaledImageURL(ImageLarge.getData(), "bg-image-medium")}" 
220                         alt="${common.getAltText(ImageLarge.data)}" class="image image--desktop"/> 
221                    <#if ImageLargeMobile?? && ImageLargeMobile.getData()?has_content> 
222                        <img src="${common.getScaledImageURL(ImageLarge.getData(), "bg-image-medium")}" 
223                             alt="${common.getAltText(ImageLarge.data)}" class="image image--mobile"/> 
224                        ${CopyrightImageLargeMobile} 
225                    </#if> 
226                    ${CopyrightImageLarge} 
227                </div> 
228            </section> 
229            <#if ImageCaption?? && ImageCaption.data?has_content> 
230                <div class="container"> 
231                    <div class="row justify-content-center"> 
232                        <div class="col-md-8"> 
233                            <div class="article__image-large-caption">${ImageCaption.getData()}</div> 
234                        </div> 
235                    </div> 
236                </div> 
237            </#if> 
238        </section> 
239    </#if> 
240 
241    <#if TextBottom?? && TextBottom.data?has_content> 
242        <section class="article-text container"> 
243            <div class="row justify-content-center"> 
244                <div class="col-md-8"> 
245                    ${TextBottom.getData()} 
246                </div> 
247            </div> 
248        </section> 
249    </#if> 
250 
251</article> 
252 
253<#if Slider?? && Slider.NeuerSlider?? && (Slider.NeuerSlider.Image.getData()?has_content || Slider.NeuerSlider.Youtube.getData()?has_content)> 
254    <script> 
255        window.addEventListener("load", function () { 
256            function ${namespace}_updateInfo(info) { 
257                for (var i = 0; i < info.navItems.length; i++) { 
258                    info.navItems[i].setAttribute('aria-label', 'Folie ' + (i + 1)); 
259
260 
261                info.navItems[info.navCurrentIndex].setAttribute('aria-label', 'Folie ' + (info.navCurrentIndex + 1) + ' (aktuell)'); 
262 
263                info.controlsContainer.setAttribute('aria-label', 'Navigationselemente'); 
264                info.prevButton.setAttribute('aria-label', 'zur vorhergehenden Folie springen'); 
265                info.nextButton.setAttribute('aria-label', 'zur nächsten Folie springen'); 
266                info.navContainer.setAttribute('aria-label', 'Auswahl der Folien') 
267
268 
269            var slider = tns({ 
270                container: '#slider_${namespace} .slides-list', 
271                items: 1, 
272                slideBy: 'page', 
273                center: true, 
274                controlsPosition: 'bottom', 
275                navPosition: 'bottom', 
276                touch: true, 
277                mouseDrag: false, 
278                freezable: true, 
279                speed: 600, 
280                lazyload: true, 
281                arrowKeys: true, 
282                lazyloadSelector: '.slide__image', 
283                controlsText: ['<span class="icon-bg icon-bg--arrow1-left"></span>', '<span class="icon-bg icon-bg--arrow1-right"></span>'], 
284                autoplay: true, 
285                autoplayHoverPause: true, 
286                autoplayPosition: 'bottom', 
287                autoplayTimeout: 3000, 
288                autoplayText: ["▶", "❚❚"], 
289                onInit: function (info) { 
290                    ${namespace}_updateInfo(info); 
291 
292                    var btn = document.querySelector('#slider_${namespace} button[data-action="stop"]'); 
293                    var nav = document.querySelector('#slider_${namespace} .tns-nav'); 
294 
295                    if (btn && nav) { 
296                        var wrapper = document.createElement('div'); 
297                        wrapper.classList.add('nav-wrapper'); 
298 
299                        nav.parentNode.insertBefore(wrapper, nav); 
300 
301                        wrapper.appendChild(nav); 
302                        wrapper.appendChild(btn); 
303
304
305            }); 
306            slider.events.on('indexChanged', function (info) { 
307                ${namespace}_updateInfo(info); 
308            }); 
309        }); 
310    </script> 
311</#if>