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                                 role="img" 
45                            /> 
46                        </div> 
47                    </#if> 
48                </div> 
49                <#if hasLink == true> 
50                    <div class="slide-button-area"> 
51                        ${ButtonMarkup} 
52                    </div> 
53                </#if> 
54            </div> 
55        </#list> 
56    </div> 
57    <div id="${namespace}_slider-controls"> 
58    </div> 
59</section> 
60 
61<script> 
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            container: '#slider_${namespace} .slides-list', 
78            items: 1, 
79            slideBy: 'page', 
80            center: true, 
81            controlsPosition: 'bottom', 
82            navPosition: 'bottom', 
83            autoplay: true, 
84            autoplayHoverPause: true, 
85            autoplayPosition: 'bottom', 
86            autoplayTimeout: 3000, 
87            autoplayText: ["▶", "❚❚"], 
88            touch: true, 
89            mouseDrag: false, 
90            freezable: true, 
91            autoHeight: true, 
92            speed: 600, 
93            lazyload: true, 
94            arrowKeys: true, 
95            lazyloadSelector: '.slide__image', 
96            controlsText: ['<span class="icon-bg icon-bg--arrow2-left"></span>', '<span class="icon-bg icon-bg--arrow2-right"></span>'], 
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-medium")}" 
115                                         data-src="${common.getScaledImageURL(imgUrl, "bg-image-medium")}" 
116                                         class="slide__image" alt="${altText}" role="img" 
117                                    /> 
118                                <#else> 
119                                    <img src="/o/blaues-gut-theme/images/no-image_blaues-gut.png" data-src="/o/blaues-gut-theme/images/logo_bg_mobile.svg" 
120                                         class="slide__image no-image" alt=""/> 
121                                </#if> 
122                            </a> 
123                            ${Copyright} 
124                        </div> 
125 
126                        <h1 class="title"> 
127                            <a href="${linkHref}" ${linkTarget} title="${headline}" class="no-icon">${headline}</a> 
128                        </h1> 
129                    </div> 
130                </div> 
131            </#list> 
132        </div> 
133        </div> 
134    </section> 
135 
136   <script> 
137        window.addEventListener("load", function () { 
138            function ${namespace}_updateInfo(info) { 
139                if (info.navItems) { 
140                    for (var i = 0; i < info.navItems.length; i++) { 
141                        info.navItems[i].setAttribute('aria-label', 'Folie ' + (i + 1)); 
142
143 
144                    info.navItems[info.navCurrentIndex].setAttribute('aria-label', 'Folie ' + (info.navCurrentIndex + 1) + ' (aktuell)'); 
145
146 
147                if (info.controlsContainer) { 
148                    info.controlsContainer.setAttribute('aria-label', 'Navigationselemente'); 
149
150                if (info.prevButton) { 
151                    info.prevButton.setAttribute('aria-label', 'zur vorhergehenden Folie springen'); 
152
153                if (info.nextButton) { 
154                    info.nextButton.setAttribute('aria-label', 'zur nächsten Folie springen'); 
155
156                if (info.navContainer) { 
157                    info.navContainer.setAttribute('aria-label', 'Auswahl der Folien') 
158
159
160 
161            var slider = tns({ 
162                container: '#slider_${namespace} .slides-list', 
163                items: 2, 
164                slideBy: 'page', 
165                lazyload: true, 
166                lazyloadSelector: '.slide__image', 
167                loop: false, 
168                // center: true, 
169                controlsPosition: 'bottom', 
170                controls: false, 
171                navPosition: 'bottom', 
172                touch: true, 
173                mouseDrag: true, 
174                freezable: true, 
175                speed: 600, 
176                arrowKeys: true, 
177                controlsText: ['<span class="icon-bg icon-bg--arrow2-left"></span>', '<span class="icon-bg icon-bg--arrow2-right"></span>'], 
178                responsive: { 
179                    768: { 
180                        items: 2, 
181                        edgePadding: 0, 
182                        gutter: 0 
183                    }, 
184                    900: { 
185                        items: 3, 
186                        edgePadding: 0, 
187                        controls: true 
188                    }, 
189                    1280: { 
190                        items: 3, 
191                        controls: true 
192                    }, 
193                    1600: { 
194                        controls: true, 
195                        items: 3 
196
197                }, 
198                onInit: function (info) { 
199                    ${namespace}_updateInfo(info); 
200
201            }); 
202            slider.events.on('indexChanged', function(info) { 
203                ${namespace}_updateInfo(info); 
204            }); 
205        }); 
206    </script> 
207</#if>