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 22, column 43]

----
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 altTag = formField.getValue()...  [in template "blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" in function "getAltText" at line 22, column 25]
	- Reached through: ${common.getAltText(curSlide.Image.da...  [in template "20097#20125#SLIDER-STARTPAGE" at line 43, column 60]
----
1<#import "/blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" as common> 
2 
3<#assign namespace = randomNamespace /> 
4 
5<section class="slider-startpage" id="slider_${namespace}"> 
6    <div class="slides-list" aria-roledescription="Karusell"> 
7 
8        <#list Slide.getSiblings() as curSlide> 
9 
10            <#if (curSlide.Button.ButtonStyle?? && curSlide.Button.ButtonStyle.getData()?has_content)> 
11                <#assign ButtonMarkup = common.getButtonMarkup( 
12                curSlide.Button.ButtonInternalLink, 
13                curSlide.Button.ButtonExternalLink, 
14                curSlide.Button.ButtonText, 
15                curSlide.Button.ButtonStyle.getData()) /> 
16            <#else> 
17                <#assign ButtonMarkup = common.getButtonMarkup( 
18                curSlide.Button.ButtonInternalLink, 
19                curSlide.Button.ButtonExternalLink, 
20                curSlide.Button.ButtonText) /> 
21            </#if> 
22 
23            <#assign hasLink = false /> 
24 
25            <#if curSlide.Button.ButtonExternalLink.data?has_content || ((curSlide.Button.ButtonInternalLink??) && (curSlide.Button.ButtonInternalLink.getFriendlyUrl()?has_content))> 
26                <#assign hasLink = true /> 
27            </#if> 
28 
29            <div class="slide" role="group" aria-roledescription="Folie" 
30                 aria-label="Folie ${curSlide?index + 1} von ${Slide.siblings?size}"> 
31                <div class="slide-content"> 
32                    <h1 class="headline">${curSlide.Headline.getData()}</h1> 
33                    <#if curSlide.SVG?? && curSlide.SVG.getData()?has_content> 
34                        <div class="slide-content-image"> 
35                            ${curSlide.SVG.getData()} 
36                        </div> 
37                    <#else> 
38                    </#if> 
39                    <#if curSlide.Image?? && curSlide.Image.getData()?has_content> 
40                        <div class="slide-content-image"> 
41                            <img src="${common.getScaledImageURL(curSlide.Image.getData(), "bg-image-medium")}" 
42                                 data-src="${common.getScaledImageURL(curSlide.Image.getData(), "bg-image-medium")}" 
43                                 class="slide__image" alt="${common.getAltText(curSlide.Image.data)}" 
44                            /> 
45                        </div> 
46                    </#if> 
47                </div> 
48                <#if hasLink == true> 
49                    <div class="slide-button-area"> 
50                        ${ButtonMarkup} 
51                    </div> 
52                </#if> 
53            </div> 
54        </#list> 
55    </div> 
56    <div id="${namespace}_slider-controls"> 
57    </div> 
58</section> 
59 
60<script> 
61 
62    window.addEventListener("load", function () { 
63        function ${namespace}_updateInfo(info) { 
64            for (var i = 0; i < info.navItems.length; i++) { 
65                info.navItems[i].setAttribute('aria-label', 'Folie ' + (i + 1)); 
66
67 
68            info.navItems[info.navCurrentIndex].setAttribute('aria-label', 'Folie ' + (info.navCurrentIndex + 1) + ' (aktuell)'); 
69 
70            info.controlsContainer.setAttribute('aria-label', 'Navigationselemente'); 
71            info.prevButton.setAttribute('aria-label', 'zur vorhergehenden Folie springen'); 
72            info.nextButton.setAttribute('aria-label', 'zur nächsten Folie springen'); 
73            info.navContainer.setAttribute('aria-label', 'Auswahl der Folien') 
74
75 
76        var slider = tns({ 
77            arrowKeys: true, 
78            autoHeight: false, 
79            autoplay: true, 
80            autoplayHoverPause: true, 
81            autoplayPosition: 'bottom', 
82            autoplayText: ["▶", "❚❚"], 
83            autoplayTimeout: 3000, 
84            center: true, 
85            container: '#slider_${namespace} .slides-list', 
86            controlsPosition: 'bottom', 
87            controlsText: ['<span class="icon-bg icon-bg--arrow2-left"></span>', '<span class="icon-bg icon-bg--arrow2-right"></span>'], 
88            freezable: true, 
89            items: 1, 
90            lazyload: true, 
91            lazyloadSelector: '.slide__image', 
92            mouseDrag: false, 
93            navPosition: 'bottom', 
94            slideBy: 'page', 
95            speed: 600, 
96            touch: true, 
97            onInit: function (info) { 
98                ${namespace}_updateInfo(info); 
99 
100                var btn = document.querySelector('#slider_${namespace} button[data-action="stop"]'); 
101                var nav = document.querySelector('#slider_${namespace} .tns-nav'); 
102 
103                if (btn && nav) { 
104                    var wrapper = document.createElement('div'); 
105                    wrapper.classList.add('nav-wrapper'); 
106 
107                    nav.parentNode.insertBefore(wrapper, nav); 
108 
109                    wrapper.appendChild(nav); 
110                    wrapper.appendChild(btn); 
111
112
113        }); 
114        slider.events.on('indexChanged', function (info) { 
115            ${namespace}_updateInfo(info); 
116        }); 
117    }); 
118</script> 
 
 

Blaues Gut: Wir machen Gewässer besser

Das Thema Gewässer ist gar nicht so trocken, wie man zunächst denken mag. Tauchen Sie mit uns ein in eine faszinierende Welt. Flüsse, Bäche, Seen und Grundwasser – darunter können wir uns alle etwas vorstellen. Aber wissen wir, welche Welten sich dahinter verbergen? Grundwasserschutz ist wichtig, weil wir damit sauberes Trinkwasser sicherstellen. Ohne natürliche Flüsse, Bäche und Seen würde unser Leben veröden. Denn gutes Wasser ist nicht nur für uns Menschen wichtig, sondern es ist auch Lebensraum für Tiere und Pflanzen. Gutes Wasser ist keine Selbstverständlichkeit, sondern etwas, das wir schützen und pflegen müssen. Wasser ist eben etwas ganz Besonderes: unser Blaues Gut.

Was Sie hier finden

Auf dieser Internetseite haben wir einige Themen rund um unsere Gewässer für Sie zusammengestellt: Wir zeigen Ihnen, was wir machen, um sie zu verbessern. Außerdem geben wir Ihnen Tipps, wie und wo Sie unsere heimischen Gewässer selbst erleben können – egal, ob zu Fuß oder mit dem Rad, ob Sie sich für Wassersport interessieren oder die Kinder im Schlepptau haben. Politischen Entscheidern geben wir Hilfestellung, wie Sie selbst Maßnahmen in Ihrer Gemeinde oder in Ihrer Stadt erfolgreich realisieren können. Klicken Sie rein und entdecken Sie die Welt von Blaues Gut!

 
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 22, column 43]

----
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 altTag = formField.getValue()...  [in template "blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" in function "getAltText" at line 22, 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 namespace = randomNamespace /> 
5<#assign AltText = "" /> 
6<#assign Copyright = "" /> 
7 
8<#if AltTextImage?? && AltTextImage.getData()?has_content> 
9    <#assign AltText = AltTextImage.data /> 
10</#if> 
11 
12<#assign AltText = common.getAltText(ImageLarge.data, AltText) /> 
13<#if (Button.ButtonStyle?? && Button.ButtonStyle.getData()?has_content)> 
14    <#assign ButtonMarkup = common.getButtonMarkup(Button.ButtonInternalLink, Button.ButtonExternalLink, Button.ButtonText, Button.ButtonStyle.getData()) /> 
15    <#else> 
16    <#assign ButtonMarkup = common.getButtonMarkup(Button.ButtonInternalLink, Button.ButtonExternalLink, Button.ButtonText) /> 
17</#if> 
18 
19<#if ImageLarge?? && ImageLarge.data?has_content && (common.getCopyrightText(ImageLarge.data)!"") != ""> 
20    <#assign Copyright = common.getCopyrightTag("",ImageLarge.data) /> 
21</#if> 
22 
23 
24<section class="teaser"> 
25    <div class="colorable-bg"> 
26        <div class="container"> 
27            <div class="row justify-content-center"> 
28                <div class="col-md-6"> 
29                    <section class="teaser__content"> 
30                        <section class="image-large image-large--centered" id="image-large_${namespace}"> 
31                            <div class="image-inner image-with-caption"> 
32                                <#if SVG?? && SVG.getData()?has_content> 
33                                    <div class="slide-content-image no-border svg-image"> 
34                                        ${SVG.getData()} 
35                                    </div> 
36                                    <#else> 
37                                        <#if ImageLarge?? && ImageLarge.getData()?has_content> 
38                                            <img src="${common.getScaledImageURL(ImageLarge.getData(), "bg-image-medium")}" alt="${common.getAltText(ImageLarge.data)}" class="image"/> 
39                                            ${Copyright} 
40                                        </#if> 
41                                </#if> 
42                            </div> 
43                        </section> 
44                        <h2>${Headline.getData()}</h2> 
45                        <#if Text?? && Text.getData()?has_content> 
46                            <p class="teaser-text"> 
47                                ${Text.getData()} 
48                            </p> 
49                        </#if> 
50                        <#if Button.ButtonInternalLink.getData()?has_content || Button.ButtonExternalLink.getData()?has_content> 
51                            <div class="button-area"> 
52                                ${ButtonMarkup} 
53                            </div> 
54                        </#if> 
55                    </section> 
56                </div> 
57            </div> 
58        </div> 
59    </div> 
60 
61</section> 
 

Erst mal die „trockene“ Theorie: Die europäische Wasserrahmenrichtlinie (WRRL)

Interessieren Sie sich für die größeren Zusammenhänge? Wollen Sie wissen, ob es auch über Baden-Württemberg hinaus ähnliche Initiativen gibt und woher unser Verständnis von einem „guten Zustand“ der Gewässer überhaupt kommt? Dann sind Sie hier richtig: Auf der Seite „Grundlagen“ bekommen Sie kurz und verständlich die zentralen Informationen zur europäischen Wasserrahmenrichtlinie (WRRL).

 
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 22, column 43]

----
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 altTag = formField.getValue()...  [in template "blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" in function "getAltText" at line 22, column 25]
----
1<#import "/blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" as common> 
2 
3<#assign namespace = randomNamespace /> 
4<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
5<#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") /> 
6 
7<#function getDownloadLink content> 
8    <#assign 
9    dlAppService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService") 
10    dlUrlHelperUtil = serviceLocator.findService("com.liferay.document.library.util.DLURLHelper") 
11    json = jsonFactoryUtil.createJSONObject(content) 
12    fileEntryGroupId = json.getLong("groupId") 
13    fileEntryUuid = json.getString("uuid") 
14    fileEntry = dlAppService.getFileEntryByUuidAndGroupId(fileEntryUuid, fileEntryGroupId) 
15
16    <#return httpUtil.removeParameter(dlUrlHelperUtil.getDownloadURL(fileEntry, fileEntry.getLatestFileVersion(), themeDisplay, "", false, true), "download") /> 
17</#function> 
18 
19 
20<#if entries?has_content> 
21    <#assign 
22    parentLayoutPlid = layout.getParentPlid() 
23    parentLayout = layoutLocalService.fetchLayout(parentLayoutPlid)!"" 
24    parentAssetPublisherId = "" 
25    /> 
26    <#if validator.isNotNull(parentLayout)> 
27        <#if parentLayout.isTypePortlet()> 
28            <#assign parentLayoutTypePortlet = parentLayout.getLayoutType() /> 
29            <#assign parentPortlets = parentLayoutTypePortlet.getExplicitlyAddedPortlets() /> 
30            <#list parentPortlets as parentPortlet> 
31                <#if parentPortlet.getRootPortletId() == "com_liferay_asset_publisher_web_portlet_AssetPublisherPortlet"> 
32                    <#assign parentAssetPublisherId = parentPortlet.getPortletId() /> 
33 
34                    <#break /> 
35                </#if> 
36            </#list> 
37        </#if> 
38    </#if> 
39 
40<#--    <#list entries as entry>--> 
41<#--        <#assign assetRenderer = entry.getAssetRenderer() />--> 
42 
43<#--        <#if assetRenderer.getClassName()=="com.liferay.journal.model.JournalArticle">--> 
44<#--            <pre>--> 
45<#--                ${assetRenderer.getArticle().getContent()}--> 
46<#--            </pre>--> 
47<#--        </#if>--> 
48<#--    </#list>--> 
49 
50<#--    <div style="background-color: red;height: 50px;color:white;">--> 
51<#--        ###########################################--> 
52<#--    </div>--> 
53 
54    <section class="slider-related blog-slider" id="slider_${namespace}"> 
55        <h2 class="headline">Die frischesten Entwicklungen: Der News-Bereich</h2> 
56 
57        <p>Sie wollen wissen, was sich gerade jetzt rund ums Thema Gewässer in Baden-Württemberg tut? Dann bleiben Sie immer auf dem aktuellen Pegelstand und klicken Sie sich durch zu den News.</p> 
58 
59        <div class="slides-wrapper"> 
60 
61            <div class="slides-list" aria-roledescription="Karusell"> 
62 
63            <#list entries as curEntry> 
64 
65 
66                <#assign docXml = saxReaderUtil.read(curEntry.getAssetRenderer().getArticle().getContent()) /> 
67                <#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, curEntry) /> 
68                <#assign renderer= curEntry.getAssetRenderer()/> 
69 
70                <#if assetLinkBehavior != "showFullContent"> 
71                    <#assign viewURL = renderer.getURLViewInContext(renderRequest, renderResponse, viewURL) /> 
72                </#if> 
73 
74 
75 
76                <#assign 
77                linkTarget = "" 
78                linkHref= viewURL 
79                headline = docXml.valueOf("//dynamic-element[@name='HeadlineArticle']/dynamic-content/text()") 
80                imgUrlExisting =    docXml.valueOf("//dynamic-element[@name='ExistingSlider']//dynamic-element[@name='Image']/dynamic-content/text()") 
81                imgUrlNew =         docXml.valueOf("//dynamic-element[@name='NeuerSlider']//dynamic-element[@name='Image']/dynamic-content/text()") 
82                imgLarge =          docXml.valueOf("//dynamic-element[@name='ImageLarge']/dynamic-content/text()") 
83                imgUrl = "" 
84                altText =           "" 
85                Copyright = "" 
86                /> 
87 
88                <#if imgUrlNew!=""> 
89                    <#assign 
90                    imgUrl = getDownloadLink(imgUrlNew) + "&imageThumbnail=1" 
91                    altText = common.getAltText(imgUrlNew) 
92                    Copyright = common.getCopyrightTag("",imgUrlNew) 
93                    /> 
94 
95                <#elseif imgUrlExisting!=""> 
96                    <#assign 
97                    imgUrl = getDownloadLink(imgUrlExisting) + "&imageThumbnail=1" 
98                    altText = common.getAltText(imgUrlExisting) 
99                    Copyright = common.getCopyrightTag("",imgUrlExisting) 
100                    /> 
101                <#elseif imgLarge!=""> 
102                    <#assign 
103                    imgUrl = getDownloadLink(imgLarge) + "&imageThumbnail=1" 
104                    altText = common.getAltText(imgLarge) 
105                    Copyright = common.getCopyrightTag("",imgLarge) 
106                    /> 
107                </#if> 
108 
109                <div class="slide" role="group" aria-roledescription="Folie" aria-label="Folie ${curEntry?index + 1} von ${entries?size}"> 
110                    <div class="slide-content"> 
111                        <div class="slide-content-image image-with-caption"> 
112                            <a href="${linkHref}" ${linkTarget}> 
113                                <#if imgUrl!=""> 
114                                    <img src="${common.getScaledImageURL(imgUrl, "bg-image-h600")}" 
115                                         data-src="${common.getScaledImageURL(imgUrl, "bg-image-h600")}" 
116                                         class="slide__image" alt="${altText}" 
117                                         width="600" height="400" 
118                                    /> 
119                                <#else> 
120                                    <img src="/o/blaues-gut-theme/images/no-image_blaues-gut.png" data-src="/o/blaues-gut-theme/images/logo_bg_mobile.svg" 
121                                         class="slide__image no-image" alt=""/> 
122                                </#if> 
123                            </a> 
124                            ${Copyright} 
125                        </div> 
126 
127                        <h1 class="title"> 
128                            <a href="${linkHref}" ${linkTarget} title="${headline}" class="no-icon">${headline}</a> 
129                        </h1> 
130                    </div> 
131                </div> 
132            </#list> 
133        </div> 
134        </div> 
135    </section> 
136 
137   <script> 
138       window.addEventListener("load", function () { 
139            function ${namespace}_updateInfo(info) { 
140                if (info.navItems) { 
141                    for (var i = 0; i < info.navItems.length; i++) { 
142                        info.navItems[i].setAttribute('aria-label', 'Folie ' + (i + 1)); 
143
144 
145                    info.navItems[info.navCurrentIndex].setAttribute('aria-label', 'Folie ' + (info.navCurrentIndex + 1) + ' (aktuell)'); 
146
147 
148                if (info.controlsContainer) { 
149                    info.controlsContainer.setAttribute('aria-label', 'Navigationselemente'); 
150
151                if (info.prevButton) { 
152                    info.prevButton.setAttribute('aria-label', 'zur vorhergehenden Folie springen'); 
153
154                if (info.nextButton) { 
155                    info.nextButton.setAttribute('aria-label', 'zur nächsten Folie springen'); 
156
157                if (info.navContainer) { 
158                    info.navContainer.setAttribute('aria-label', 'Auswahl der Folien') 
159
160
161 
162            var slider = tns({ 
163                container: '#slider_${namespace} .slides-list', 
164                items: 2, 
165                slideBy: 'page', 
166                lazyload: true, 
167                lazyloadSelector: '.slide__image', 
168                loop: false, 
169                // center: true, 
170                controlsPosition: 'bottom', 
171                controls: false, 
172                navPosition: 'bottom', 
173                touch: true, 
174                mouseDrag: true, 
175                freezable: true, 
176                speed: 600, 
177                arrowKeys: true, 
178                controlsText: ['<span class="icon-bg icon-bg--arrow2-left"></span>', '<span class="icon-bg icon-bg--arrow2-right"></span>'], 
179                responsive: { 
180                    768: { 
181                        items: 2, 
182                        edgePadding: 0, 
183                        gutter: 0 
184                    }, 
185                    900: { 
186                        items: 3, 
187                        edgePadding: 0, 
188                        controls: true 
189                    }, 
190                    1280: { 
191                        items: 3, 
192                        controls: true 
193                    }, 
194                    1600: { 
195                        controls: true, 
196                        items: 3 
197
198                }, 
199                onInit: function (info) { 
200                    ${namespace}_updateInfo(info); 
201
202            }); 
203            slider.events.on('indexChanged', function(info) { 
204                ${namespace}_updateInfo(info); 
205            }); 
206        }); 
207    </script> 
208</#if>