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 namespace = randomNamespace /> 
5 
6<section class="slider-hero ${(SliderTyp??)?then(SliderTyp.getData(), "")}" id="slider_${namespace}"> 
7    <div class="slides-list"> 
8 
9        <#list Slide.getSiblings() as curSlide> 
10 
11            <#assign hasLink = false /> 
12            <#assign linkTarget = "" /> 
13            <#assign linkHref= "" /> 
14            <#assign linkText = "weiterlesen" /> 
15            <#assign linkTitle = "Artikel weiterlesen" /> 
16            <#assign slideUniqueId = namespace + '_' + curSlide?index /> 
17 
18 
19            <#if curSlide.Headline?? && curSlide.Headline.getData()?has_content> 
20                <#assign AltText = curSlide.Headline.getData() /> 
21            </#if> 
22 
23            <#assign Copyright = "" /> 
24            <#if (common.getCopyrightText(curSlide.Image.data)!"") != ""> 
25                <#assign Copyright = common.getCopyrightTag("",curSlide.Image.data) /> 
26            </#if> 
27 
28            <div class="slide" role="group" aria-label="Folie ${curSlide?index + 1} von ${Slide.siblings?size}"> 
29                <div class="slide-content"> 
30                    <#if (curSlide.Youtube?? && curSlide.Youtube.getData()?has_content) && (curSlide.Image?? && curSlide.Image?has_content)> 
31                        <#assign videoId = curSlide.Youtube.getData()/> 
32 
33                        <#if videoId?starts_with("http")> 
34                            <#assign videoId = videoId?split("/")[3]> 
35                        </#if> 
36 
37                        <div class="slide-content-video video" id="video_${slideUniqueId}"> 
38                            <img src="${common.getScaledImageURL(curSlide.Image.getData())}" data-src="${common.getScaledImageURL(curSlide.Image.getData())}" class="slide__image video-preview-image" id="video-preview-image_${slideUniqueId}" alt="${common.getAltText(curSlide.Image.data, AltText)}" loading="lazy"/> 
39                            <div class="video-trigger-overlay video-trigger " id="video-trigger_${slideUniqueId}" data-tns-slide="tns1-item${curSlide?index}" data-videoid="${slideUniqueId}" data-source="${videoId}" title="Video abspielen"> 
40                                <p class="text-center video-trigger-overlay-text video-trigger" data-videoid="${slideUniqueId}" > 
41                                    Um das Video zu sehen, müssen Sie dieses Feld durch einen Klick aktivieren. Dadurch werden 
42                                    Informationen an Youtube übermittelt und unter Umständen dort verarbeitet. Bitte beachten Sie unsere 
43                                    Hinweise und Informationen zum <a href="/datenschutz" target="_blank" 
44                                                                      class="no-icon">Datenschutz</a>. 
45                                </p> 
46                                <span class="icon-bg icon-bg--play video-trigger" data-videoid="${slideUniqueId}" ></span> 
47                            </div> 
48                            <div class="video-layer" style="display: none" id="video-layer_${slideUniqueId}"> 
49                                <iframe class="video-frame" src="about:blank" allowfullscreen="" height="530" id="iframe_${slideUniqueId}"></iframe> 
50                            </div> 
51                        </div> 
52                    <#elseif (curSlide.Panopto_Link?? && curSlide.Panopto_Link.getData()?has_content)> 
53                        <#assign panoptoId = getPanoptoId(curSlide.Panopto_Link.getData()) /> 
54 
55                        <#if panoptoId?has_content> 
56                            <div class="slide-content-video video panopto-video" id="video_${slideUniqueId}"> 
57                                <div class="embed-container"> 
58                                    <iframe 
59                                        src="https://videoplattform.lubw.baden-wuerttemberg.de/Panopto/Pages/Embed.aspx?id=${panoptoId}&autoplay=false&offerviewer=false&showtitle=true&showbrand=false&start=0&interactivity=none" 
60                                        title="${AltText}" 
61
62                                    </iframe> 
63                                </div> 
64                            </div> 
65                        </#if> 
66                    <#else> 
67                        <div class="slide-content-image image-with-caption"> 
68                            <img src="${common.getScaledImageURL(curSlide.Image.getData())}" data-src="${common.getScaledImageURL(curSlide.Image.getData())}" class="slide__image" alt="${common.getAltText(curSlide.Image.data, AltText)}" loading="lazy"/> 
69                            ${Copyright} 
70                        </div> 
71                    </#if> 
72                </div> 
73            </div> 
74 
75        </#list> 
76    </div> 
77</section> 
78 
79<script> 
80 
81    var updateIframeHeight = function() { 
82        var dwidth = window.innerWidth; 
83        var videoHeight = dwidth*0.5625; 
84 
85        /* 
86        if (dwidth > 1600) { 
87            videoHeight = dwidth*0.40; 
88
89         */ 
90 
91        var videoFrames = document.getElementsByClassName('video-frame'); 
92        for (var i=0; i < videoFrames.length;i++) { 
93            videoFrames[i].setAttribute('height',videoHeight); 
94            videoFrames[i].style.height = videoHeight+'px'; 
95
96
97 
98    var updateVideoWrapper = function () { 
99 
100        var triggers = document.getElementsByClassName('video-trigger'); 
101 
102        for (var i=0; i < triggers.length;i++) { 
103            triggers[i].addEventListener('click',function(e) { 
104 
105                var triggersTarget = this.getAttribute('data-videoid'); 
106                var tnsSlide = this.getAttribute('data-tns-slide'); 
107 
108                var youtubeId = document.querySelector("#" + tnsSlide + ' #video-trigger_'+triggersTarget).getAttribute('data-source'); 
109                var videoLayer = document.querySelector("#" + tnsSlide + ' #video-layer_'+triggersTarget); 
110                var iframe = document.querySelector("#" + tnsSlide + ' #iframe_'+triggersTarget); 
111                iframe.setAttribute('src', 'https://www.youtube-nocookie.com/embed/' + youtubeId + '?autoplay=1&rel=0&cc_load_policy=1&modestbranding=0&enablejsapi=1'); 
112 
113                document.querySelector("#" + tnsSlide + ' #video-preview-image_'+triggersTarget).style.display='none'; 
114                document.querySelector("#" + tnsSlide + ' #video-trigger_'+triggersTarget).style.display='none'; 
115                videoLayer.style.display='block'; 
116            }); 
117
118    }; 
119 
120    window.addEventListener("load", function () { 
121        updateVideoWrapper(); 
122        updateIframeHeight(); 
123    }); 
124 
125    window.addEventListener("resize", function () { 
126        updateIframeHeight(); 
127    }); 
128 
129    // Liferay.on('endNavigate', updateVideoWrapper); 
130    // $(document).ready(updateVideoWrapper); 
131 
132    window.addEventListener("load", function () { 
133        function ${namespace}_updateInfo(info) { 
134            for (var i = 0; i < info.navItems.length; i++) { 
135                info.navItems[i].setAttribute('aria-label','Folie ' + (i+1)); 
136
137 
138            info.navItems[info.navCurrentIndex].setAttribute('aria-label','Folie ' + (info.navCurrentIndex + 1) + ' (aktuell)'); 
139 
140            info.controlsContainer.setAttribute('aria-label', 'Navigationselemente'); 
141            info.prevButton.setAttribute('aria-label','zur vorhergehenden Folie springen'); 
142            info.nextButton.setAttribute('aria-label','zur nächsten Folie springen'); 
143            info.navContainer.setAttribute('aria-label','Auswahl der Folien') 
144
145 
146        const imgStyle = document.querySelector('.image-slider-style'); 
147 
148        var slider = tns({ 
149            container: '#slider_${namespace} .slides-list', 
150            items: 1, 
151            slideBy: 'page', 
152            center: true, 
153            controlsPosition: 'bottom', 
154            navPosition: 'bottom', 
155            touch: true, 
156            mouseDrag: true, 
157            freezable: true, 
158            speed: 600, 
159            loop: false, 
160            arrowKeys: true, 
161            lazyload: true, 
162            autoHeight: true, 
163            lazyloadSelector: '.slide__image', 
164            autoplay: !!imgStyle, 
165            autoplayHoverPause: true, 
166            autoplayTimeout: 3500, 
167            autoplayText: [ 
168                "▶", 
169                "❚❚" 
170            ], 
171            controlsText: ['<span class="icon-bg icon-bg--arrow2-left"></span>','<span class="icon-bg icon-bg--arrow2-right"></span>'], 
172            onInit: function (info) { 
173                ${namespace}_updateInfo(info); 
174
175        }); 
176 
177        slider.events.on('indexChanged', function(info) { 
178            ${namespace}_updateInfo(info); 
179        }); 
180 
181        slider.events.on('transitionStart', function(info, eventName) { 
182            var currentSlideId = '#tns1-item' + info.navCurrentIndex; 
183 
184            var otherSlides = info.container.querySelectorAll('.tns-item:not(' + currentSlideId + ')') 
185 
186            otherSlides.forEach(function(slide) { 
187                var iframe = slide.querySelector( 'iframe'); 
188 
189                if (iframe != null) { 
190                    var src = iframe.getAttribute('src'); 
191                    if (src) { 
192                        if ((src.indexOf('youtube.com/embed') != -1) || (src.indexOf('youtube-nocookie.com/embed') != -1)) { 
193                            iframe.contentWindow.postMessage(JSON.stringify({ 
194                                'event': 'command', 
195                                'func': 'pauseVideo', 
196                                'args': [] 
197                            }), "*"); 
198
199
200
201            }); 
202        }); 
203        const mediaQuery = window.matchMedia('(max-width: 767px)') 
204        if (mediaQuery.matches) { 
205            const bulletList = document.querySelectorAll('.slider-hero .tns-nav'); 
206 
207            bulletList.forEach(bullet => { 
208                const slider = bullet.previousElementSibling.getBoundingClientRect(); 
209                const bulletNav = bullet.getBoundingClientRect(); 
210 
211                const bulletNavTop = bulletNav.top; 
212                const sliderTop = slider.top; 
213 
214                const arrowsPos = bulletNavTop - sliderTop - 5; 
215 
216                const prev = bullet.nextElementSibling.children[0]; 
217                const prevBtnWidth = prev.clientWidth; 
218                const next = bullet.nextElementSibling.children[1]; 
219 
220                const sliderControls = bullet.nextElementSibling; 
221                const firstBulletLeftSpace = bullet.firstElementChild.offsetLeft; 
222                const firstBulletWidth = bullet.firstElementChild.clientWidth; 
223                const lastBulletLeftSpace = bullet.lastElementChild.offsetLeft; 
224 
225                const nextBtnPos = lastBulletLeftSpace + 59; 
226                const prevBtnPos = firstBulletLeftSpace - prevBtnWidth - firstBulletWidth - 87; 
227 
228                const playPauseBtn = bullet.parentElement.firstElementChild; 
229                const playPauseBtnLeftPos = lastBulletLeftSpace + 15; 
230 
231                sliderControls.style.top = arrowsPos + 'px'; 
232 
233                next.style.left = nextBtnPos + 'px'; 
234 
235                prev.style.left = prevBtnPos + 'px'; 
236 
237                playPauseBtn.style.left = playPauseBtnLeftPos + 'px'; 
238 
239                console.log(sliderControls.style.top); 
240            }); 
241
242    }); 
243</script> 
244 
245<#function getPanoptoId url> 
246    <#local result = url?matches("https?://videoplattform\\.lubw\\.baden-wuerttemberg\\.de/Panopto/Pages/(?:Embed|Viewer).aspx\\?id=(\\S*)$") /> 
247 
248    <#if result> 
249        <#return result?groups[1] /> 
250    </#if> 
251 
252    <#return "" /> 
253</#function> 
 

Verbessern Sie Ihre Kommune spürbar – mit der Umsetzung der WRRL

Gemeinsam Dinge in Fluss bringen: Als politische Entscheidungsträgerin und politischer Entscheidungsträger in Baden-Württemberg stehen Sie vor der Herausforderung, Maßnahmen entsprechend der europäischen Wasserrahmenrichtlinie (WRRL) umzusetzen. Wir helfen Ihnen dabei mit Informationen, Materialien und Verweisen auf die für Sie zuständigen Stellen – denn gemeinsam machen wir so Gewässer besser.

 

5 Gründe für die Verbesserung Ihrer Kommune

 
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-FACTS" at line 25, column 227]
----
1<#import "/blaues-gut-portal.web-resources_SERVLET_CONTEXT_/common_macros.ftl" as common> 
2 
3<#assign namespace = randomNamespace /> 
4 
5<section class="slider-facts" id="slider_${namespace}"> 
6    <div class="slides-list"> 
7 
8        <#list Slide.getSiblings() as curSlide> 
9 
10            <#assign hasLink = false /> 
11            <#assign linkTarget = "" /> 
12            <#assign linkHref= "" /> 
13            <#assign linkText = "weiterlesen" /> 
14            <div class="slide" role="group" aria-label="Folie ${curSlide?index + 1} von ${Slide.siblings?size}"> 
15                <div class="slide-card"> 
16                    <div class="slide-caption"> 
17                        <#if (curSlide.Caption?? && curSlide.Caption.getData()?has_content)> 
18                            ${curSlide.Caption.getData()} 
19                        </#if> 
20                    </div> 
21                    <div class="slide-content"> 
22                        <p class="slide-text">${curSlide.Text.getData()}</p> 
23                        <#if curSlide.Image?? && curSlide.Image?has_content> 
24                            <div class="slide-content-image"> 
25                                <img src="${common.getScaledImageURL(curSlide.Image.getData(), "bg-image-medium")}" data-src="${common.getScaledImageURL(curSlide.Image.getData(), "bg-image-medium")}" class="slide__image" alt="${common.getAltText(curSlide.Image.data)}" loading="lazy"/> 
26                            </div> 
27                        </#if> 
28                    </div> 
29                </div> 
30            </div> 
31        </#list> 
32    </div> 
33</section> 
34 
35<script> 
36 
37    window.addEventListener("load", function () { 
38        function ${namespace}_updateInfo(info) { 
39            for (var i = 0; i < info.navItems.length; i++) { 
40                info.navItems[i].setAttribute('aria-label','Folie ' + (i+1)); 
41
42 
43            info.navItems[info.navCurrentIndex].setAttribute('aria-label','Folie ' + (info.navCurrentIndex + 1) + ' (aktuell)'); 
44 
45            info.controlsContainer.setAttribute('aria-label', 'Navigationselemente'); 
46            info.prevButton.setAttribute('aria-label','zur vorhergehenden Folie springen'); 
47            info.nextButton.setAttribute('aria-label','zur nächsten Folie springen'); 
48            info.navContainer.setAttribute('aria-label','Auswahl der Folien') 
49
50 
51        var slider = tns({ 
52            container: '#slider_${namespace} .slides-list', 
53            items: 1, 
54            slideBy: 'page', 
55            center: true, 
56            controlsPosition: 'bottom', 
57            navPosition: 'bottom', 
58            touch: true, 
59            mouseDrag: true, 
60            freezable: true, 
61            autoHeight: false, 
62            speed: 600, 
63            arrowKeys: true, 
64            lazyload: true, 
65            lazyloadSelector: '.slide__image', 
66            controlsText: ['<span class="icon-bg icon-bg--arrow2-left"></span>','<span class="icon-bg icon-bg--arrow2-right"></span>'], 
67            onInit: function (info) { 
68                ${namespace}_updateInfo(info); 
69
70        }); 
71        slider.events.on('indexChanged', function(info) { 
72            ${namespace}_updateInfo(info); 
73        }); 
74    }); 
75</script> 
 
 
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> 
 

Sie wollen ein Projekt starten? Unsere Linksammlung hilft Ihnen dabei

Wenn Sie daran denken, ein Projekt zu initiieren und eine Maßnahme umzusetzen, nutzen Sie einfach unsere Linksammlung als Startpunkt. Von dort aus gelangen Sie mit einem Klick zum Leitfaden zur Gewässerbewirtschaftung und zu weiteren relevanten Materialien, beispielsweise zu Informationen zum Ökokonto oder zu den Förderrichtlinien Wasserwirtschaft. Alles bequem an einem Ort.

 

Häufige Bedenken – und warum Sie diese vergessen können

 

Interesse? So geht es weiter

Konnten wir Ihr Interesse wecken? Setzen Sie sich bereits gedanklich mit der Umsetzung einer Maßnahme auseinander? Dann machen Sie Nägel mit Köpfen. Die Zulassungsbehörden sind in der Regel die unteren Wasserbehörden bei den Landratsämtern oder kreisfreien Städten. Sie sind damit auch Ihre erste Anlaufstelle für die Abstimmung und Zulassung eines Vorhabens – oder können an die richtige Stelle verweisen. 


Auf dem Serviceportal Baden-Württemberg finden Sie unter der Rubrik „Zugehörige Leistungen“ Informationen zu den wasserrechtlichen Verfahren – und Ihre Ansprechpersonen.