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"> 
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" 
30                 aria-label="Folie ${curSlide?index + 1} von ${Slide.siblings?size}"> 
31                <div class="slide-content"> 
32                    <span class="h1 headline">${curSlide.Headline.getData()}</span> 
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                                 loading="lazy" 
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 
63    window.addEventListener("load", function () { 
64        function ${namespace}_updateInfo(info) { 
65            for (var i = 0; i < info.navItems.length; i++) { 
66                info.navItems[i].setAttribute('aria-label', 'Folie ' + (i + 1)); 
67
68 
69            info.navItems[info.navCurrentIndex].setAttribute('aria-label', 'Folie ' + (info.navCurrentIndex + 1) + ' (aktuell)'); 
70 
71            info.controlsContainer.setAttribute('aria-label', 'Navigationselemente'); 
72            info.prevButton.setAttribute('aria-label', 'zur vorhergehenden Folie springen'); 
73            info.nextButton.setAttribute('aria-label', 'zur nächsten Folie springen'); 
74            info.navContainer.setAttribute('aria-label', 'Auswahl der Folien') 
75
76 
77        var slider = tns({ 
78            arrowKeys: true, 
79            autoHeight: false, 
80            autoplay: true, 
81            autoplayHoverPause: true, 
82            autoplayPosition: 'bottom', 
83            autoplayText: ["▶", "❚❚"], 
84            autoplayTimeout: 3000, 
85            center: true, 
86            container: '#slider_${namespace} .slides-list', 
87            controlsPosition: 'bottom', 
88            controlsText: ['<span class="icon-bg icon-bg--arrow2-left"></span>', '<span class="icon-bg icon-bg--arrow2-right"></span>'], 
89            freezable: true, 
90            items: 1, 
91            lazyload: true, 
92            lazyloadSelector: '.slide__image', 
93            mouseDrag: false, 
94            navPosition: 'bottom', 
95            slideBy: 'page', 
96            speed: 600, 
97            touch: true, 
98            onInit: function (info) { 
99                ${namespace}_updateInfo(info); 
100 
101                var btn = document.querySelector('#slider_${namespace} button[data-action="stop"]'); 
102                var nav = document.querySelector('#slider_${namespace} .tns-nav'); 
103 
104                if (btn && nav) { 
105                    var wrapper = document.createElement('div'); 
106                    wrapper.classList.add('nav-wrapper'); 
107 
108                    nav.parentNode.insertBefore(wrapper, nav); 
109 
110                    wrapper.appendChild(nav); 
111                    wrapper.appendChild(btn); 
112
113
114        }); 
115        slider.events.on('indexChanged', function (info) { 
116            ${namespace}_updateInfo(info); 
117        }); 
118    }); 
119</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" loading="lazy"/> 
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> 
 
Revitalisierungsmaßnahme Donau bei Beuren
Revitalisierungsmaßnahmen – Donau in Donaueschingen
Revitalisierungsmaßnahmen – Kocher in Schwäbisch Hall
Revitalisierungsmaßnahmen – Pfinz in Remchingen
 

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"> 
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-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                                         loading="lazy" 
119                                    /> 
120                                <#else> 
121                                    <img src="/o/blaues-gut-theme/images/no-image_blaues-gut.png" data-src="/o/blaues-gut-theme/images/logo_bg_mobile.svg" 
122                                         class="slide__image no-image" alt=""/> 
123                                </#if> 
124                            </a> 
125                            ${Copyright} 
126                        </div> 
127 
128                        <h3 class="title"> 
129                            <a href="${linkHref}" ${linkTarget} title="${headline}" class="no-icon">${headline}</a> 
130                        </h3> 
131                    </div> 
132                </div> 
133            </#list> 
134        </div> 
135        </div> 
136    </section> 
137 
138   <script> 
139       window.addEventListener("load", function () { 
140            function ${namespace}_updateInfo(info) { 
141                if (info.navItems) { 
142                    for (var i = 0; i < info.navItems.length; i++) { 
143                        info.navItems[i].setAttribute('aria-label', 'Folie ' + (i + 1)); 
144
145 
146                    info.navItems[info.navCurrentIndex].setAttribute('aria-label', 'Folie ' + (info.navCurrentIndex + 1) + ' (aktuell)'); 
147
148 
149                if (info.controlsContainer) { 
150                    info.controlsContainer.setAttribute('aria-label', 'Navigationselemente'); 
151
152                if (info.prevButton) { 
153                    info.prevButton.setAttribute('aria-label', 'zur vorhergehenden Folie springen'); 
154
155                if (info.nextButton) { 
156                    info.nextButton.setAttribute('aria-label', 'zur nächsten Folie springen'); 
157
158                if (info.navContainer) { 
159                    info.navContainer.setAttribute('aria-label', 'Auswahl der Folien') 
160
161
162 
163            var slider = tns({ 
164                container: '#slider_${namespace} .slides-list', 
165                items: 2, 
166                slideBy: 'page', 
167                lazyload: true, 
168                lazyloadSelector: '.slide__image', 
169                loop: false, 
170                // center: true, 
171                controlsPosition: 'bottom', 
172                controls: false, 
173                navPosition: 'bottom', 
174                touch: true, 
175                mouseDrag: true, 
176                freezable: true, 
177                speed: 600, 
178                arrowKeys: true, 
179                controlsText: ['<span class="icon-bg icon-bg--arrow2-left"></span>', '<span class="icon-bg icon-bg--arrow2-right"></span>'], 
180                responsive: { 
181                    768: { 
182                        items: 2, 
183                        edgePadding: 0, 
184                        gutter: 0 
185                    }, 
186                    900: { 
187                        items: 3, 
188                        edgePadding: 0, 
189                        controls: true 
190                    }, 
191                    1280: { 
192                        items: 3, 
193                        controls: true 
194                    }, 
195                    1600: { 
196                        controls: true, 
197                        items: 3 
198
199                }, 
200                onInit: function (info) { 
201                    ${namespace}_updateInfo(info); 
202
203            }); 
204            slider.events.on('indexChanged', function(info) { 
205                ${namespace}_updateInfo(info); 
206            }); 
207        }); 
208    </script> 
209</#if>